2019-05-17  Eric Carlson  <eric.carlson@apple.com>

        Allow sequential playback of media files when initial playback started with a user gesture
        https://bugs.webkit.org/show_bug.cgi?id=197959
        <rdar://problem/50655207>

        Reviewed by Youenn Fablet.

        Test: media/playlist-inherits-user-gesture.html

        * dom/Document.cpp:
        (WebCore::Document::processingUserGestureForMedia const): Return true if it is within
        one second of the last HTMLMediaElement 'ended' event.
        * dom/Document.h:
        (WebCore::Document::mediaFinishedPlaying):

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute): removeBehaviorsRestrictionsAfterFirstUserGesture -> 
        removeBehaviorRestrictionsAfterFirstUserGesture.
        (WebCore::HTMLMediaElement::load): Ditto. Don't call removeBehaviorsRestrictionsAfterFirstUserGesture,
        it will be done in prepareForLoad.
        (WebCore::HTMLMediaElement::prepareForLoad): removeBehaviorsRestrictionsAfterFirstUserGesture -> 
        removeBehaviorRestrictionsAfterFirstUserGesture.
        (WebCore::HTMLMediaElement::audioTrackEnabledChanged): Ditto.
        (WebCore::HTMLMediaElement::play): Ditto.
        (WebCore::HTMLMediaElement::pause): Ditto.
        (WebCore::HTMLMediaElement::setVolume): Ditto.
        (WebCore::HTMLMediaElement::setMuted): Ditto.
        (WebCore::HTMLMediaElement::webkitShowPlaybackTargetPicker): Ditto.
        (WebCore::HTMLMediaElement::dispatchEvent): Call document().mediaFinishedPlaying()
        when dispatching the 'ended' event.
        (WebCore::HTMLMediaElement::removeBehaviorRestrictionsAfterFirstUserGesture): Rename. Set
        m_removedBehaviorRestrictionsAfterFirstUserGesture.
        (WebCore::HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture): Deleted.
        * html/HTMLMediaElement.h:
        
        * html/HTMLVideoElement.cpp:
        (WebCore:HTMLVideoElement::nativeImageForCurrentTime): Convert to runtime logging.
        (WebCore:HTMLVideoElement::webkitEnterFullscreen): Ditto.
        (WebCore:HTMLVideoElement::webkitSetPresentationMode): Ditto.
        (WebCore:HTMLVideoElement::fullscreenModeChanged): Ditto.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::removeBehaviorRestriction): Update log message.

2019-05-17  Brent Fulgham  <bfulgham@apple.com>

        Hardening: Prevent FrameLoader crash due to SetForScope
        https://bugs.webkit.org/show_bug.cgi?id=197458
        <rdar://problem/50368338>

        Reviewed by Chris Dumez.

        Since SetForScope takes action during a function returns, it might cause
        a crash if its scope is broader than the value it is resetting.

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

2019-05-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Need WebKitContextMenuItemType to open emoji picker
        https://bugs.webkit.org/show_bug.cgi?id=176760

        Reviewed by Michael Catanzaro.

        Add a new context menu item to insert an emoji.

        * loader/EmptyClients.cpp: Empty implementation of ContextMenuClient::insertEmoji().
        * page/ContextMenuClient.h: Add insertEmoji for GTK port.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Handle insert emoji action.
        (WebCore::ContextMenuController::populate): Add insert emoji item after select all.
        (WebCore::ContextMenuController::checkOrEnableIfNeeded const): Handle insert emoji action.
        * platform/ContextMenuItem.h: Add insert emoji action.
        * platform/LocalizedStrings.h:
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::contextMenuItemTagInsertEmoji):

2019-05-16  Greg Doolittle  <gr3g@apple.com>

        AX: Unship some ARIA string reflectors that are to-be-replaced by element reflection
        https://bugs.webkit.org/show_bug.cgi?id=197764
        <rdar://problem/50649689>

        Reviewed by Chris Fleizach.

        Specifically these:
        - ariaActiveDescendant
        - ariaControls
        - ariaDescribedBy
        - ariaDetails
        - ariaErrorMessage
        - ariaFlowTo
        - ariaLabelledBy
        - ariaOwns

        Test: LayoutTests/accessibility/ARIA-reflections.html (updated)

        * accessibility/AriaAttributes.idl:

2019-05-16  Youenn Fablet  <youenn@apple.com>

        CoreAudioCaptureSource should be marked as an audio capture track
        https://bugs.webkit.org/show_bug.cgi?id=197953
        <rdar://problem/50552007>

        Reviewed by Eric Carlson.

        Manually tested.

        * platform/mediastream/mac/CoreAudioCaptureSource.h:
        Mark it as microphone so that it can get muted properly.

2019-05-16  Alex Christensen  <achristensen@webkit.org>

        Add SPI to set a list of hosts to which to send custom header fields cross-origin
        https://bugs.webkit.org/show_bug.cgi?id=197397

        Reviewed by Geoff Garen.

        In r223001 I added the ability to send custom headers, but with a restriction that they will not be sent except to the origin of the main document.
        We need the ability to specify what origins to send these headers to even if they are not first party requests.
        We get this information in a list of strings which are the hosts to send the headers to.  Some of the strings have an asterisk at the beginning,
        indicating that the headers are to be sent to all subdomains.

        I repurposed some ObjC SPI that was never adopted, but I keep testing the C API that was to verify no regression.
        I also added some new API tests for the new behavior.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CustomHeaderFields.cpp: Added.
        (WebCore::CustomHeaderFields::thirdPartyDomainsMatch const):
        * loader/CustomHeaderFields.h: Added.
        (WebCore::CustomHeaderFields::encode const):
        (WebCore::CustomHeaderFields::decode):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setCustomHeaderFields): Deleted.
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setCustomHeaderFields):
        (WebCore::DocumentLoader::customHeaderFields const):
        (WebCore::DocumentLoader::customHeaderFields): Deleted.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

2019-05-16  Ali Juma  <ajuma@chromium.org>

        [IntersectionObserver] Regression: No initial observation when nothing else triggers rendering
        https://bugs.webkit.org/show_bug.cgi?id=197891

        Reviewed by Simon Fraser.

        Schedule a rendering update whenever a new IntersectionObserver target is added.

        Test: intersection-observer/initial-observation.html

        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::observe):

2019-05-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [FreeType] Some character sequences with a variation selector are not rendered
        https://bugs.webkit.org/show_bug.cgi?id=197838

        Reviewed by Michael Catanzaro.

        We get the invalid glyph instead. See http://mts.io/2015/04/21/unicode-symbol-render-text-emoji/. In the table at
        the end the Emoji and Text columns are not correctly rendered. It happens also when copying an emoji from
        GtkEmojiChooser and pasting in WebKit text field, because GTK appends U+FE0F to all emojis to force the emoji
        style. We need to take into account the variation selector when checking if a font can render a combining
        sequence, using FT_Face_GetCharVariantIndex to get the right glyph in case of variation character present.

        * platform/graphics/Font.cpp:
        (WebCore::Font::platformSupportsCodePoint const): Add optional variation parameter.
        (WebCore::Font::canRenderCombiningCharacterSequence const): Take into account variation selector characters
        * platform/graphics/Font.h:
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::FontCascade::fontForCombiningCharacterSequence const): Check variation selectors 0xFE0E and 0xFE0F to
        decide whether to use the emoji or text style.
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformSupportsCodePoint const): Return false when a variation character is passed so that
        characters are checked individually.
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::Font::platformSupportsCodePoint const): Use FT_Face_GetCharVariantIndex when a variation character is
        passed.
        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:
        (WebCore::harfBuzzFontFunctions): Do not return true when FT_Face_GetCharVariantIndex returns 0.

2019-05-16  Greg Hughes  <ghughes@apple.com>

        Updated screenHasInvertedColors to use AppKit when available
        https://bugs.webkit.org/show_bug.cgi?id=197935
        <rdar://problem/50834405>

        Reviewed by Chris Fleizach.

        * platform/mac/PlatformScreenMac.mm:
        (WebCore::collectScreenProperties):
        (WebCore::screenHasInvertedColors):

2019-05-15  Simon Fraser  <simon.fraser@apple.com>

        Avoid a recursive descendants layer walk sometimes
        https://bugs.webkit.org/show_bug.cgi?id=197939

        Reviewed by Zalan Bujtas.

        If a layer got composited post-descendants because it needs to clip, for example, we'd do a recursive
        descendant tree walk to add layers to the overlap map. However, all the descendants would already
        have contributed to the overlap map if some non-root ancestor was already composited. So we can
        skip the addDescendantsToOverlapMapRecursive() if we know, before descendants, whether there's
        a non-root composited ancestor.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::CompositingState::hasNonRootCompositedAncestor const):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2019-05-15  Simon Fraser  <simon.fraser@apple.com>

        Clean up code related to compositing overlap map maintenance
        https://bugs.webkit.org/show_bug.cgi?id=197936

        Reviewed by Zalan Bujtas.

        Clarify the logic around updating the overlap map:

        When a layer becomes composited, or paints into a non-root composited layer, we add it to the overlap map
        after traversing descendants (since it only affets layers later in traversal).

        If a layer became composited after traversing descendants, we need to go back and add all the descendants
        to the overlap map with a recursive traversal.

        We can do all this near the end of computeCompositingRequirements/traverseUnchangedSubtree because
        we only check overlap when we enter this function on later layers.

        Add a CompositingOverlap log channel and use it to log the state of the overlap map.

        * platform/Logging.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::traverseUnchangedSubtree):
        (WebCore::RenderLayerCompositor::addToOverlapMap const):
        (WebCore::RenderLayerCompositor::addDescendantsToOverlapMapRecursive const):
        (WebCore::RenderLayerCompositor::updateOverlapMap const):
        (WebCore::RenderLayerCompositor::addToOverlapMap): Deleted.
        (WebCore::RenderLayerCompositor::addToOverlapMapRecursive): Deleted.
        * rendering/RenderLayerCompositor.h:

2019-05-15  Timothy Hatcher  <timothy@apple.com>

        REGRESSION (r245072): Missing code in Document::styleColorOptions to propagate StyleColor::Options::UseInactiveAppearance
        https://bugs.webkit.org/show_bug.cgi?id=197930
        rdar://problem/49833954

        Reviewed by Wenson Hsieh and Megan Gardner.

        Add some code that was missing from Document in my original patch for r245072.

        * dom/Document.cpp:
        (WebCore::Document::useSystemAppearance const): Drive-by fix code style.
        (WebCore::Document::useInactiveAppearance const): Added.
        (WebCore::Document::styleColorOptions const): Add StyleColor::Options::UseInactiveAppearance.
        * dom/Document.h: Added useInactiveAppearance().

2019-05-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: user gesture toggle should also force user interaction flag
        https://bugs.webkit.org/show_bug.cgi?id=197269

        Reviewed by Joseph Pecoraro.

        Test: inspector/runtime/evaluate-userGestureEmulation-userIsInteracting.html

        * inspector/agents/page/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::evaluate):

        * page/ChromeClient.h:
        (WebCore::ChromeClient::userIsInteracting const): Added.
        (WebCore::ChromeClient::setUserIsInteracting): Added.

        * testing/Internals.idl:
        * testing/Internals.h:
        * testing/Internals.cpp:
        (WebCore::Internals::userIsInteracting): Added.

2019-05-15  Zalan Bujtas  <zalan@apple.com>

        Do not create a shape object outside of the layout context
        https://bugs.webkit.org/show_bug.cgi?id=197926
        <rdar://problem/50627858>

        Reviewed by Simon Fraser.

        ShapeOutside objects are used to compute line constrains during layout (in a strict sense, they are part of the layout context and should only be mutated during layout).
        If we don't create one during layout, we probably don't need to know its geometry during paint (or any other non-layout activity) either.

        Test: fast/block/float/float-with-shape-outside-crash.html

        * rendering/FloatingObjects.cpp:
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatLeft>::updateOffsetIfNeeded):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatRight>::updateOffsetIfNeeded):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::computeDeltasForContainingBlockLine):

2019-05-15  Youenn Fablet  <youenn@apple.com>

        Mark beacon and ping loads as low priority
        https://bugs.webkit.org/show_bug.cgi?id=197919
        <rdar://problem/50818286>

        Reviewed by Alex Christensen.

        No JS observable change of behavior.

        * Modules/beacon/NavigatorBeacon.cpp:
        (WebCore::NavigatorBeacon::sendBeacon):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::sendPing):

2019-05-15  Simon Fraser  <simon.fraser@apple.com>

        Clean up RenderLayerCompositor::computeCompositingRequirements() and traverseUnchangedSubtree()
        https://bugs.webkit.org/show_bug.cgi?id=197931

        Reviewed by Zalan Bujtas.

        These functions have grown and become hard to maintain, so try to undo some technical debt.

        Rename "childState" to "currentState" since it's the state we pass to children, but also
        is state we change when the current layer becomes composited.

        Separate the layerWillComposite() lambda from layerWillCompositePostDescendants().

        Group the chunks of code at end of the functions into:
            - updating bits on RenderLayer
            - updating compositingState with changes from children and our state
            - doing post-traversal work on overlapMap and backingSharingState

        Code shared between the two functions is pushed into CompositingState::updateWithDescendantStateAndLayer().

        This moves code around but should not cause any behavior change.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::OverlapExtent::knownToBeHaveExtentUncertainty const):
        (WebCore::RenderLayerCompositor::CompositingState::updateWithDescendantStateAndLayer):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::traverseUnchangedSubtree):
        (WebCore::RenderLayerCompositor::clipsCompositingDescendants):
        (WebCore::RenderLayerCompositor::CompositingState::propagateStateFromChildren): Deleted.
        (WebCore::RenderLayerCompositor::CompositingState::propagateStateFromChildrenForUnchangedSubtree): Deleted.
        (WebCore::RenderLayerCompositor::clipsCompositingDescendants const): Deleted.
        * rendering/RenderLayerCompositor.h:

2019-05-15  Simon Fraser  <simon.fraser@apple.com>

        Make LayerOverlapMap able to output to a TextStream
        https://bugs.webkit.org/show_bug.cgi?id=197923

        Reviewed by Zalan Bujtas.

        Make it possible output LayerOverlapMap to a TextStream for logging.

        * rendering/LayerOverlapMap.cpp:
        (WebCore::OverlapMapContainer::rectList const):
        (WebCore::operator<<):
        * rendering/LayerOverlapMap.h:
        (WebCore::LayerOverlapMap::overlapStack const):

2019-05-15  Youenn Fablet  <youenn@apple.com>

        getUserMedia sandbox extensions should not be revoked when a getUserMedia allowed request is being processed
        https://bugs.webkit.org/show_bug.cgi?id=197851

        Reviewed by Alex Christensen.

        Add a completion handler to create a new capture stream.
        This is used by WK2 layer to acknowledge the pending capture request is completed.
        Just after the completion handler, make sure to update the document media state.
        This is done to ensure that, should capture failing, the UIProcess
        knows about it and can manage proper sandbox extension revocation.

        Test: fast/mediastream/gum-stop-track.html

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::allow):
        (WebCore::UserMediaRequest::PendingActivationMediaStream::PendingActivationMediaStream):
        (WebCore::UserMediaRequest::PendingActivationMediaStream::~PendingActivationMediaStream):
        * Modules/mediastream/UserMediaRequest.h:
        (WebCore::UserMediaRequest::PendingActivationMediaStream::create):
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::mockRealtimeMediaSourceCenterEnabled):
        * platform/mock/MockRealtimeMediaSourceCenter.h:

2019-05-15  Simon Fraser  <simon.fraser@apple.com>

        Make LOG_WITH_STREAM more efficient
        https://bugs.webkit.org/show_bug.cgi?id=197905

        Reviewed by Alex Christensen.

        No longer need to conditionalize ClipRects logging on the channel being enabled
        since LOG_WITH_STREAM fix the performance problem.

        Convert some RenderLayerCompositor logging to use LOG_WITH_STREAM.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):
        (WebCore::clipRectsLogEnabled): Deleted.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::traverseUnchangedSubtree):

2019-05-15  Simon Fraser  <simon.fraser@apple.com>

        Move RenderLayerCompositor's OverlapMap to its own file
        https://bugs.webkit.org/show_bug.cgi?id=197915

        Reviewed by Alex Christensen.

        Move OverlapMap to its own file.
        Make use of RectList, which was in the file but unused!
        Allocate OverlapMapContainer on the heap both to avoid header pollution of internals,
        and because they will get bigger in future.

        No behavior change.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/LayerOverlapMap.cpp: Added.
        (WebCore::RectList::append):
        (WebCore::RectList::intersects const):
        (WebCore::OverlapMapContainer::add):
        (WebCore::OverlapMapContainer::overlapsLayers const):
        (WebCore::OverlapMapContainer::unite):
        (WebCore::LayerOverlapMap::LayerOverlapMap):
        (WebCore::LayerOverlapMap::add):
        (WebCore::LayerOverlapMap::overlapsLayers const):
        (WebCore::LayerOverlapMap::pushCompositingContainer):
        (WebCore::LayerOverlapMap::popCompositingContainer):
        * rendering/LayerOverlapMap.h: Added.
        (WebCore::LayerOverlapMap::isEmpty const):
        (WebCore::LayerOverlapMap::geometryMap const):
        (WebCore::LayerOverlapMap::geometryMap):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::traverseUnchangedSubtree):
        (WebCore::RenderLayerCompositor::computeExtent const):
        (WebCore::RenderLayerCompositor::addToOverlapMap):
        (WebCore::RenderLayerCompositor::addToOverlapMapRecursive):
        (WebCore::OverlapMapContainer::add): Deleted.
        (WebCore::OverlapMapContainer::overlapsLayers const): Deleted.
        (WebCore::OverlapMapContainer::unite): Deleted.
        (WebCore::RenderLayerCompositor::OverlapMap::OverlapMap): Deleted.
        (WebCore::RenderLayerCompositor::OverlapMap::add): Deleted.
        (WebCore::RenderLayerCompositor::OverlapMap::overlapsLayers const): Deleted.
        (WebCore::RenderLayerCompositor::OverlapMap::isEmpty const): Deleted.
        (WebCore::RenderLayerCompositor::OverlapMap::pushCompositingContainer): Deleted.
        (WebCore::RenderLayerCompositor::OverlapMap::popCompositingContainer): Deleted.
        (WebCore::RenderLayerCompositor::OverlapMap::geometryMap const): Deleted.
        (WebCore::RenderLayerCompositor::OverlapMap::geometryMap): Deleted.
        (WebCore::RenderLayerCompositor::OverlapMap::RectList::append): Deleted.
        (WebCore::RenderLayerCompositor::OverlapMap::RectList::intersects const): Deleted.
        * rendering/RenderLayerCompositor.h:

2019-05-15  Devin Rousso  <drousso@apple.com>

        Web Automation: elements larger than the viewport have incorrect in-view center point
        https://bugs.webkit.org/show_bug.cgi?id=195696
        <rdar://problem/48737122>

        Reviewed by Simon Fraser.

        Original patch by Brian Burg <bburg@apple.com>.

        Some conversion methods do not exist for `FloatRect`/`FloatPoint`. Fill them in as needed,
        and export some symbols used by WebDriver code to compute an element's in-view center point
        in various coordinate systems.

        * dom/TreeScope.h:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::elementsFromPoint): Added.
        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::absoluteToLayoutViewportPoint const): Added.
        (WebCore::FrameView::layoutViewportToAbsoluteRect const): Added.
        (WebCore::FrameView::absoluteToLayoutViewportRect const): Added.
        * platform/ScrollView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::viewToContents const): Added.
        (WebCore::ScrollView::contentsToView const): Added.
        (WebCore::ScrollView::contentsToRootView const): Added.
        * platform/Widget.h:
        * platform/Widget.cpp:
        (WebCore::Widget::convertToRootView const): Added.
        (WebCore::Widget::convertFromRootView const): Added.
        (WebCore::Widget::convertToContainingView const): Added.
        (WebCore::Widget::convertFromContainingView const): Added.

2019-05-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        Missing cursor/caret showing in search field on google.com
        https://bugs.webkit.org/show_bug.cgi?id=197862
        <rdar://problem/50291989>

        Reviewed by Simon Fraser.

        In this bug, the search field is inside of a fixed position container, which is inside of an empty "overflow:
        hidden" form element (the new layout test demonstrates a simple version of this). The layer of the fixed
        position container's renderer has an overflow clipping layer of itself, and its clipping rect is non-empty, so
        the heuristic initially identifies the layer as not fully clipped. However, as the heuristic ascends the
        RenderLayer tree, it then finds the layer for the "overflow: hidden" form element's renderer; this layer is
        completely clipped, which causes the heuristic to incorrectly believe that the editable element is completely
        clipped.

        To fix the bug, this patch reworks the clipping portion of the heuristic, such that we no longer need to ascend
        the layer tree. Instead of computing the clip rect relative to the nearest ancestor that has an overflow clip
        and then walking up the layer tree repeating this process, simply compute the clip rect relative to RenderView's
        layer, and then walk up to the parent frame and repeat if necessary.

        Test: editing/selection/ios/do-not-hide-selection-in-visible-field.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isTransparentOrFullyClippedRespectingParentFrames const):

2019-05-14  Andy Estes  <aestes@apple.com>

        [Apple Pay] Payment APIs should be completely disabled in web views into which clients have injected user scripts
        https://bugs.webkit.org/show_bug.cgi?id=197751
        <rdar://problem/50631563>

        Reviewed by Alex Christensen.

        In r243324, when a document has had user agent scripts injected into it, payment APIs were
        disabled at runtime by having all entry points return falsy values or throw exceptions
        (e.g., ApplePaySession.canMakePayments() returns false).

        In the case of user scripts in particular (e.g., WKUserScript), since we know whether these
        exist at the time we create a document's DOMWindow, we can do better than r243324 by
        completely disabling the payment APIs in the presence of user scripts.

        To achieve this, this change introduces the 'EnabledByContext' extended attribute for
        interfaces, which instructs the bindings generator to add a conjunct to the payment API
        constructors that asks the interface's implementation class whether it should be enabled for
        a given ScriptExecutionContext. The PaymentRequest and ApplePaySession interfaces adopt this
        new extended attribute to implement the new user script check.

        Added new API tests.

        * Modules/applepay/ApplePaySession.idl:
        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::shouldEnableApplePayAPIs const):
        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentSession.cpp:
        (WebCore::PaymentSession::enabledForContext):
        * Modules/applepay/PaymentSession.h:
        * Modules/paymentrequest/PaymentHandler.cpp:
        (WebCore::PaymentHandler::enabledForContext):
        * Modules/paymentrequest/PaymentHandler.h:
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::enabledForContext):
        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/paymentrequest/PaymentRequest.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (NeedsRuntimeCheck):
        (GenerateRuntimeEnableConditionalString):
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/preprocess-idls.pl:
        (GenerateConstructorAttributes):
        * bindings/scripts/test/JS/JSTestEnabledForContext.cpp: Added.
        * bindings/scripts/test/JS/JSTestEnabledForContext.h: Added.
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::JSTestGlobalObject::finishCreation):
        (WebCore::jsTestGlobalObjectTestEnabledForContextConstructorGetter):
        (WebCore::jsTestGlobalObjectTestEnabledForContextConstructor):
        (WebCore::setJSTestGlobalObjectTestEnabledForContextConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestEnabledForContextConstructor):
        * bindings/scripts/test/TestEnabledForContext.idl: Added.

2019-05-14  Robin Morisset  <rmorisset@apple.com>

        [WHLSL] parseEffectfulSuffix() is never called
        https://bugs.webkit.org/show_bug.cgi?id=195864
        <rdar://problem/50746278>

        Reviewed by Myles C. Maxfield.

        The fix is trivial: when parseEffectfulPrefix does not see a ++ or --, it must call parseEffectfulSuffix.

        No test yet, as it is not testable until the property resolver is finished.
        It will be tested with the rest of the compiler, when we port the testsuite from the js implementation (it already covers this case).

        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parseEffectfulPrefix):

2019-05-14  Robin Morisset  <rmorisset@apple.com>

        [WHLSL] parseEffectfulAssignment should not call parseCallExpression directly
        https://bugs.webkit.org/show_bug.cgi?id=197890

        Reviewed by Myles Maxfield.

        callExpression already appears in effSuffix which is in effPrefix which is in effAssignment, so having it directly in effAssignment as well is useless (and ambiguous).
        I've already fixed the grammar (https://github.com/gpuweb/WHLSL/commit/a07005f4d692fe3370618dca5db218992b362049), the grammar was always good, this patch is fixing the parser.

        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parseEffectfulAssignment):

2019-05-14  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed restoration of non-unified build.

        * Modules/cache/DOMCache.cpp:
        * bindings/js/JSLazyEventListener.h:
        * loader/NavigationScheduler.h:
        * page/Quirks.cpp:
        * page/Quirks.h:
        * rendering/ClipRect.cpp:

2019-05-14  Zalan Bujtas  <zalan@apple.com>

        Do not try to issue repaint while the render tree is being destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=197461
        <rdar://problem/50368992>

        Reviewed by Simon Fraser.

        Test: http/tests/svg/crash-on-reload-with-filter.html

        We don't need to compute repaint rects when the render tree is getting torn down. We'll issue a full repaint at some point.
        Also during full render tree destruction the inline tree state is undefined. We should avoid accessing it.

        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::markAllClientLayersForInvalidation):

2019-05-14  Youenn Fablet  <youenn@apple.com>

        A service worker process should app nap when all its clients app nap
        https://bugs.webkit.org/show_bug.cgi?id=185626
        <rdar://problem/46785908>

        Reviewed by Alex Christensen.

        Update RegistrableDomain to work with SecurityOriginData.
        Add internal API to enable accessing to service worker process throttle state.

        Test: http/wpt/service-workers/mac/processSuppression.https.html

        * platform/RegistrableDomain.h:
        (WebCore::RegistrableDomain::RegistrableDomain):
        (WebCore::RegistrableDomain::matches const):
        (WebCore::RegistrableDomain::registrableDomainFromHost):
        * testing/ServiceWorkerInternals.cpp:
        (WebCore::ServiceWorkerInternals::isThrottleable const):
        * testing/ServiceWorkerInternals.h:
        * testing/ServiceWorkerInternals.idl:
        * workers/service/SWClientConnection.h:
        * workers/service/context/SWContextManager.cpp:
        * workers/service/context/SWContextManager.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::serverToContextConnectionCreated):
        * workers/service/server/SWServer.h:
        (WebCore::SWServer::Connection::server const):
        (WebCore::SWServer::connections const):
        * workers/service/server/SWServerToContextConnection.h:

2019-05-14  Youenn Fablet  <youenn@apple.com>

        getUserMedia capture changes on iOS after homing out
        https://bugs.webkit.org/show_bug.cgi?id=197707

        Reviewed by Eric Carlson.

        In case of muting an AVVideoCaptureSource on iOS, the session is cleared.
        We need to store the preset information, to setup the new session on unnmuting correctly.
        Manually tested.

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setSizeAndFrameRateWithPreset):
        (WebCore::AVVideoCaptureSource::setSessionSizeAndFrameRate):
        (WebCore::AVVideoCaptureSource::setupCaptureSession):

2019-05-14  Oriol Brufau  <obrufau@igalia.com>

        [css-grid] Update grid when changing auto repeat type
        https://bugs.webkit.org/show_bug.cgi?id=197849

        Reviewed by Javier Fernandez.

        Test: imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-change-auto-repeat-tracks.html

        This patch makes two 'repeat()' values for 'grid-template' be considered
        to be different if one uses 'auto-fill' and the other 'auto-fit'.

        Previously, they were considered to be equal if the repeated values
        were the same, without comparing the repeat type. Therefore, the grid
        was not updated when setting both values one after the other.

        * css/CSSGridAutoRepeatValue.cpp:
        (WebCore::CSSGridAutoRepeatValue::equals const):
        * css/CSSGridAutoRepeatValue.h:

2019-05-14  Antti Koivisto  <antti@apple.com>

        Event region computation should respect transforms
        https://bugs.webkit.org/show_bug.cgi?id=197836
        <rdar://problem/50762971>

        Reviewed by Darin Adler.

        * platform/graphics/transforms/AffineTransform.cpp:
        (WebCore::AffineTransform::mapRegion const):

        Add support for transforming regions. Non-rectlinear results use enclosing rects.

        * platform/graphics/transforms/AffineTransform.h:
        * rendering/EventRegion.cpp:
        (WebCore::EventRegionContext::EventRegionContext):
        (WebCore::EventRegionContext::pushTransform):
        (WebCore::EventRegionContext::popTransform):
        (WebCore::EventRegionContext::unite):
        (WebCore::EventRegionContext::contains const):

        Add a context object that holds the current transform.

        * rendering/EventRegion.h:
        (WebCore::EventRegion::makeContext):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/PaintInfo.h:

        Replace the region object with the context.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerByApplyingTransform):

        Apply transforms to regions if needed.

        (WebCore::RenderLayer::collectEventRegionForFragments):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateEventRegion):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):

2019-05-14  Youenn Fablet  <youenn@apple.com>

        Video frame resizing should be using Trim
        https://bugs.webkit.org/show_bug.cgi?id=197722
        <rdar://problem/50602188>

        Reviewed by Eric Carlson.

        Move from letter box to trim mode for resizing.
        This ensures no black stripes are present when rendering the stream.

        Test: fast/mediastream/resize-trim.html

        * platform/cocoa/VideoToolboxSoftLink.cpp:
        * platform/cocoa/VideoToolboxSoftLink.h:
        * platform/graphics/cv/ImageTransferSessionVT.mm:
        (WebCore::ImageTransferSessionVT::ImageTransferSessionVT):

2019-05-14  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Shrink sizeof(UnlinkedFunctionExecutable) more
        https://bugs.webkit.org/show_bug.cgi?id=197833

        Reviewed by Darin Adler.

        * testing/Internals.cpp:
        (WebCore::Internals::parserMetaData):

2019-05-14  Antoine Quint  <graouts@apple.com>

        [Pointer Events] The pointerenter and pointerleave events target the wrong element on iOS
        https://bugs.webkit.org/show_bug.cgi?id=197881
        <rdar://problem/50187657>

        Reviewed by Dean Jackson.

        Test: pointerevents/ios/enter-leave-target.html

        The "pointerenter" and "pointerleave" should target the element on which the event listener was added and not
        the element that would otherwise hit test. This matches the behavior of "mouseenter" and "mouseleave" on macOS.

        * page/PointerCaptureController.cpp:
        (WebCore::PointerCaptureController::dispatchEventForTouchAtIndex):

2019-05-14  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [CG] Adding support for HEIF-sequence ('public.heics') images
        https://bugs.webkit.org/show_bug.cgi?id=197384

        Reviewed by Simon Fraser.

        -- Get the image repetitionCount and the frame duration.
        -- Add a new function setAdditionalSupportedImageTypesForTesting() which
           takes a delimited String.
        -- Add internal APIs to retrive the image frame count and the frame
           duration.

        Tests: fast/images/animated-heics-draw.html
               fast/images/animated-heics-verify.html

        * platform/graphics/ImageSource.h:
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::animationPropertiesFromProperties):
        (WebCore::animationHEICSPropertiesFromProperties):
        (WebCore::ImageDecoderCG::repetitionCount const):
        (WebCore::ImageDecoderCG::frameDurationAtIndex const):
        * platform/graphics/cg/UTIRegistry.cpp:
        (WebCore::setAdditionalSupportedImageTypesForTesting):
        * platform/graphics/cg/UTIRegistry.h:
        * testing/Internals.cpp:
        (WebCore::Internals::imageFrameCount):
        (WebCore::Internals::imageFrameDurationAtIndex):
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::setAdditionalSupportedImageTypesForTesting):
        * testing/js/WebCoreTestSupport.h:

2019-05-14  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Use max size to compute auto repeat tracks
        https://bugs.webkit.org/show_bug.cgi?id=197854

        Reviewed by Javier Fernandez.

        When available size is indefinite we should use max size to compute the number of auto repeat tracks.

        The spec text is very clear (https://drafts.csswg.org/css-grid/#auto-repeat):
        > When auto-fill is given as the repetition number, if the grid container
        > has a definite size or **max size** in the relevant axis...

        So far we were not doing that for widths, in this patch we modify RenderGrid::computeAutoRepeatTracksCount()
        to do the same than for heights.

        We also take advantage to fix problems related to min|max sizes and box-sizing property,
        that were inconsistent for columns and rows.

        Tests: imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-auto-repeat-max-size-001.html
               imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-auto-repeat-max-size-002.html
               imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-auto-repeat-min-max-size-001.html
               imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-auto-repeat-min-size-001.html
               imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-auto-repeat-min-size-002.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeAutoRepeatTracksCount const):

2019-05-14  Joonghun Park  <pjh0718@gmail.com>

        Implement page-break-* and -webkit-column-break-* as legacy-shorthands.
        https://bugs.webkit.org/show_bug.cgi?id=197656

        Reviewed by Darin Adler.

        According to https://drafts.csswg.org/css-cascade-4/#legacy-shorthand,
        implement page-break-* and -webkit-column-break-* as legacy-shorthands for break-*.

        This change also serialize page-break-* properties
        to CSSStyleDeclaration,
        per https://drafts.csswg.org/css-break/#page-break-properties.

        * css/CSSProperties.json:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertFontSynthesis):
        (WebCore::StyleBuilderConverter::convertPageBreakBetween): Deleted.
        (WebCore::StyleBuilderConverter::convertPageBreakInside): Deleted.
        (WebCore::StyleBuilderConverter::convertColumnBreakBetween): Deleted.
        (WebCore::StyleBuilderConverter::convertColumnBreakInside): Deleted.
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue const):
        (WebCore::StyleProperties::pageBreakPropertyValue const):
        * css/StyleProperties.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseValueStart):
        (WebCore::mapFromPageBreakBetween):
        (WebCore::CSSPropertyParser::parseShorthand):
        (WebCore::isLegacyBreakProperty): Deleted.

2019-05-14  Javier Fernandez  <jfernandez@igalia.com>

        Implement "line-break: anywhere"
        https://bugs.webkit.org/show_bug.cgi?id=181169
        <rdar://problem/48507088>

        Reviewed by Myles C. Maxfield.

        The CSS WG resolved [1] to add a new value 'anywhere' to the 'line-break'
        CSS property in order to allow additional breaking opportunities not
        considered in the definition of the 'word-break: break-all'.

        [1] https://github.com/w3c/csswg-drafts/issues/1171

        Tests: imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-003.html
               imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-004.html
               imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-005.html
               imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-006.html
               imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-007.html
               imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-008.html
               imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-009.html
               imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-010.html
               imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-011.html
               imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-012.html
               imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-016.html
               imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-017.html
               imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-018.html
               imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-019.html
               imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-021.html
               imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-022.html
               imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-023.html
               imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-024.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator LineBreak const):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        * rendering/BreakLines.h:
        (WebCore::nextBreakablePositionBreakCharacter):
        (WebCore::isBreakable):
        * rendering/RenderText.cpp:
        (WebCore::mapLineBreakToIteratorMode):
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleText):
        * rendering/style/RenderStyleConstants.h:

2019-05-13  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix after 245258, missing ThreadSpecific.h include
        https://bugs.webkit.org/show_bug.cgi?id=197146

        * platform/ios/wak/WebCoreThread.mm:

2019-05-13  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Simplify GCThread and CompilationThread flags by adding them to WTF::Thread
        https://bugs.webkit.org/show_bug.cgi?id=197146

        Reviewed by Saam Barati.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::hasPendingActivity const):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::hasPendingActivity const):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::hasPendingActivity const):

2019-05-13  Geoffrey Garen  <ggaren@apple.com>

        Downgrade RELEASE_ASSERT TO RELEASE_LOG_FAULT for SQLite Class A files
        https://bugs.webkit.org/show_bug.cgi?id=197760

        Reviewed by Jer Noble.

        Only makeSafeToUseMemoryMapForPath() if needed. (Fixed missing brace.)

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

2019-05-13  Tadeu Zagallo  <tzagallo@apple.com>

        JSObject::getOwnPropertyDescriptor is missing an exception check
        https://bugs.webkit.org/show_bug.cgi?id=197693

        Reviewed by Saam Barati.

        JSObject::getOwnPropertyDescriptor assumes that getOwnPropertySlot returns false
        if an exception is thrown, but that was not true for JSLocation::getOwnPropertySlotCommon.

        This is already covered by http/tests/security/cross-frame-access-getOwnPropertyDescriptor.html

        * bindings/js/JSLocationCustom.cpp:
        (WebCore::getOwnPropertySlotCommon):
        (WebCore::JSLocation::getOwnPropertySlot):
        (WebCore::JSLocation::getOwnPropertySlotByIndex):

2019-05-13  Antti Koivisto  <antti@apple.com>

        REGRESSION (r245208): compositing/shared-backing/sharing-bounds-non-clipping-shared-layer.html asserts
        https://bugs.webkit.org/show_bug.cgi?id=197818
        <rdar://problem/50705762>

        Reviewed by Simon Fraser.

        Tests: fast/scrolling/ios/event-region-scale-transform-shared.html
               fast/scrolling/ios/event-region-translate-transform-shared.html

        This fixes the assert. However the added tests demonstrate that transform is not taken into account
        when computing the event region, https://bugs.webkit.org/show_bug.cgi?id=197836.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateEventRegion):

2019-05-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Font formatting options don't work when composing a message in Yahoo mail
        https://bugs.webkit.org/show_bug.cgi?id=197813
        <rdar://problem/49382250>

        Reviewed by Darin Adler.

        The bug happens because on mousedown, the "Aa Font" menu item's event handler hides itself before changing the
        font at the text selection. This causes us to clear the selection in FocusController::setFocusedElement.

        There is existing logic in clearSelectionIfNeeded that would normally prevent us from clearing the selection due
        to the mousePressNode not being able to start a selection. However, since the clickable element in this case is
        hidden during mousedown, it is missing a renderer, and we bail from the `mousePressNode->renderer() &&
        !mousePressNode->canStartSelection()` check as a result.

        This check was orginally added in https://trac.webkit.org/r24334 to avoid clearing the selection when clicking
        a button; the intention appears to have been making it so that clicking on something that could not start a
        selection (back then, synonymous with -webkit-user-select: ignore;) would not clear the current selection; to
        this end, it seems odd to additionally require that the thing being clicked should still have a renderer, so
        it seems safe to remove this requirement.

        Test: editing/selection/preserve-selection-when-clicking-button.html

        * page/FocusController.cpp:
        (WebCore::clearSelectionIfNeeded):

2019-05-13  Eric Carlson  <eric.carlson@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=197793
        <rdar://problem/46429187>

        Unreviewed, build fix after r245199.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::externalOutputDeviceAvailableDidChange):

2019-05-13  Darin Adler  <darin@apple.com>

        WHLSLPrepare.cpp always recompiles, even if nothing was changed
        https://bugs.webkit.org/show_bug.cgi?id=197151

        Reviewed by Dan Bernstein and Keith Rollin.

        * DerivedSources-input.xcfilelist: Script updated this automatically after
        DerivedSources.make was corrected.
        * DerivedSources-output.xcfilelist: Ditto, although I had to manually remove
        one bogus leftover reference to WHLSLStandardLibrary.cpp.

        * DerivedSources.make: Updated the rule that builds WHSLStandardLibrary.h to
        no longer refer to nonexistent WHLSLStandardLibrary.cpp. Because the dependency
        was on a file that was never created, the rule to regenerate WHSLStandardLibrary.h
        was running on every build, instead of only when one of the dependencies changed.

2019-05-12  Simon Fraser  <simon.fraser@apple.com>

        When the set of backing-sharing layers changes, we need to issue a repaint
        https://bugs.webkit.org/show_bug.cgi?id=197825

        Reviewed by Zalan Bujtas.

        If the set of layers painting into a shared backing store changes, we need
        to repaint that backing store. This happens when scrolling as shared layers
        enter the visible area.

        Test: compositing/shared-backing/overflow-scroll/repaint-shared-on-scroll.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setBackingSharingLayers):

2019-05-02  Simon Fraser  <simon.fraser@apple.com>

        Add logging for RenderLayer clip rects
        https://bugs.webkit.org/show_bug.cgi?id=197547

        Reviewed by Zalan Bujtas.

        Add a ClipRects log channel, and stream output for ClipRect and ClipRects.

        The ClipRect code is performance sensitive, even in debug, so guard the log sites
        with clipRectsLogEnabled() because the macro still evaluates its arguments even if
        the channel is disabled (we need some better way to log that doesn't do this).

        * platform/Logging.h:
        * rendering/ClipRect.cpp:
        (WebCore::operator<<):
        * rendering/ClipRect.h:
        * rendering/RenderLayer.cpp:
        (WebCore::operator<<):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:

2019-05-12  Simon Fraser  <simon.fraser@apple.com>

        Refactor composited backing-sharing code
        https://bugs.webkit.org/show_bug.cgi?id=197824

        Reviewed by Zalan Bujtas.

        Clean up the backing-sharing code to share more code, and make it easier to understand.
        
        Moves more logic into member functions on BackingSharingState, which are named to make
        their functions clearer: startBackingSharingSequence/endBackingSharingSequence.
        
        computeCompositingRequirements() and traverseUnchangedSubtree() now just call
        updateBeforeDescendantTraversal/updateAfterDescendantTraversal.

        No behavior change.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::willBeDestroyed):
        (WebCore::RenderLayerBacking::setBackingSharingLayers): Remove the early return, since
        we need to call setBackingProviderLayer() on the sharing layers in both code paths.
        (WebCore::RenderLayerBacking::removeBackingSharingLayer):
        (WebCore::RenderLayerBacking::clearBackingSharingLayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::BackingSharingState::backingProviderCandidate const):
        (WebCore::RenderLayerCompositor::BackingSharingState::appendSharingLayer):
        (WebCore::RenderLayerCompositor::BackingSharingState::startBackingSharingSequence):
        (WebCore::RenderLayerCompositor::BackingSharingState::endBackingSharingSequence):
        (WebCore::RenderLayerCompositor::BackingSharingState::updateBeforeDescendantTraversal):
        (WebCore::RenderLayerCompositor::BackingSharingState::updateAfterDescendantTraversal):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::traverseUnchangedSubtree):
        (WebCore::RenderLayerCompositor::BackingSharingState::resetBackingProviderCandidate): Deleted.
        * rendering/RenderLayerCompositor.h:

2019-05-12  Youenn Fablet  <youenn@apple.com>

        Use clampTo in AVVideoCaptureSource::setSizeAndFrameRateWithPreset
        https://bugs.webkit.org/show_bug.cgi?id=197704

        Reviewed by Alex Christensen.

        Use clampTo as suggested in bug 196214 review.
        No change of behavior.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setSizeAndFrameRateWithPreset):

2019-05-12  Youenn Fablet  <youenn@apple.com>

        Use the main screen for screen capture
        https://bugs.webkit.org/show_bug.cgi?id=197804
        <rdar://problem/47671383>

        Reviewed by Eric Carlson.

        If the main screen, i.e. the screen that has focus at the time of
        selection of the screen to capture, is capturable, add it to the list
        of screen devices, but do not add any other screen.
        This will make sure the main screen is selected.
        Manually tested.

        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
        (WebCore::ScreenDisplayCaptureSourceMac::screenCaptureDevices):

2019-05-12  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Suppress extra didReceiveAuthenticationChallenge call when accessing a server which checks basic auth.
        https://bugs.webkit.org/show_bug.cgi?id=197650

        Reviewed by Fujii Hironori.

        When Curl port accesses a page which checks Basic Authentication credential and server trust challenge occurs,
        Curl port calls extra didReceiveAuthenticationChallenge unnecessarily.
        This is because Curl port discards information about allowed server trust challenge before in NetworkDataTaskCurl::restartWithCredential.

        Test: http/tests/ssl/curl/certificate-and-authentication.html

        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::isServerTrustEvaluationDisabled):

2019-05-11  Simon Fraser  <simon.fraser@apple.com>

        Overflow scroll that becomes non-scrollable should stop being composited
        https://bugs.webkit.org/show_bug.cgi?id=197817
        <rdar://problem/50697290>

        Reviewed by Antti Koivisto.

        Remove the iOS-specific #ifdef around code that triggers a compositing re-evaluation
        when scrolling state changes.

        Test: compositing/scrolling/async-overflow-scrolling/become-non-scrollable.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):

2019-05-11  Simon Fraser  <simon.fraser@apple.com>

        Layer bounds are incorrect for sharing layers that paint with transforms
        https://bugs.webkit.org/show_bug.cgi?id=197768
        <rdar://problem/50695493>

        Reviewed by Zalan Bujtas.

        We don't need to traverse shared layers if the backing-provider has overflow clip,
        because we know they are containing-block descendants and therefore clipped.

        Note tha the CSS "clip" property doesn't guarantee this, because the clip rect
        can be larger than the element, so in that case we just traverse shared layers.

        Tests: compositing/shared-backing/sharing-bounds-clip.html
               compositing/shared-backing/sharing-bounds-non-clipping-shared-layer.html
               compositing/shared-backing/sharing-bounds-transformed-sharing-layer.html
               compositing/shared-backing/sharing-bounds.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):

2019-05-11  Simon Fraser  <simon.fraser@apple.com>

        Translucent gradient rendering bug due to will-change transform
        https://bugs.webkit.org/show_bug.cgi?id=197654
        <rdar://problem/50547664>

        Reviewed by Dean Jackson.
        
        We failed to re-evaluate 'contentsOpaque' when a background changed, because this
        happened in updateGeometry() and that doesn't run for background changes.
        
        However, 'contentsOpaque' also requires knowing about geometry because we have to
        turn it off when there's subpixel positioning, and updateConfiguration()
        runs before updateGeometry().
        
        So compute m_hasSubpixelRounding in updateGeometry() and set contentsOpaque in
        updateAfterDescendants().

        Test: compositing/contents-opaque/background-change-to-transparent.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::updateAfterDescendants):
        * rendering/RenderLayerBacking.h:

2019-05-11  Simon Fraser  <simon.fraser@apple.com>

        When the scroller hosting a shared layer becomes non-scrollable, content disappears
        https://bugs.webkit.org/show_bug.cgi?id=197766
        <rdar://problem/50695808>

        Reviewed by Zalan Bujtas.

        RenderLayerCompositor::requiresOwnBackingStore() should return true for a layer that shares
        its backing store. We always made backing for overlap layers, so even  if the sharing layers
        have no painted content, this should rarely be a backing store memory regression.

        Test: compositing/shared-backing/overflow-scroll/sharing-layer-becomes-non-scrollable.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore const):

2019-05-11  Simon Fraser  <simon.fraser@apple.com>

        Backing-sharing layers with transforms render incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=197692
        <rdar://problem/50652127>

        Reviewed by Antti Koivisto.

        Layers that paint into shared backing need to enter the RenderLayer painting code
        in a way that paints the filters, transforms, opacity and blending.
        
        RenderLayerBacking::paintIntoLayer() normally enters at paintLayerContents(), because
        the effects are rendered via the GraphicsLayer, but shared layers will paint effects.
        Note that if the backing-provider has effects, it will be the stacking context
        for the shared layers, so it's correct that sharing layers are impacted by effects
        on the backing-provider.

        In addition, we have to ensure that we don't over-eagerly make layers shared.
        Consider:
        
        <div class="clipping">
            <div class="sharing">
                <div class="inner">
                </div>
            </div>
        </div>
        
        Here "clipping" is the provider layer, "sharing" paints into shared backing, but
        we don't want to also mark "inner" as sharing, since "sharing" will just paint it.
        This is akin to avoiding unnecessary compositing of z-order descendants when they can just
        paint.
        
        To do this we need to ensure that sharing layers are treated like compositing layers
        in the overlap map, i.e. when a layer is sharing, we call overlapMap.pushCompositingContainer(),
        and later overlapMap.popCompositingContainer().

        Tests: compositing/shared-backing/nested-shared-layers-with-opacity.html
               compositing/shared-backing/shared-layer-has-blending.html
               compositing/shared-backing/shared-layer-has-filter.html
               compositing/shared-backing/shared-layer-has-opacity.html
               compositing/shared-backing/shared-layer-has-reflection.html
               compositing/shared-backing/shared-layer-has-transform.html
               compositing/shared-backing/shared-layer-isolates-blending.html
               compositing/shared-backing/shared-transformed-layer-bounds.html
               compositing/shared-backing/sharing-layer-becomes-non-scrollable.html
               compositing/shared-backing/sharing-layer-has-effect.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerWithEffects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::CompositingState::stateForPaintOrderChildren const):
        (WebCore::backingProviderLayerCanIncludeLayer):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::traverseUnchangedSubtree):

2019-05-10  Youenn Fablet  <youenn@apple.com>

        A service worker instance should be terminated when its SWServer is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=197801
        <rdar://problem/50587270>

        Reviewed by Chris Dumez.

        On session destruction, the SWServer is destroyed.
        At that time, it should terminate all its running service workers.
        Covered by updated API test.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::~SWServer):

2019-05-10  Eric Carlson  <eric.carlson@apple.com>

        [iOS] HTMLMediaElement sometimes doesn't send 'webkitplaybacktargetavailabilitychanged' event
        https://bugs.webkit.org/show_bug.cgi?id=197793
        <rdar://problem/46429187>

        Reviewed by Jer Noble.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::MediaElementSession): Initialize m_hasPlaybackTargets.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::externalOutputDeviceAvailableDidChange): Log
        target availability.
        (-[WebMediaSessionHelper startMonitoringAirPlayRoutes]): Call the client 
        externalOutputDeviceAvailableDidChange method after the AVRouteDetector is available.

2019-05-09  Geoffrey Garen  <ggaren@apple.com>

        Downgrade RELEASE_ASSERT TO RELEASE_LOG_FAULT for SQLite Class A files
        https://bugs.webkit.org/show_bug.cgi?id=197760

        Reviewed by Jer Noble.

        We have all the data we need, and this crash is happening more than
        expected.

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

2019-05-10  Zalan Bujtas  <zalan@apple.com>

        [iOS] baidu.com: Synthetic bold renders too far apart, appears doubled.
        https://bugs.webkit.org/show_bug.cgi?id=197781
        <rdar://problem/48027412>

        Reviewed by Simon Fraser.

        Synthetic bold is essentially two regular glyphs painted with an offset. While on macOS this offset is always 1px (CSS), on iOS larger font produces higher offset value. At paint time, this offset value (in CSS px unit) get converted
        to a device pixel value taking context scale into account. This conversion ensures that the gap between the 2 regular glyphs won't get wider (in device pixels) as the user pinch zooms in.
        This works as long as the scale on the context is >= 1. This patch ensures that a scaled down context won't blow up this gap.

        Test: fast/text/large-synthetic-bold-with-scale-transform.html

        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::drawGlyphs):

2019-05-10  Brent Fulgham  <bfulgham@apple.com>

        Gracefully handle inaccessible font face data
        https://bugs.webkit.org/show_bug.cgi?id=197762
        <rdar://problem/50433861>

        Reviewed by Per Arne Vollan.

        Make sure CSS Font Face handling gracefully recovers from
        missing font data.

        Test: fast/text/missing-font-crash.html

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::fontLoadEventOccurred):
        (WebCore::CSSFontFace::timeoutFired):
        (WebCore::CSSFontFace::fontLoaded):
        (WebCore::CSSFontFace::font):

2019-05-10  Simon Fraser  <simon.fraser@apple.com>

        ASSERT(isSelfPaintingLayer() || hasSelfPaintingLayerDescendant()) on nytimes.com after r245170
        https://bugs.webkit.org/show_bug.cgi?id=197776

        Reviewed by Zalan Bujtas.

        Only try to paint into shared backing for layers that are able to be composited. This
        avoids trying to do sharing for non-self-painting layers, which doesn't make sense.

        Test: compositing/shared-backing/overflow-scroll/non-self-painting-layer-should-not-share.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2019-05-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix a bunch of compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=197785

        Reviewed by Don Olmstead.

        * CMakeLists.txt: WebCoreTestSupport should accept extra SYSTEM includes.
        * PlatformGTK.cmake: GTK includes should be added to SYSTEM headers to avoid warnings.
        * inspector/InspectorCanvas.cpp: Add preprocessor guards to fix unused function warning.
        * rendering/RenderLayer.cpp: Fix unused variable warning.
        (WebCore::RenderLayer::updateClipRects):

2019-05-10  Antti Koivisto  <antti@apple.com>

        Event region generation needs to know about backing-sharing
        https://bugs.webkit.org/show_bug.cgi?id=197694
        <rdar://problem/50584991>

        Reviewed by Simon Fraser.

        Test: pointerevents/ios/touch-action-region-backing-sharing.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateEventRegion):

        Gather event region from backing sharing layers too.

2019-05-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Add WebKitWebPage::did-associate-form-controls-for-frame and deprecate original did-associate-form-controls
        https://bugs.webkit.org/show_bug.cgi?id=197271

        Reviewed by Youenn Fablet.

        * dom/Document.cpp:
        (WebCore::Document::didAssociateFormControlsTimerFired):
        * loader/EmptyClients.h:
        * page/ChromeClient.h:

2019-05-09  Simon Fraser  <simon.fraser@apple.com>

        Implement backing-sharing in compositing layers, allowing overlap layers to paint into the backing store of another layer
        https://bugs.webkit.org/show_bug.cgi?id=197561
        <rdar://problem/50445998>

        Reviewed by Antti Koivisto.

        This change introduces the concept of layers that share backing store for compositing. A layer
        which is sharing its backing store first paints itself, and then some set of layers which come
        later in paint order in the same stacking context. This reduces the composited layer count in
        some overflow scrolling scenarios, thereby also simplifying the scrolling tree.
        
        A backing-shared layer stores a vector of "sharing" RenderLayer* in its RenderLayerBacking. At
        paint time, the owning layer is painted, then the sharing layers, setting the owning layer as the
        painting root so that positioning and clipping just work.
        
        Sharing layer relationships are constructed in RenderLayerCompositor::computeCompositingRequirements().
        We track the last layer which was composited in paint order as a shared candidate. If a later layer
        would composite for overlap (and no other reasons), then we allow it to share with the candidate
        if the candidate is in its ancestor containing block chain. Sharing is currently limited to layers
        in the same stacking context.
        
        isComposited() returns false for sharing layers, but they are like composited layers in that
        they behave as painting boundaries, so RenderLayer::paintLayer() needs to stop at them,
        and repaints in shared layers have to be directed to their shared layer, hence
        changes to RenderLayer::clippingRootForPainting() and RenderLayer::enclosingCompositingLayerForRepaint().
        
        The clipping boundary logic in RenderLayer::backgroundClipRect() needed to be generalized so that
        all calls to RenderLayer::parentClipRects() check for crossing painting boundaries and use
        TemporaryClipRects in that case.

        Tests: compositing/shared-backing/overflow-scroll/absolute-in-stacking-relative-in-scroller.html
               compositing/shared-backing/overflow-scroll/composited-absolute-in-absolute-in-relative-in-scroller.html
               compositing/shared-backing/overflow-scroll/nested-absolute-with-clipping-in-stacking-overflow.html
               compositing/shared-backing/overflow-scroll/previous-sibling-prevents-inclusiveness.html
               compositing/shared-backing/overflow-scroll/relative-in-clipping-in-scroller-in-clipping.html
               compositing/shared-backing/overflow-scroll/relative-in-clipping-in-scroller-in-relative-clipping.html
               compositing/shared-backing/overflow-scroll/relative-in-div-in-overflow-scroll.html
               compositing/shared-backing/overflow-scroll/scrolled-contents-has-painted-content.html
               compositing/shared-backing/overflow-scroll/scrolled-contents-unconstrained-clip.html
               compositing/shared-backing/overflow-scroll/shared-layer-clipping.html
               compositing/shared-backing/overflow-scroll/shared-layer-composited-bounds.html
               compositing/shared-backing/overflow-scroll/shared-layer-nested-relative-stacking.html
               compositing/shared-backing/overflow-scroll/shared-layer-repaint.html
               compositing/shared-backing/partial-compositing-update.html
               compositing/shared-backing/partial-compositing-update2.html
               compositing/shared-backing/remove-sharing-layer.html
               compositing/shared-backing/sharing-cached-clip-rects.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::ancestorLayerIsInContainingBlockChain const):
        (WebCore::RenderLayer::setBackingProviderLayer):
        (WebCore::RenderLayer::disconnectFromBackingProviderLayer):
        (WebCore::RenderLayer::enclosingCompositingLayerForRepaint const):
        (WebCore::RenderLayer::clippingRootForPainting const):
        (WebCore::RenderLayer::clipToRect):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::updateClipRects):
        (WebCore::RenderLayer::clipCrossesPaintingBoundary const):
        (WebCore::RenderLayer::calculateClipRects const):
        (WebCore::outputPaintOrderTreeLegend):
        (WebCore::outputPaintOrderTreeRecursive):
        (WebCore::inContainingBlockChain): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::willBeDestroyed):
        (WebCore::clearBackingSharingLayerProviders):
        (WebCore::RenderLayerBacking::setBackingSharingLayers):
        (WebCore::RenderLayerBacking::removeBackingSharingLayer):
        (WebCore::RenderLayerBacking::clearBackingSharingLayers):
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        (WebCore::RenderLayerBacking::updateDrawsContent):
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer const):
        (WebCore::RenderLayerBacking::paintIntoLayer):
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::CompositingState::stateForPaintOrderChildren const):
        (WebCore::RenderLayerCompositor::CompositingState::propagateStateFromChildren):
        (WebCore::RenderLayerCompositor::CompositingState::propagateStateFromChildrenForUnchangedSubtree):
        (WebCore::RenderLayerCompositor::BackingSharingState::resetBackingProviderCandidate):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::backingProviderLayerCanIncludeLayer):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::traverseUnchangedSubtree):
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::layerWillBeRemoved):
        (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason const):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderTreeAsText.cpp:

2019-05-09  Daniel Bates  <dabates@apple.com>

        [iOS] Right command key has wrong value for property code
        https://bugs.webkit.org/show_bug.cgi?id=193876
        <rdar://problem/47577308>

        Reviewed by Brent Fulgham.

        We're looking for the wrong Windows virtual key code for the right command key.
        Substitute VK_APPS for VK_RWIN so we can identify the right command key and return
        the correct value for the code property of the DOM key event.

        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::codeForKeyEvent):

2019-05-09  Daniel Bates  <dabates@apple.com>

        [iOS] Numpad comma key has incorrect keyIdentifier property
        https://bugs.webkit.org/show_bug.cgi?id=197753
        <rdar://problem/50636274>

        Reviewed by Brent Fulgham.

        Map the Numpad Comma HID usage code to its Window virtual key code, VK_SEPARATOR,
        so that can compute the keyIdentifier property for the Numpad Comma key. Also
        consider this key as a keypad key just like we do on Mac. There is no discernable
        difference for doing so on iOS because the non-keypad code path computes the same result
        due to GraphicsServices having fixed up the input string for the Numpad Comma to be
        ",", which is want.

        * platform/ios/KeyEventIOS.mm:
        (WebCore::windowsKeyCodeForKeyCode): Map kHIDUsage_KeypadComma to VK_SEPARATOR.
        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::codeForKeyEvent): Add a comment to explain that this key is only on
        JIS keyboards.
        (WebCore::isKeypadEvent): Return true for the Numpad Comma key.

2019-05-09  Zalan Bujtas  <zalan@apple.com>

        Do not mix inline and block level boxes.
        https://bugs.webkit.org/show_bug.cgi?id=197462
        <rdar://problem/50369362>

        Reviewed by Antti Koivisto.

        This patch tightens the remove-anonymous-wrappers logic by checking if the removal would
        produce an inline-block sibling mix.
        When a block level box is removed from the tree, we check if after the removal the anonymous sibling block
        boxes are still needed or whether we can removed them as well (and have only inline level child boxes).
        In addition to checking if the container is anonymous and is part of a continuation, we also need to check
        if collapsing it (and by that moving its children one level up) would cause a inline-block box mix.

        Test: fast/ruby/continuation-and-column-spanner-crash.html

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::removeAnonymousWrappersForInlineChildrenIfNeeded):
        * rendering/updating/RenderTreeBuilderContinuation.cpp:
        (WebCore::RenderTreeBuilder::Continuation::cleanupOnDestroy):

2019-05-09  Eric Carlson  <eric.carlson@apple.com>

        Refine AudioSession route sharing policy
        https://bugs.webkit.org/show_bug.cgi?id=197742
        <rdar://problem/50590818>

        Reviewed by Darin Adler.

        No new tests, updated AVAudioSessionRouteSharingPolicy API test.

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

2019-05-09  Simon Fraser  <simon.fraser@apple.com>

        fast/hidpi/video-controls-in-hidpi.html sometimes asserts in WK1
        https://bugs.webkit.org/show_bug.cgi?id=197695

        Reviewed by Zalan Bujtas.

        With the backing-sharing changes that landed in r245058, some WebKit1 tests with media controls asserted in
        RenderLayerBacking::computeParentGraphicsLayerRect() because a layer would have a m_ancestorClippingLayer,
        but backgroundClipRect() would return an infinite rect.
        
        This happened when a layer tree change caused the layer's compositing ancestor to no longer isolate
        composited blending (which affects the behavior of RenderLayerCompositor:clippedByAncestor()), but we failed
        to mark its composited children as needing the configuration update which would eliminate their m_ancestorClippingLayers.
        
        The fix is to call setChildrenNeedCompositingGeometryUpdate() when isolatesCompositedBlending changes. We don't haev
        setChildrenNeedCompositingConfigurationUpdate(), but setChildrenNeedCompositingGeometryUpdate() has the desired side-effect.

        I was unable to make a standalone test case for this, but the code is exercised by media control tests.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2019-05-09  Brent Fulgham  <bfulgham@apple.com>

        Correct delayed load event handling
        https://bugs.webkit.org/show_bug.cgi?id=197679
        <rdar://problem/50423334>

        Reviewed by Alex Christensen.

        We need to properly account for the fact that JavaScript might run
        while performing loads.

        * dom/Document.cpp:
        (WebCore::Document::loadEventDelayTimerFired):

2019-05-09  Antti Koivisto  <antti@apple.com>

        Elements with "display: inline-block" don't have a touch-action region
        https://bugs.webkit.org/show_bug.cgi?id=197281
        <rdar://problem/50535081>

        Reviewed by Antoine Quint.

        Test: pointerevents/ios/touch-action-region-inline-block.html

        PaintPhase::EventRegion failed to traverse into inline boxes.

        * rendering/InlineElementBox.cpp:
        (WebCore::InlineElementBox::paint):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::paintAsInlineBlock):

2019-05-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r239915): [FreeType] White space skipped when rendering plain text with noto CJK font
        https://bugs.webkit.org/show_bug.cgi?id=197658

        Reviewed by Michael Catanzaro.

        Since r239915 we no longer overwrite control characters with zero width space, they are handled later when
        filling the glyph pages. In Font::platformGlyphInit() there's an optimization to get the glyph of zero with
        space character that assumes that control characters are always overwritten. Since the glyph for character at 0
        index is always overwritten with zero width space, we can avoid loading the page for the actual zero width space
        character and use the first page instead. In the particular case of noto CJK font, character at 0 is mapped to
        the same glyph as space character, so space and zero width space end up being the same glyph. That breaks the
        space width calculation, that returns 0 when isZeroWidthSpaceGlyph() is true. That's why spaces are no
        longer rendered, ComplexTextController::adjustGlyphsAndAdvances() is setting the x advance for the space glyphs
        to 0.

        * platform/graphics/Font.cpp:
        (WebCore::Font::platformGlyphInit): Use the actual zero width space page to get the glyph instead of 0 when
        using FreeType.

2019-05-08  Alex Christensen  <achristensen@webkit.org>

        Fix WPE build.

        * CMakeLists.txt:
        Bots wanted a "PUBLIC" or "PRIVATE" keyword here.

2019-05-08  Alex Christensen  <achristensen@webkit.org>

        Try to fix Linux build

        * platform/graphics/ANGLEWebKitBridge.h:
        Include headers consistently on all platforms.

2019-05-08  Don Olmstead  <don.olmstead@sony.com>

        Update ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=197676

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * PlatformPlayStation.cmake:
        * PlatformWPE.cmake:
        * PlatformWin.cmake:
        * platform/graphics/GLContext.cpp:
        * platform/graphics/egl/GLContextEGL.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLES.h:
        * platform/graphics/opengl/TemporaryOpenGLSetting.cpp:
        * platform/graphics/texmap/TextureMapperGLHeaders.h:

2019-05-08  Chris Dumez  <cdumez@apple.com>

        [iOS Debug] ASSERTION FAILED: !m_originalNode in WebCore::JSLazyEventListener::checkValidityForEventTarget(WebCore::EventTarget &)
        https://bugs.webkit.org/show_bug.cgi?id=197696
        <rdar://problem/50586956>

        Reviewed by Simon Fraser.

        Setting the onorientationchange / onresize event handler on the body should set the event handler on the
        window object, as per the HTML specification. However, calling body.addEventListener() with 'orientationchange'
        or 'resize' should not set the event listener on the window object, only the body. Blink and Gecko seem to
        behave as per specification but WebKit had a quirk for the addEventListener case. The quirk's implementation
        is slightly wrong (because it is unsafe to take a JSLazyEventListener from a body element and add it to the
        window, given that the JSLazyEventListener keeps a raw pointer to its element) and was causing crashes such
        as <rdar://problem/24314027>. As a result, this patch simply drops the WebKit quirk, which will align our
        behavior with other browsers and fix the crashes altogether.

        Test: fast/events/ios/rotation/orientationchange-event-listener-on.body.html

        * dom/Node.cpp:
        (WebCore::tryAddEventListener):
        (WebCore::tryRemoveEventListener):

2019-05-08  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r245058.

        Causes crashes under ASan / GuardMalloc

        Reverted changeset:

        "Implement backing-sharing in compositing layers, allowing
        overlap layers to paint into the backing store of another
        layer"
        https://bugs.webkit.org/show_bug.cgi?id=197561
        https://trac.webkit.org/changeset/245058

2019-05-08  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r245068.

        Caused debug layout tests to exit early due to an assertion
        failure.

        Reverted changeset:

        "All prototypes should call didBecomePrototype()"
        https://bugs.webkit.org/show_bug.cgi?id=196315
        https://trac.webkit.org/changeset/245068

2019-05-08  Megan Gardner  <megan_gardner@apple.com>

        Add quirks to emulate undo and redo in hidden editable areas on some websites
        https://bugs.webkit.org/show_bug.cgi?id=197452

        Reviewed by Alex Christensen.

        UI change, not testable.

        We need to send synthetic keyboard events to the web process to emulate undo and redo
        key combinations for when we are trying to get our undo and redo UI to work
        on rich editing websites that only listen to keystrokes, and don't let us use our
        undo manager to help manage the input content.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent):
        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::isSyntheticEvent):
        (WebCore::PlatformKeyboardEvent::setSyntheticEvent):
        * platform/ios/KeyEventIOS.mm:
        (WebCore::PlatformKeyboardEvent::currentStateOfModifierKeys):
        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::PlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder):
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::PlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder):

2019-05-08  Don Olmstead  <don.olmstead@sony.com>

        CSSFontFaceSource fails to compile when !ENABLE(SVG_FONTS)
        https://bugs.webkit.org/show_bug.cgi?id=197720

        Unreviewed build fix.

        Add usesInDocumentSVGFont to the !ENABLE(SVG_FONT) path.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::font):

2019-05-08  Timothy Hatcher  <timothy@apple.com>

        Add plumbing for inactive system colors in RenderTheme cache.
        https://bugs.webkit.org/show_bug.cgi?id=197699
        rdar://problem/49406936

        Reviewed by Tim Horton.

        * css/StyleColor.h:
        * page/Page.cpp:
        (WebCore::Page::effectiveAppearanceDidChange): Renamed from setUseDarkAppearance.
        * page/Page.h:
        (WebCore::Page::useInactiveAppearance const):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::purgeCaches):
        (WebCore::RenderTheme::platformColorsDidChange):
        (WebCore::RenderTheme::colorCache const):
        * rendering/RenderTheme.h:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setUseDarkAppearanceInternal):

2019-05-08  Robin Morisset  <rmorisset@apple.com>

        All prototypes should call didBecomePrototype()
        https://bugs.webkit.org/show_bug.cgi?id=196315

        Reviewed by Saam Barati.

        This changelog already landed, but the commit was missing the actual changes.

        It was found by existing tests, with the new assert in JSC::Structure

        * bindings/js/JSWindowProxy.cpp:
        (WebCore::JSWindowProxy::setWindow):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GeneratePrototypeDeclaration):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        (WebCore::JSInterfaceNamePrototype::JSInterfaceNamePrototype):
        * bindings/scripts/test/JS/JSMapLike.cpp:
        (WebCore::JSMapLikePrototype::JSMapLikePrototype):
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        (WebCore::JSReadOnlyMapLikePrototype::JSReadOnlyMapLikePrototype):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectPrototype::JSTestActiveDOMObjectPrototype):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::JSTestCEReactionsPrototype::JSTestCEReactionsPrototype):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::JSTestCEReactionsStringifierPrototype::JSTestCEReactionsStringifierPrototype):
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::JSTestCallTracerPrototype::JSTestCallTracerPrototype):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::JSTestClassWithJSBuiltinConstructorPrototype::JSTestClassWithJSBuiltinConstructorPrototype):
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::JSTestDOMJITPrototype::JSTestDOMJITPrototype):
        (WebCore::JSTestDOMJITConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::JSTestEnabledBySettingPrototype::JSTestEnabledBySettingPrototype):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorPrototype::JSTestEventConstructorPrototype):
        (WebCore::JSTestEventConstructorConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetPrototype::JSTestEventTargetPrototype):
        (WebCore::JSTestEventTargetConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionPrototype::JSTestExceptionPrototype):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachablePrototype::JSTestGenerateIsReachablePrototype):
        * bindings/scripts/test/JS/JSTestGlobalObject.h:
        (WebCore::JSTestGlobalObjectPrototype::JSTestGlobalObjectPrototype):
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestIndexedSetterNoIdentifierPrototype::JSTestIndexedSetterNoIdentifierPrototype):
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        (WebCore::JSTestIndexedSetterThrowingExceptionPrototype::JSTestIndexedSetterThrowingExceptionPrototype):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestIndexedSetterWithIdentifierPrototype::JSTestIndexedSetterWithIdentifierPrototype):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfacePrototype::JSTestInterfacePrototype):
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        (WebCore::JSTestInterfaceLeadingUnderscorePrototype::JSTestInterfaceLeadingUnderscorePrototype):
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::JSTestIterablePrototype::JSTestIterablePrototype):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructorPrototype::JSTestJSBuiltinConstructorPrototype):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerPrototype::JSTestMediaQueryListListenerPrototype):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifierPrototype::JSTestNamedAndIndexedSetterNoIdentifierPrototype):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::JSTestNamedAndIndexedSetterThrowingExceptionPrototype::JSTestNamedAndIndexedSetterThrowingExceptionPrototype):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifierPrototype::JSTestNamedAndIndexedSetterWithIdentifierPrototype):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorPrototype::JSTestNamedConstructorPrototype):
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        (WebCore::JSTestNamedDeleterNoIdentifierPrototype::JSTestNamedDeleterNoIdentifierPrototype):
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        (WebCore::JSTestNamedDeleterThrowingExceptionPrototype::JSTestNamedDeleterThrowingExceptionPrototype):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        (WebCore::JSTestNamedDeleterWithIdentifierPrototype::JSTestNamedDeleterWithIdentifierPrototype):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedDeleterWithIndexedGetterPrototype::JSTestNamedDeleterWithIndexedGetterPrototype):
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        (WebCore::JSTestNamedGetterCallWithPrototype::JSTestNamedGetterCallWithPrototype):
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        (WebCore::JSTestNamedGetterNoIdentifierPrototype::JSTestNamedGetterNoIdentifierPrototype):
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        (WebCore::JSTestNamedGetterWithIdentifierPrototype::JSTestNamedGetterWithIdentifierPrototype):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedSetterNoIdentifierPrototype::JSTestNamedSetterNoIdentifierPrototype):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::JSTestNamedSetterThrowingExceptionPrototype::JSTestNamedSetterThrowingExceptionPrototype):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedSetterWithIdentifierPrototype::JSTestNamedSetterWithIdentifierPrototype):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterPrototype::JSTestNamedSetterWithIndexedGetterPrototype):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetterPrototype::JSTestNamedSetterWithIndexedGetterAndSetterPrototype):
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp:
        (WebCore::JSTestNamedSetterWithOverrideBuiltinsPrototype::JSTestNamedSetterWithOverrideBuiltinsPrototype):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        (WebCore::JSTestNamedSetterWithUnforgablePropertiesPrototype::JSTestNamedSetterWithUnforgablePropertiesPrototype):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsPrototype::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsPrototype):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodePrototype::JSTestNodePrototype):
        (WebCore::JSTestNodeConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjPrototype::JSTestObjPrototype):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsPrototype::JSTestOverloadedConstructorsPrototype):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::JSTestOverloadedConstructorsWithSequencePrototype::JSTestOverloadedConstructorsWithSequencePrototype):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::JSTestOverrideBuiltinsPrototype::JSTestOverrideBuiltinsPrototype):
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        (WebCore::JSTestPluginInterfacePrototype::JSTestPluginInterfacePrototype):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        (WebCore::JSTestPromiseRejectionEventPrototype::JSTestPromiseRejectionEventPrototype):
        (WebCore::JSTestPromiseRejectionEventConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        (WebCore::JSTestSerializationPrototype::JSTestSerializationPrototype):
        * bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.cpp:
        (WebCore::JSTestSerializationIndirectInheritancePrototype::JSTestSerializationIndirectInheritancePrototype):
        (WebCore::JSTestSerializationIndirectInheritanceConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        (WebCore::JSTestSerializationInheritPrototype::JSTestSerializationInheritPrototype):
        (WebCore::JSTestSerializationInheritConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        (WebCore::JSTestSerializationInheritFinalPrototype::JSTestSerializationInheritFinalPrototype):
        (WebCore::JSTestSerializationInheritFinalConstructor::prototypeForStructure):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::JSTestSerializedScriptValueInterfacePrototype):
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        (WebCore::JSTestStringifierPrototype::JSTestStringifierPrototype):
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        (WebCore::JSTestStringifierAnonymousOperationPrototype::JSTestStringifierAnonymousOperationPrototype):
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        (WebCore::JSTestStringifierNamedOperationPrototype::JSTestStringifierNamedOperationPrototype):
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        (WebCore::JSTestStringifierOperationImplementedAsPrototype::JSTestStringifierOperationImplementedAsPrototype):
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        (WebCore::JSTestStringifierOperationNamedToStringPrototype::JSTestStringifierOperationNamedToStringPrototype):
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        (WebCore::JSTestStringifierReadOnlyAttributePrototype::JSTestStringifierReadOnlyAttributePrototype):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        (WebCore::JSTestStringifierReadWriteAttributePrototype::JSTestStringifierReadWriteAttributePrototype):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsPrototype::JSTestTypedefsPrototype):

2019-05-08  Don Olmstead  <don.olmstead@sony.com>

        WEBCORE_EXPORT shouldn't be on the class and its methods
        https://bugs.webkit.org/show_bug.cgi?id=197681

        Reviewed by Simon Fraser.

        Remove WEBCORE_EXPORT from the methods.

        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.h:

2019-05-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Add a quirk to synthesize mouse events when modifying the selection
        https://bugs.webkit.org/show_bug.cgi?id=197683
        <rdar://problem/48003980>

        Reviewed by Tim Horton.

        See WebKit ChangeLog for more details.

        Test: editing/selection/ios/dispatch-mouse-events-when-modifying-selection-quirk.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::supportsSelectionUpdatesOnMouseDrag const):

        Add some platform hooks to prevent mousemove events from updating the selection on iOS.

        (WebCore::EventHandler::shouldAllowMouseDownToStartDrag const):

        Add some platform hooks to prevent drag and drop from kicking in when sending synthetic mousemove events to the
        page on iOS (drag and drop is instead triggered by EventHandler::tryToBeginDragAtPoint).

        (WebCore::EventHandler::updateSelectionForMouseDrag):
        * page/EventHandler.h:
        * page/Quirks.cpp:
        (WebCore::Quirks::shouldDispatchSyntheticMouseEventsWhenModifyingSelection const):
        * page/Quirks.h:

        Add the new site-specific quirk.

        * page/Settings.yaml:
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::tryToBeginDragAtPoint):
        (WebCore::EventHandler::supportsSelectionUpdatesOnMouseDrag const):
        (WebCore::EventHandler::shouldAllowMouseDownToStartDrag const):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setShouldDispatchSyntheticMouseEventsWhenModifyingSelection):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

        Add an internal settings hook to opt into this quirk, for use in layout tests.

2019-05-08  Simon Fraser  <simon.fraser@apple.com>

        Implement backing-sharing in compositing layers, allowing overlap layers to paint into the backing store of another layer
        https://bugs.webkit.org/show_bug.cgi?id=197561
        <rdar://problem/50445998>

        Reviewed by Antti Koivisto.

        This change introduces the concept of layers that share backing store for compositing. A layer
        which is sharing its backing store first paints itself, and then some set of layers which come
        later in paint order in the same stacking context. This reduces the composited layer count in
        some overflow scrolling scenarios, thereby also simplifying the scrolling tree.
        
        A backing-shared layer stores a vector of "sharing" RenderLayer* in its RenderLayerBacking. At
        paint time, the owning layer is painted, then the sharing layers, setting the owning layer as the
        painting root so that positioning and clipping just work.
        
        Sharing layer relationships are constructed in RenderLayerCompositor::computeCompositingRequirements().
        We track the last layer which was composited in paint order as a shared candidate. If a later layer
        would composite for overlap (and no other reasons), then we allow it to share with the candidate
        if the candidate is in its ancestor containing block chain. Sharing is currently limited to layers
        in the same stacking context.
        
        isComposited() returns false for sharing layers, but they are like composited layers in that
        they behave as painting boundaries, so RenderLayer::paintLayer() needs to stop at them,
        and repaints in shared layers have to be directed to their shared layer, hence
        changes to RenderLayer::clippingRootForPainting() and RenderLayer::enclosingCompositingLayerForRepaint().
        
        The clipping boundary logic in RenderLayer::backgroundClipRect() needed to be generalized so that
        all calls to RenderLayer::parentClipRects() check for crossing painting boundaries and use
        TemporaryClipRects in that case.

        Tests: compositing/shared-backing/overflow-scroll/absolute-in-stacking-relative-in-scroller.html
               compositing/shared-backing/overflow-scroll/composited-absolute-in-absolute-in-relative-in-scroller.html
               compositing/shared-backing/overflow-scroll/nested-absolute-with-clipping-in-stacking-overflow.html
               compositing/shared-backing/overflow-scroll/previous-sibling-prevents-inclusiveness.html
               compositing/shared-backing/overflow-scroll/relative-in-clipping-in-scroller-in-clipping.html
               compositing/shared-backing/overflow-scroll/relative-in-clipping-in-scroller-in-relative-clipping.html
               compositing/shared-backing/overflow-scroll/relative-in-div-in-overflow-scroll.html
               compositing/shared-backing/overflow-scroll/scrolled-contents-has-painted-content.html
               compositing/shared-backing/overflow-scroll/scrolled-contents-unconstrained-clip.html
               compositing/shared-backing/overflow-scroll/shared-layer-clipping.html
               compositing/shared-backing/overflow-scroll/shared-layer-composited-bounds.html
               compositing/shared-backing/overflow-scroll/shared-layer-nested-relative-stacking.html
               compositing/shared-backing/overflow-scroll/shared-layer-repaint.html
               compositing/shared-backing/partial-compositing-update.html
               compositing/shared-backing/partial-compositing-update2.html
               compositing/shared-backing/remove-sharing-layer.html
               compositing/shared-backing/sharing-cached-clip-rects.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::ancestorLayerIsInContainingBlockChain const):
        (WebCore::RenderLayer::setBackingProviderLayer):
        (WebCore::RenderLayer::disconnectFromBackingProviderLayer):
        (WebCore::RenderLayer::enclosingCompositingLayerForRepaint const):
        (WebCore::RenderLayer::clippingRootForPainting const):
        (WebCore::RenderLayer::clipToRect):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::updateClipRects):
        (WebCore::RenderLayer::clipCrossesPaintingBoundary const):
        (WebCore::RenderLayer::calculateClipRects const):
        (WebCore::outputPaintOrderTreeLegend):
        (WebCore::outputPaintOrderTreeRecursive):
        (WebCore::inContainingBlockChain): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::willBeDestroyed):
        (WebCore::clearBackingSharingLayerProviders):
        (WebCore::RenderLayerBacking::setBackingSharingLayers):
        (WebCore::RenderLayerBacking::removeBackingSharingLayer):
        (WebCore::RenderLayerBacking::clearBackingSharingLayers):
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        (WebCore::RenderLayerBacking::updateDrawsContent):
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer const):
        (WebCore::RenderLayerBacking::paintIntoLayer):
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::CompositingState::stateForPaintOrderChildren const):
        (WebCore::RenderLayerCompositor::CompositingState::propagateStateFromChildren):
        (WebCore::RenderLayerCompositor::CompositingState::propagateStateFromChildrenForUnchangedSubtree):
        (WebCore::RenderLayerCompositor::BackingSharingState::resetBackingProviderCandidate):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::backingProviderLayerCanIncludeLayer):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::traverseUnchangedSubtree):
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::layerWillBeRemoved):
        (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason const):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderTreeAsText.cpp:

2019-05-08  Brent Fulgham  <bfulgham@apple.com>

        Correct delayed load event handling
        https://bugs.webkit.org/show_bug.cgi?id=197679
        <rdar://problem/50423334>

        Reviewed by Alex Christensen.

        We need to properly account for the fact that JavaScript might run
        while performing loads.

        * dom/Document.cpp:
        (WebCore::Document::loadEventDelayTimerFired):

2019-05-08  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r243197): [GStreamer] Error playing redirected streams
        https://bugs.webkit.org/show_bug.cgi?id=197410

        Reviewed by Carlos Garcia Campos.

        Revert the change introduced in r243197 that was checking the
        redirected URI instead of the original URI. Non-main URIs should
        be ignored only when they are HLS (or similar) fragments.

        Test http/tests/security/canvas-remote-read-remote-video-hls.html still passes.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):

2019-05-08  Rob Buis  <rbuis@igalia.com>

        Link prefetch not useful for top-level navigation
        https://bugs.webkit.org/show_bug.cgi?id=195623

        Reviewed by Youenn Fablet.

        Cache cross-domain top-level prefetches in a dedicated cache and not in the
        memory cache.

        Tests: http/tests/cache/link-prefetch-main-resource-iframe.html
               http/tests/cache/link-prefetch-main-resource.html
               http/tests/contentextensions/prefetch-blocked.html

        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::prefetchIfNeeded):
        * loader/ResourceLoadInfo.cpp:
        (WebCore::toResourceType):

2019-05-07  Don Olmstead  <don.olmstead@sony.com>

        Fix !HAVE(ACCESSIBILITY) build
        https://bugs.webkit.org/show_bug.cgi?id=197680

        Reviewed by Fujii Hironori.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::focusedUIElementForPage):
        Update declaration for !HAVE(ACCESSIBILITY)
        * accessibility/AccessibilityObject.h:
        Add wrapper implementation for !HAVE(ACCESSIBILITY)
        * accessibility/AccessibilityProgressIndicator.cpp:
        (WebCore::AccessibilityProgressIndicator::roleValue const):
        Add ENABLE(METER_ELEMENT) guard.

2019-05-07  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r245038.

        Breaks internal builds.

        Reverted changeset:

        "Add SPI to set a list of hosts to which to send custom header
        fields cross-origin"
        https://bugs.webkit.org/show_bug.cgi?id=197397
        https://trac.webkit.org/changeset/245038

2019-05-07  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] A new request should always suppress the pending request if any
        https://bugs.webkit.org/show_bug.cgi?id=191517
        <rdar://problem/46888222>

        Reviewed by Brent Fulgham.

        Blocking new requests from the same page when there is a pending request could DoS the
        WebAuthN API in the period between [the page is refreshed, the pending request is
        hanedled/timeout]. Therefore, the policy will be to always cancel any pending requests
        whenever a new request is made. This will enforce the policy of handling only one
        request at a time.

        Covered by new tests in existing files.

        * Modules/webauthn/AuthenticatorCoordinatorClient.cpp:
        (WebCore::AuthenticatorCoordinatorClient::requestReply):
        (WebCore::AuthenticatorCoordinatorClient::setRequestCompletionHandler):
        (WebCore::AuthenticatorCoordinatorClient::addQueryCompletionHandler):
        * Modules/webauthn/AuthenticatorCoordinatorClient.h:

2019-05-07  Eric Carlson  <eric.carlson@apple.com>

        Define media buffering policy
        https://bugs.webkit.org/show_bug.cgi?id=196979
        <rdar://problem/28383861>

        Reviewed by Jer Noble.

        Test: MediaBufferingPolicy API test.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::suspend):
        (WebCore::HTMLMediaElement::resume):
        (WebCore::HTMLMediaElement::createMediaPlayer):
        (WebCore::HTMLMediaElement::setBufferingPolicy):
        (WebCore::HTMLMediaElement::purgeBufferedDataIfPossible):
        (WebCore::HTMLMediaElement::bufferingPolicy const):
        (WebCore::HTMLMediaElement::setShouldBufferData): Deleted.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::shouldBufferData const): Deleted.
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::updateClientDataBuffering):
        (WebCore::MediaElementSession::preferredBufferingPolicy const):
        (WebCore::MediaElementSession::dataBufferingPermitted const): Deleted.
        * html/MediaElementSession.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setBufferingPolicy):
        (WebCore::convertEnumerationToString):
        (WebCore::MediaPlayer::setShouldBufferData): Deleted.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerEnums.h:
        (WTF::LogArgument<WebCore::MediaPlayerEnums::BufferingPolicy>::toString):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setBufferingPolicy):
        (WebCore::MediaPlayerPrivateInterface::setShouldBufferData): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setBufferingPolicy):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldBufferData): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setBufferingPolicy):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::flushAndRemoveVideoSampleBuffers): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setShouldBufferData): Deleted.
        * testing/Internals.cpp:
        (WebCore::Internals::elementShouldBufferData):
        (WebCore::Internals::elementBufferingPolicy):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-05-07  Alex Christensen  <achristensen@webkit.org>

        Add SPI to set a list of hosts to which to send custom header fields cross-origin
        https://bugs.webkit.org/show_bug.cgi?id=197397

        Reviewed by Geoff Garen.

        In r223001 I added the ability to send custom headers, but with a restriction that they will not be sent except to the origin of the main document.
        We need the ability to specify what origins to send these headers to even if they are not first party requests.
        We get this information in a list of strings which are the hosts to send the headers to.  Some of the strings have an asterisk at the beginning,
        indicating that the headers are to be sent to all subdomains.

        I repurposed some ObjC SPI that was never adopted, but I keep testing the C API that was to verify no regression.
        I also added some new API tests for the new behavior.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CustomHeaderFields.cpp: Added.
        (WebCore::CustomHeaderFields::thirdPartyDomainsMatch const):
        * loader/CustomHeaderFields.h: Added.
        (WebCore::CustomHeaderFields::encode const):
        (WebCore::CustomHeaderFields::decode):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setCustomHeaderFields): Deleted.
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setCustomHeaderFields):
        (WebCore::DocumentLoader::customHeaderFields const):
        (WebCore::DocumentLoader::customHeaderFields): Deleted.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

2019-05-07  Andy Estes  <aestes@apple.com>

        run-bindings-tests should test global scope constructor generation
        https://bugs.webkit.org/show_bug.cgi?id=197669

        Reviewed by Alex Christensen.

        For interfaces that are exposed on a global object, preprocess-idls.pl generates a partial
        interface for the global object defining attributes for the interfaces' constructors. Most
        interfaces don't specify a global object, so preprocess-idls.pl defaults to DOMWindow.
        Since there is no DOMWindow.idl test case, we never generate the code for exposed interface
        constructors when running bindings tests. This means that we can't test changes to how these
        constructors are generated.

        To fix this, teach preprocess-idls.pl to treat 'TestGlobalObject' as the default global
        object when running bindings tests. This means that all exposed interface test cases will
        generate their constructors as part of JSTestGlobalObject (unless otherwise specified
        by the 'Exposed' extended attribute).

        * bindings/scripts/preprocess-idls.pl:
        Added --testGlobalContextName and --testGlobalScopeConstructorsFile arguments for use by
        run-bindings-tests.

        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        Updated expected results.

2019-05-07  Youenn Fablet  <youenn@apple.com>

        Video stream freeze on front camera orientation changing
        https://bugs.webkit.org/show_bug.cgi?id=197227
        <rdar://problem/50175498>

        Reviewed by Eric Carlson.

        Use m_currentRotationSessionAngle instead of m_currentRotation to create or not a new rotation session.
        Covered by updated test.

        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.h:
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.mm:
        (WebCore::RealtimeOutgoingVideoSourceCocoa::rotatePixelBuffer):

2019-05-07  Youenn Fablet  <youenn@apple.com>

        getUserMedia framerate unusable under low light in iOS 12.2
        https://bugs.webkit.org/show_bug.cgi?id=196214
        <rdar://problem/49232193>

        Reviewed by Geoffrey Garen.

        When setting the frame rate, set it to the exact value instead of a range.
        Otherwise, the capture device might use the lowest frame rate according the light conditions
        for best picture quality which is not what is expected by most web pages.

        Move frame rate range computation to closer where actually used.
        Since frame rate matching is fuzzy, add some checks in case the expected frame rate is slightly out of min/max range.

        Manually tested on a real device.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setSizeAndFrameRateWithPreset):

2019-05-07  Robin Morisset  <rmorisset@apple.com>

        All prototypes should call didBecomePrototype()
        https://bugs.webkit.org/show_bug.cgi?id=196315

        Reviewed by Saam Barati.

        It was found by existing tests, with the new assert in JSC::Structure

        * bindings/js/JSWindowProxy.cpp:
        (WebCore::JSWindowProxy::setWindow):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GeneratePrototypeDeclaration):
        (GenerateConstructorHelperMethods):

2019-05-07  John Wilander  <wilander@apple.com>

        Storage Access API: Make two changes requested by developers and complete refactoring and cleanup
        https://bugs.webkit.org/show_bug.cgi?id=197648
        <rdar://problem/50527493>

        Reviewed by Chris Dumez.

        Developers have requested two minor changes to the Storage Access API:
        - Only consume the user gesture when the user explicitly denies access.
        - Make document.hasStorageAccess() return true instead of false when the feature is off.

        In addition to this, we have refactoring and cleanup to do. Namely:
        - Make use of WebCore::RegistrableDomain all the way.
        - Remove dead code in WebKit::NetworkProcess since the calls now go through NetworkConnectionToWebProcess.
        - Introduce boolean enums for state handling.
        - Break out the Storage Access API functionality into a supplement of WebCore::Document.

        Reviewed by Chris Dumez.

        Tests: http/tests/storageAccess/deny-with-prompt-does-not-preserve-gesture.html
               http/tests/storageAccess/deny-without-prompt-preserves-gesture.html
               http/tests/storageAccess/grant-with-prompt-preserves-gesture.html
               http/tests/storageAccess/has-storage-access-true-if-feature-off.html

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::hasStorageAccess): Deleted.
        (WebCore::Document::requestStorageAccess): Deleted.
        (WebCore::Document::enableTemporaryTimeUserGesture): Deleted.
        (WebCore::Document::consumeTemporaryTimeUserGesture): Deleted.
        (WebCore::Document::hasFrameSpecificStorageAccess const): Deleted.
        (WebCore::Document::setHasFrameSpecificStorageAccess): Deleted.
        * dom/Document.h:
        (WebCore::Document::setUserGrantsStorageAccessOverride): Deleted.
            All of this has been moved to the supplement WebCore::DocumentStorageAccess.
        * dom/Document.idl:
            The Storage Access API has been moved to DocumentStorageAccess.idl.
        * dom/DocumentStorageAccess.cpp: Added.
        (WebCore::DocumentStorageAccess::from):
        (WebCore::DocumentStorageAccess::supplementName):
        (WebCore::DocumentStorageAccess::hasStorageAccess):
        (WebCore::DocumentStorageAccess::requestStorageAccess):
        (WebCore::DocumentStorageAccess::enableTemporaryTimeUserGesture):
        (WebCore::DocumentStorageAccess::consumeTemporaryTimeUserGesture):
        (WebCore::DocumentStorageAccess::hasFrameSpecificStorageAccess const):
        (WebCore::DocumentStorageAccess::setHasFrameSpecificStorageAccess):
        * dom/DocumentStorageAccess.h: Added.
        * dom/DocumentStorageAccess.idl: Added.
        * page/ChromeClient.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setUserGrantsStorageAccess): Deleted.
            This was dead code.
        * testing/Internals.h:
        * testing/Internals.idl:

2019-05-07  Antoine Quint  <graouts@apple.com>

        [Pointer Events] isPrimary property of pointercancel events should match previous events for that pointer
        https://bugs.webkit.org/show_bug.cgi?id=197665

        Reviewed by Dean Jackson.

        The test at web-platform-tests/pointerevents/pointerevent_pointercancel_touch.html would fail early because one of the first assertions
        would check that isPrimary for a pointercancel event would match the isPrimary property of the previous pointer event dispatched for that
        pointer id. This prevented many further assertions from passing and also was the cause of flakiness for the next test since this test was
        ended early and the state of touches created using UIScriptController were not in a clean state.

        We now track the isPrimary state for a given pointer using the CapturingData and use that value when dispatching a pointercancel event.

        * dom/PointerEvent.cpp:
        (WebCore::PointerEvent::create):
        (WebCore::PointerEvent::PointerEvent):
        * dom/PointerEvent.h:
        * page/PointerCaptureController.cpp:
        (WebCore::PointerCaptureController::pointerEventWasDispatched):
        (WebCore::PointerCaptureController::cancelPointer):
        * page/PointerCaptureController.h:

2019-05-07  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r244900.

        Caused media/track/track-cue-missing.html to fail on debug
        queues

        Reverted changeset:

        "Add logging for RenderLayer clip rects"
        https://bugs.webkit.org/show_bug.cgi?id=197547
        https://trac.webkit.org/changeset/244900

2019-05-07  Antti Koivisto  <antti@apple.com>

        <body> with overflow:hidden CSS is scrollable on iOS
        https://bugs.webkit.org/show_bug.cgi?id=153852
        <rdar://problem/38715356>

        Reviewed by Antoine Quint.

        Tests: fast/scrolling/ios/body-overflow-hidden-frame.html
               fast/scrolling/ios/body-overflow-hidden.html

        * page/scrolling/ScrollingTreeScrollingNode.h:

2019-05-07  Antoine Quint  <graouts@apple.com>

        Mouse event simulation should be limited to the graphing calculator on Desmos.com
        https://bugs.webkit.org/show_bug.cgi?id=197652
        <rdar://problem/47068176>

        Reviewed by Antti Koivisto.

        * page/Quirks.cpp:
        (WebCore::Quirks::shouldDispatchSimulatedMouseEvents const):

2019-05-06  James Savage  <james.savage@apple.com>

        Improve coordination for creating UIWindow instances.
        https://bugs.webkit.org/show_bug.cgi?id=197578.
        <rdar://problem/50456965>.

        Reviewed by Wenson Hsieh.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (makeWindowFromView): Pull out window creation.
        (VideoFullscreenInterfaceAVKit::doSetup): Call new helper function.

2019-05-06  Tim Horton  <timothy_horton@apple.com>

        _overrideViewportWithArguments does not work when called before loading
        https://bugs.webkit.org/show_bug.cgi?id=197638
        <rdar://problem/50505111>

        Reviewed by Wenson Hsieh.

        * dom/Document.cpp:
        (WebCore::Document::viewportArguments const):
        (WebCore::Document::updateViewportArguments):
        (WebCore::Document::setOverrideViewportArguments): Deleted.
        * dom/Document.h:
        (WebCore::Document::viewportArguments const): Deleted.
        * page/Page.cpp:
        (WebCore::Page::setOverrideViewportArguments):
        * page/Page.h:
        (WebCore::Page::overrideViewportArguments const):
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::setViewportArguments):
        Move overrideViewportArguments to Page, since it is view-global in the API.

2019-05-06  Chris Dumez  <cdumez@apple.com>

        Add assertions to JSLazyEventListener to help catch the cause of a crash
        https://bugs.webkit.org/show_bug.cgi?id=197617

        Reviewed by Alexey Proskuryakov.

        Add assertions to JSLazyEventListener to help catch the cause of <rdar://problem/24314027>.

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::checkValidityForEventTarget):
        * bindings/js/JSLazyEventListener.h:
        * dom/EventListener.h:
        (WebCore::EventListener::checkValidityForEventTarget):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::addEventListener):
        (WebCore::EventTarget::setAttributeEventListener):
        (WebCore::EventTarget::innerInvokeEventListeners):

2019-05-04  Per Arne Vollan  <pvollan@apple.com>

        -[WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:] doesn't delete _WKWebsiteDataTypeCredentials
        https://bugs.webkit.org/show_bug.cgi?id=197510
        <rdar://problem/50372338>

        Reviewed by Alex Christensen.

        This patch implements deletion of non persistent credentials for a set of origins. In order for this to work, fetching
        credentials from the credential storage needs to return a set of SecurityOriginData objects, instead of a set of origin
        strings. This is implemented by iterating over all the elements in the credential map, and creating a SecurityOriginData
        object for each credential based on the protection space.

        API test: WKWebsiteDataStore.RemoveNonPersistentCredentials

        * platform/network/CredentialStorage.cpp:
        (WebCore::CredentialStorage::removeCredentialsWithOrigin):
        (WebCore::CredentialStorage::originsWithCredentials const):
        * platform/network/CredentialStorage.h:
        (WebCore::CredentialStorage::originsWithCredentials const): Deleted.

2019-05-06  Keith Rollin  <krollin@apple.com>

        Temporarily disable generate-xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=197619
        <rdar://problem/50507392>

        Reviewed by Alex Christensen.

        We need to perform a significant update to the generate-xcfilelist
        scripts. This work involves coordinated work with another facility. If
        the work does not occur in tandem, the build will be broken. To avoid
        this, disable the invoking of the scripts during the transition. The
        checking will be restored once the new scripts are in place.

        No new tests -- no change in user-visible functionality.

        * Scripts/check-xcfilelists.sh:

2019-05-06  Andres Gonzalez  <andresg_22@apple.com>

        Hitpoint for link which spans two lines in web content is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=197511
        <rdar://problem/49971483>

        Reviewed by Chris Fleizach.

        - Special case for links to return first char location as clickPoint instead of middle point of bounding rect.
        - Modified iOS ActivationPoint to use clickPoint. This way all code paths go through the same function.
        - Made boundsForRects to return content coordinates in all platforms. Adjusted all callers, directly or indirectly, appropriately.

        Tests: accessibility/ios-simulator/links-activation.html
               accessibility/links-activation.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::clickPoint):
        (WebCore::AccessibilityRenderObject::boundsForRects):
        (WebCore::AccessibilityRenderObject::boundsForRects const): Deleted.
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityActivationPoint]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2019-05-06  Jer Noble  <jer.noble@apple.com>

        Adopt AVStreamDataParser.audiovisualMIMETypes
        https://bugs.webkit.org/show_bug.cgi?id=197581
        <rdar://problem/50458981>

        Reviewed by Eric Carlson.

        Add a new singleton class, AVStreamDataParserMIMETypeCache, and rename AVFoundationMIMETypeCache to the more precise
        AVAssetMIMETypeCache.  Update all the old AVFoundationMIMETypeCache with the new name.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/avfoundation/objc/AVAssetMIMETypeCache.h: Renamed from Source/WebCore/platform/graphics/avfoundation/objc/AVFoundationMIMETypeCache.h.
        (WebCore::AVAssetMIMETypeCache::setCacheMIMETypesCallback):
        * platform/graphics/avfoundation/objc/AVAssetMIMETypeCache.mm: Renamed from Source/WebCore/platform/graphics/avfoundation/objc/AVFoundationMIMETypeCache.mm.
        (WebCore::AVAssetMIMETypeCache::singleton):
        (WebCore::AVAssetMIMETypeCache::setSupportedTypes):
        (WebCore::AVAssetMIMETypeCache::types):
        (WebCore::AVAssetMIMETypeCache::supportsContentType):
        (WebCore::AVAssetMIMETypeCache::canDecodeType):
        (WebCore::AVAssetMIMETypeCache::isAvailable const):
        (WebCore::AVAssetMIMETypeCache::loadMIMETypes):
        * platform/graphics/avfoundation/objc/AVStreamDataParserMIMETypeCache.h: Added.
        * platform/graphics/avfoundation/objc/AVStreamDataParserMIMETypeCache.mm: Added.
        (WebCore::AVStreamDataParserMIMETypeCache::singleton):
        (WebCore::AVStreamDataParserMIMETypeCache::types):
        (WebCore::AVStreamDataParserMIMETypeCache::supportsContentType):
        (WebCore::AVStreamDataParserMIMETypeCache::canDecodeType):
        (WebCore::AVStreamDataParserMIMETypeCache::isAvailable const):
        (WebCore::AVStreamDataParserMIMETypeCache::loadMIMETypes):
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::create):
        (WebCore::ImageDecoderAVFObjC::supportsMediaType):
        (WebCore::ImageDecoderAVFObjC::supportsContentType):
        (WebCore::ImageDecoderAVFObjC::canDecodeType):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::registerMediaEngine):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::getSupportedTypes):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsKeySystem):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::registerMediaEngine):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::getSupportedTypes):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsType):

2019-05-06  Youenn Fablet  <youenn@apple.com>

        WebAudio Node JS wrappers should not be collected if events can be fired
        https://bugs.webkit.org/show_bug.cgi?id=197533

        Reviewed by Jer Noble.

        Before the patch, some web audio nodes could fire event listeners, but were not protected from GC.
        Use CustomIsReachable to ensure theses nodes can be collected if:
        - their AudioContext is stopped (typically due to document being navigated away).
        - their AudioContext is closed.
        - nodes do not have event listeners.

        Covered by WPT mediacapture-streams/MediaStreamTrack-MediaElement-disabled-audio-is-silence.https.html and
        WPT webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html
        and web audio WebRTC tests.
        Specific newly added test: webaudio/webaudio-gc.html

        * Modules/webaudio/AudioContext.h:
        (WebCore::AudioContext::isClosed const):
        * Modules/webaudio/AudioNode.idl:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAudioNodeCustom.cpp: Added.
        (WebCore::JSAudioNodeOwner::isReachableFromOpaqueRoots):

2019-05-06  Daniel Bates  <dabates@apple.com>

        Google Docs & Yahoo! Japan: Can’t compose characters with Chinese or Japanese keyboard
        https://bugs.webkit.org/show_bug.cgi?id=197474
        <rdar://problem/47219324>

        Reviewed by Ryosuke Niwa.

        Fix up some #if defs to compile more Mac code when building on iOS.

        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2019-05-06  Chris Dumez  <cdumez@apple.com>

        Add assertions to CachedFrame to help figure out crash in CachedFrame constructor
        https://bugs.webkit.org/show_bug.cgi?id=197621

        Reviewed by Geoffrey Garen.

        Add release assertions to try and figure out who is sometimes detaching the document from its
        frame while constructing CachedFrames for its descendants.

        * dom/Document.cpp:
        (WebCore::Document::detachFromFrame):
        * dom/Document.h:
        (WebCore::Document::setMayBeDetachedFromFrame):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):

2019-05-06  Zan Dobersek  <zdobersek@igalia.com>

        [GLib] WebCore::MainThreadSharedTimer should use the appropriate GSource priority, name
        https://bugs.webkit.org/show_bug.cgi?id=197606

        Reviewed by Carlos Garcia Campos.

        * platform/MainThreadSharedTimer.cpp:
        (WebCore::MainThreadSharedTimer::MainThreadSharedTimer):
        Use the MainThreadSharedTimer GLib priority for this timer. The name is
        also adjusted accordingly.

2019-05-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        fast/attachment/attachment-folder-icon.html is an Image Only failure on recent macOS builds
        https://bugs.webkit.org/show_bug.cgi?id=197593
        <rdar://problem/50379267>

        Reviewed by Tim Horton.

        On recent versions of macOS, -[NSWorkspace iconForFileType:] returns the generic document icon for
        "public.directory". Instead of using this UTI to generate attachment icons for "multipart/x-folder" and
        "application/vnd.apple.folder", we should instead be using "public.folder", which has a folder icon. This fixes
        the existing test fast/attachment/attachment-folder-icon.html, which currently results in an image diff on these
        builds of macOS.

        * rendering/RenderThemeMac.mm:
        (WebCore::iconForAttachment):

2019-05-04  Alex Christensen  <achristensen@webkit.org>

        Revert r244953 and r244954 because they broke internal builds.
        https://bugs.webkit.org/show_bug.cgi?id=197534

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::changeCount const):
        (WebCore::PlatformPasteboard::write):

2019-05-04  Alex Christensen  <achristensen@webkit.org>

        Merge the three UIKitSPI.h files into a single one in PAL
        https://bugs.webkit.org/show_bug.cgi?id=197534

        Reviewed by Darin Adler.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::changeCount const):
        (WebCore::PlatformPasteboard::write):

2019-05-04  Youenn Fablet  <youenn@apple.com>

        Convert some RealtimeOutgoingVideoSourceCocoa logging to ERROR_LOG
        https://bugs.webkit.org/show_bug.cgi?id=197549

        Reviewed by Eric Carlson.

        No change of behavior.

        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.mm:
        (WebCore::RealtimeOutgoingVideoSourceCocoa::rotatePixelBuffer):

2019-05-03  Simon Fraser  <simon.fraser@apple.com>

        [macOS] Fix programmatic scrolling with async overflow scroll
        https://bugs.webkit.org/show_bug.cgi?id=197590

        Reviewed by Sam Weinig.
        
        ScrollingTreeOverflowScrollingNodeMac needs to handle RequestedScrollPosition.

        Tests: scrollingcoordinator/mac/programmatic-frame-scroll.html
               scrollingcoordinator/mac/programmatic-overflow-scroll.html

        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::commitStateAfterChildren):

2019-05-03  Zalan Bujtas  <zalan@apple.com>

        [iOS] outlook.live.com: Compose email frame not fully visible and not scrollable
        https://bugs.webkit.org/show_bug.cgi?id=197573
        <rdar://problem/48008441>

        Reviewed by Wenson Hsieh.

        The outlook mail view's flex column setup produces a somewhat unfortunate layout at certain viewport widths.
        This patch addresses the issue by ensuring that we never fall into that range.

        * page/Quirks.cpp:
        (WebCore::Quirks::shouldIgnoreShrinkToFitContent const):
        (WebCore::Quirks::overriddenViewportLayoutWidth const):
        * page/Quirks.h:

2019-05-02  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] A focused document should be required
        https://bugs.webkit.org/show_bug.cgi?id=197543
        <rdar://problem/50430989>

        Reviewed by Brent Fulgham.

        This patch adds a check to see if the invoking document is focused before
        calling into WebAuthN. This patch also removes some out-to-dated comments.

        Test: http/wpt/webauthn/public-key-credential-unfocused-document.https.html

        * Modules/credentialmanagement/CredentialsContainer.cpp:
        (WebCore::CredentialsContainer::get):
        (WebCore::CredentialsContainer::isCreate):
        * Modules/webauthn/AuthenticatorCoordinator.cpp:
        (WebCore::AuthenticatorCoordinator::create const):
        (WebCore::AuthenticatorCoordinator::discoverFromExternalSource const):

2019-05-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: DOM: rename "low power" to "display composited"
        https://bugs.webkit.org/show_bug.cgi?id=197296

        Reviewed by Joseph Pecoraro.

        Removed specific ChangeLog entries since it is almost entirely mechanical changes.

        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:

2019-05-03  Daniel Bates  <dabates@apple.com>

        Pass KeyboardEvent by reference in more places
        https://bugs.webkit.org/show_bug.cgi?id=197480

        Reviewed by Wenson Hsieh.

        * editing/Editor.cpp:
        (WebCore::Editor::handleKeyboardEvent):
        (WebCore::Editor::handleInputMethodKeydown):
        * loader/EmptyClients.cpp:
        * page/EditorClient.h:

2019-05-03  Chris Dumez  <cdumez@apple.com>

        [iOS Sim Debug] ASSERTION FAILED The atomic string comes from an other thread! Layout Test imported/w3c/web-platform-tests/workers/WorkerNavigator_appName.htm is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=197530
        <rdar://problem/50448285>

        Reviewed by Geoffrey Garen.

        The issue is that NavigatorBase::platform() was not thread safe but was called by both Navigator on
        the main thread and WorkerNavigator on worker threads.

        No new tests, covered by existing tests.

        * page/Navigator.cpp:
        (WebCore::Navigator::platform const):
        * page/Navigator.h:

        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::platform const):
        * page/NavigatorBase.h:
        Make NavigatorBase::platform() thread safe.

        * platform/ios/Device.cpp:
        (WebCore::deviceName):
        * platform/ios/Device.h:
        Make WebCore::deviceName() thread safe.

        * platform/ios/UserAgentIOS.mm:
        (WebCore::deviceNameForUserAgent):
        Cache value returned by WebCore::deviceName() for performance.

2019-05-03  Chris Dumez  <cdumez@apple.com>

        Use WeakPtr for JSLazyEventListener::m_originalNode for safety
        https://bugs.webkit.org/show_bug.cgi?id=197576
        <rdar://problem/24314027>

        Reviewed by Alex Christensen.

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::JSLazyEventListener::create):
        * bindings/js/JSLazyEventListener.h:

2019-05-03  Eric Carlson  <eric.carlson@apple.com>

        AVFoundation framework isn't always installed
        https://bugs.webkit.org/show_bug.cgi?id=197577
        <rdar://problem/50447841>

        Reviewed by Jer Noble.
        
        Use PAL::isAVFoundationFrameworkAvailable() to check to see if AVFoundation is
        installed, not PAL::AVFoundationLibrary().

        * platform/graphics/avfoundation/objc/AVFoundationMIMETypeCache.mm:
        (WebCore::AVFoundationMIMETypeCache::isAvailable const):
        (WebCore::AVFoundationMIMETypeCache::loadMIMETypes):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isAvailable):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetType const):
        (WebCore::exernalDeviceDisplayNameForPlayer):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isAvailable):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable):
        * platform/graphics/cocoa/HEVCUtilitiesCocoa.mm:
        (WebCore::validateHEVCParameters):
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::isAvailable):

2019-05-03  Sihui Liu  <sihui_liu@apple.com>

        Add assertion to check whether shm files have maximum FileProtection of CompleteUnlessOpen
        https://bugs.webkit.org/show_bug.cgi?id=197390
        <rdar://problem/42685773>

        Reviewed by Geoffrey Garen.

        We have seen crashes about accessing database files after device is locked. We are suspecting this is because 
        shm files have wrong data protection class, but shm files should not have Complete class protection when it 
        is created. It is likely the protection class is changed later. Add an assertion to verify our guess. If the 
        crash signature changes after this patch, we probably need to change database implementation. If it is not, we
        have other problem than data protection.

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

2019-05-03  Youenn Fablet  <youenn@apple.com>

        Cache.add and Cache.addAll should compute a correct response body size
        https://bugs.webkit.org/show_bug.cgi?id=197464

        Reviewed by Chris Dumez.

        Compute the response body size as we do for regular Cache.put

        Test: http/wpt/cache-storage/cache-quota-add.any.html

        * Modules/cache/CacheStorageConnection.cpp:
        (WebCore::CacheStorageConnection::computeRecordBodySize):
        * Modules/cache/CacheStorageConnection.h:
        * Modules/cache/DOMCache.cpp:
        (WebCore::FetchTasksHandler::addResponseBody):
        (WebCore::DOMCache::addAll):
        Compute the response body size requires getting access to the connection.
        'this' is added to the lambda which is fine since taskHandler keeps a
        Ref to 'this' in its completion handler.
        (WebCore::DOMCache::toConnectionRecord):
        * Modules/fetch/FetchResponse.h:

2019-05-03  Tomoki Imai  <Tomoki.Imai@sony.com>

        [Cairo] Improve ShadowBlur performance using tiling optimization
        https://bugs.webkit.org/show_bug.cgi?id=197308
        Reviewed by Žan Doberšek.

        Enable tiling tiling-based optimization for drawRectShadow() and drawInsetShadow().
        Since r228776, cairo ports doesn't have tiling-based optimization.

        For AppleWin, this patch refactors code and it shares almost same code as cairo port.
        Only the difference is that AppleWin uses ScratchBuffer, but cairo ports doesn't.
        This should avoid a performance regression for AppleWin.

        No new tests, covered by existing tests.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::calculateLobes):
        Fix stylecheck errors

        (WebCore::ShadowBlur::blurLayerImage):
        Fix stylecheck errors

        (WebCore::ShadowBlur::calculateLayerBoundingRect):
        We don't use position of m_sourceRect, so change the type to FloatSize.

        (WebCore::ShadowBlur::drawShadowBuffer):
        Use m_layerSize instead of m_shadowedResultSize to fillRect, as m_layerSize is always smaller than m_shadowedResultSize.
        It's because in m_layerSize is equal to m_shadowedResultSize if it's not clipped.
        Clipping doesn't increase size of m_layerSize, so m_layerSize is always smaller than or equal to m_shadowedResultSize.

        (WebCore::ShadowBlur::templateSize const):
        Fix stylecheck errors

        (WebCore::ShadowBlur::drawRectShadow):
        (WebCore::ShadowBlur::drawInsetShadow):
        (WebCore::ShadowBlur::drawRectShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithoutTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        Incorporate tile-based drawing.
        To accomplish it, this patch abstracts GraphicsContext::drawImageBuffer to ShadowBlur::DrawImageCallback,
        GraphicsContext::fillRect to ShadowBlur::FillRectCallback, drawing rect with hole to  ShadowBlur::FillRectWithHoleCallback.

        Variants which takes GraphicsContext as parameter now just calls another drawRectShadow.

        (WebCore::ShadowBlur::drawLayerPieces):
        Instead of graphicsContext.drawImageBuffer, call corresponding callback.

        (WebCore::ShadowBlur::drawLayerPiecesAndFillCenter):
        This function calls drawLayerPieces and fill center for outer shadow.
        Drawing outer shadow requires another callback for graphicsContext.fillRect.

        (WebCore::ShadowBlur::drawShadowLayer):
        Use m_layerSize instead of m_shadowedResultSize to fillRect,
        as m_layerSize is always smaller than m_shadowedResultSize.

        * platform/graphics/ShadowBlur.h:
        Rename m_sourceRect to m_shadowedResultSize, and change it to FloatSize from FloatRect.
        Remove GraphicsContext usage as much as possible and replace them by corresponding callbacks.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawShadowImage):
        This function corresponds to ShadowBlur::DrawImageCallback.

        (WebCore::Cairo::fillShadowBuffer):
        Erase sourceRect, as it's always bigger than layerSize.

        (WebCore::Cairo::drawPathShadow):
        (WebCore::Cairo::drawGlyphsShadow):
        Erase unused parameter.

        (WebCore::Cairo::fillRect):
        (WebCore::Cairo::fillRoundedRect):
        (WebCore::Cairo::fillRectWithRoundedHole):
        For tile-based optimization, add extra arguments to drawRectShadow.

        (WebCore::Cairo::drawSurface):
        Erase unused parameter.

2019-05-03  Antti Koivisto  <antti@apple.com>

        Add a quirk to make youtube navigation bar scrollable without mouse hover on iOS
        https://bugs.webkit.org/show_bug.cgi?id=197555
        <rdar://problem/49582231>

        Reviewed by Brent Fulgham.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyleForSiteSpecificQuirks):

        Turn 'overflow:hidden' into 'overflow:auto' on element with id="guide-inner-content".

        * page/Quirks.cpp:
        (WebCore::Quirks::needsYouTubeOverflowScrollQuirk const):
        * page/Quirks.h:

2019-05-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Record actions performed on WebGL2RenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=176008
        <rdar://problem/34213884>

        Reviewed by Joseph Pecoraro.

        Tests: inspector/canvas/recording-webgl2.html
               inspector/canvas/recording-webgl2-snapshots.html

        * html/canvas/WebGL2RenderingContext.idl:

        * bindings/js/CallTracerTypes.h:
        * inspector/RecordingSwizzleTypes.h:

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::canvasChanged): Added.
        (WebCore::InspectorCanvas::resetRecordingData):
        (WebCore::shouldSnapshotWebGL2Action): Added.
        (WebCore::InspectorCanvas::recordAction):
        (WebCore::InspectorCanvas::releaseObjectForRecording):
        (WebCore::InspectorCanvas::appendActionSnapshotIfNeeded):
        (WebCore::InspectorCanvas::buildAction):
        * inspector/agents/InspectorCanvasAgent.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::canvasChanged): Added.
        (WebCore::InspectorCanvasAgent::startRecording):
        Provide an actual implementation of `CanvasObserver::canvasChanged` since it can be used to
        determine whether or not an action needs a snapshot.

        * page/PageConsoleClient.cpp:
        (WebCore::canvasRenderingContext):

2019-05-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r244881.
        https://bugs.webkit.org/show_bug.cgi?id=197559

        Breaks compilation of jsconly on linux, breaking compilation
        for jsc-i386-ews, jsc-mips-ews and jsc-armv7-ews (Requested by
        guijemont on #webkit).

        Reverted changeset:

        "[CMake] Refactor WEBKIT_MAKE_FORWARDING_HEADERS into
        WEBKIT_COPY_FILES"
        https://bugs.webkit.org/show_bug.cgi?id=197174
        https://trac.webkit.org/changeset/244881

2019-05-03  Joonghun Park  <jh718.park@samsung.com>

        Resolve the percentage values of inset properties against proper box.
        https://bugs.webkit.org/show_bug.cgi?id=189549

        Reviewed by Antti Koivisto.

        Before this CL, sticky element's layout was executed relative to
        a box's overflow container,
        but the value returned by getComputedStyle was resolved against
        its containing block.

        So, the computed value and the actual value used in layout
        was different before this change.

        Tests: imported/w3c/web-platform-tests/css/cssom/getComputedStyle-insets-sticky-container-for-abspos.html
               imported/w3c/web-platform-tests/css/cssom/getComputedStyle-sticky-pos-percent.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::positionOffsetValue):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::enclosingScrollportBox const):
        * rendering/RenderBox.h:

2019-05-02  Antti Koivisto  <antti@apple.com>

        Add a quirk to make gmail navigation bar scrollable without mouse hover on iOS
        https://bugs.webkit.org/show_bug.cgi?id=197529
        <rdar://problem/49403416>

        Reviewed by Simon Fraser.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::StyleResolver::adjustRenderStyleForSiteSpecificQuirks):

        Turn 'overflow:hidden' to 'overflow:auto' on element with role="navigation".
        This should be both reasonably targeted and robust.

        * css/StyleResolver.h:
        * page/Quirks.cpp:
        (WebCore::Quirks::needsGMailOverflowScrollQuirk const):
        * page/Quirks.h:

2019-05-02  Simon Fraser  <simon.fraser@apple.com>

        Add logging for RenderLayer clip rects
        https://bugs.webkit.org/show_bug.cgi?id=197547

        Reviewed by Zalan Bujtas.

        Add a ClipRects log channel, and stream output for ClipRect and ClipRects.

        * platform/Logging.h:
        * rendering/ClipRect.cpp:
        (WebCore::operator<<):
        * rendering/ClipRect.h:
        * rendering/RenderLayer.cpp:
        (WebCore::operator<<):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:

2019-05-02  Youenn Fablet  <youenn@apple.com>

        Make AudioContext::scriptExecutionContext() private
        https://bugs.webkit.org/show_bug.cgi?id=197512

        Reviewed by Eric Carlson.

        Refactor code to make audio nodes not rely on AudioContext::scriptExecutionContext.
        Instead, let AudioContext provide the necessary API for its nodes.
        Covered by existing tests.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::looping):
        (WebCore::AudioBufferSourceNode::setLooping):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::postTask):
        (WebCore::AudioContext::origin const):
        (WebCore::AudioContext::addConsoleMessage):
        * Modules/webaudio/AudioContext.h:
        (WebCore::AudioContext::isStopped const):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::scriptExecutionContext const):
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::finish):
        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::resume):
        (WebCore::DefaultAudioDestinationNode::suspend):
        (WebCore::DefaultAudioDestinationNode::close):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::wouldTaintOrigin):
        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::fireProcessEvent):

2019-05-02  Ryosuke Niwa  <rniwa@webkit.org>

        Disable software keyboard for a math field textarea on desmos.com
        https://bugs.webkit.org/show_bug.cgi?id=197488

        Reviewed by Wenson Hsieh.

        Treat a textarea inside a math field span as if it had inputmode content attribute set to none to suppress
        the software keyboard on desmos.com as it interferes with website's own UI.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::canonicalInputMode const):
        * page/Quirks.cpp:
        (WebCore::Quirks::needsInputModeNoneImplicitly const):
        * page/Quirks.h:

2019-05-02  Timothy Hatcher  <timothy@apple.com>

        NSAttributedString conversion in a loop returns nil and WKUnknownError every other time.
        https://bugs.webkit.org/show_bug.cgi?id=197523

        Reviewed by Darin Adler.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::convert): Don't return early if m_dataSource is nil. This is already null
        checked later and only needed in specific cases, it shouldn't fail the whole conversion.

2019-05-02  Chris Dumez  <cdumez@apple.com>

        Setting a frame's src to a javascript URL should not run it synchronously
        https://bugs.webkit.org/show_bug.cgi?id=197466

        Reviewed by Darin Adler.

        When an iframe's src attribute is set to a javascript URL, whether when parsing
        or later on via JS, we now execute the URL's JavaScript asynchronously. We used
        to execute it synchronously, which was a source of bugs and also did not match
        other browsers.

        I have verified that our new behavior is aligned with both Firefox and Chrome.

        Note that for backward-compatibility and interoperability with Blink
        (https://bugs.chromium.org/p/chromium/issues/detail?id=923585), the
        "javascript:''" URL will still run synchronously. We should consider dropping
        this quirk at some point.

        Test: fast/dom/frame-src-javascript-url-async.html

        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledLocationChange::ScheduledLocationChange):
        (WebCore::ScheduledLocationChange::~ScheduledLocationChange):
        (WebCore::NavigationScheduler::scheduleLocationChange):
        * loader/NavigationScheduler.h:
        (WebCore::NavigationScheduler::scheduleLocationChange):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestFrame):

2019-05-02  Gary Katsevman  <git@gkatsev.com>

        WebVTT: fix vertical cue alignment.
        https://bugs.webkit.org/show_bug.cgi?id=136627.
        <rdar://problem/49725538>

        Reviewed by Eric Carlson.

        Updated existing test results.

        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):

2019-05-02  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Refactor WEBKIT_MAKE_FORWARDING_HEADERS into WEBKIT_COPY_FILES
        https://bugs.webkit.org/show_bug.cgi?id=197174

        Reviewed by Alex Christensen.

        Replace WEBKIT_MAKE_FORWARDING_HEADERS with WEBKIT_COPY_FILES and make dependencies
        for framework headers explicit.

        * CMakeLists.txt:

2019-05-02  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Add a quirk for google.com when processing AppID extension
        https://bugs.webkit.org/show_bug.cgi?id=196046
        <rdar://problem/49088479>

        Reviewed by Brent Fulgham.

        Relaxing the same site restriction on AppID while in google.com and any
        of its subdomains to allow two www.gstatic.com AppIDs to slip in.

        Covered by manual tests on Google.com.

        * Modules/webauthn/AuthenticatorCoordinator.cpp:
        (WebCore::AuthenticatorCoordinatorInternal::needsAppIdQuirks):
        (WebCore::AuthenticatorCoordinatorInternal::processAppIdExtension):

2019-05-02  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed fix for non-unified build after r244853.

        * page/SecurityOrigin.cpp:

2019-05-02  Frederic Wang  <fwang@igalia.com>

        [GTK][WPE] Disable "thin", "thick", "medium" values of mfrac@linethickness at runtime
        https://bugs.webkit.org/show_bug.cgi?id=196142

        This patch introduces some experimental runtime flag to let users
        disable MathML features that are removed from MathML Core [1]. For now,
        these features are only disabled on GTK and WPE ports. This patch also
        adds a condition to disable "thin", "thick", "medium" values of
        mfrac@linethickness at runtime as agreed in [2].

        [1] https://mathml-refresh.github.io/mathml-core/
        [2] https://github.com/mathml-refresh/mathml/issues/4

        Reviewed by Rob Buis.

        No new tests, covered by frac-linethickness-0001.html

        * mathml/MathMLFractionElement.cpp:
        (WebCore::MathMLFractionElement::lineThickness): Just do standard
        parsing for MathML lengths when non-core MathML features are disabled.
        * page/Settings.yaml: Add WebCore setting.

2019-05-01  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Adopt SecurityOrigin::isMatchingRegistrableDomainSuffix()
        https://bugs.webkit.org/show_bug.cgi?id=197481

        Reviewed by Brent Fulgham.

        This patch implements Step 6-7 from:
        https://www.w3.org/TR/webauthn/#createCredential,
        https://www.w3.org/TR/webauthn/#discover-from-external-source.

        Test: http/wpt/webauthn/public-key-credential-ip-address.html

        * Modules/webauthn/AuthenticatorCoordinator.cpp:
        (WebCore::AuthenticatorCoordinator::create const):
        (WebCore::AuthenticatorCoordinator::discoverFromExternalSource const):

2019-05-01  Youenn Fablet  <youenn@apple.com>

        Add back hasNullReferences() assert in Document::updateIsPlayingMedia
        https://bugs.webkit.org/show_bug.cgi?id=197477

        Reviewed by Eric Carlson.

        AudioContext had a special scriptExecutionContext() getter
        that was returning nullptr when AudioContext is stopped.
        Instead, make this getter behave as all other scriptExecutionContext() getters
        and make sure existing call sites of the getter are fine with the change.

        Covered by existing tests.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        No need to check whether offline since this constructor is for non offline AudioContext.
        (WebCore::AudioContext::scriptExecutionContext const):
        (WebCore::AudioContext::fireCompletionEvent):
        * dom/Document.cpp:
        (WebCore::Document::updateIsPlayingMedia):

2019-05-01  Justin Fan  <justin_fan@apple.com>

        Update WebGPU class names based on sketch.idl
        https://bugs.webkit.org/show_bug.cgi?id=194260

        Reviewed by Dean Jackson.

        Update all exposed Web GPU interface names to GPU* prefix.

        Existing Web GPU tests updated to expect new names.

        * Modules/webgpu/WebGPU.idl:
        * Modules/webgpu/WebGPUAdapter.idl:
        * Modules/webgpu/WebGPUBindGroup.idl:
        * Modules/webgpu/WebGPUBindGroupLayout.idl:
        * Modules/webgpu/WebGPUBuffer.idl:
        * Modules/webgpu/WebGPUDevice.idl:
        * Modules/webgpu/WebGPUInputStepMode.h: Removed.
        * Modules/webgpu/WebGPUPipelineLayout.idl:
        * Modules/webgpu/WebGPUProgrammablePassEncoder.idl:
        * Modules/webgpu/WebGPUQueue.idl:
        * Modules/webgpu/WebGPURenderPassEncoder.idl:
        * Modules/webgpu/WebGPURenderPipeline.idl:
        * Modules/webgpu/WebGPUSampler.idl:
        * Modules/webgpu/WebGPUTexture.idl:
        * Modules/webgpu/WebGPUTextureView.idl:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2019-05-01  Jiewen Tan  <jiewen_tan@apple.com>

        Move Document::domainIsRegisterable to SecurityOrigin::isMatchingRegistrableDomainSuffix
        https://bugs.webkit.org/show_bug.cgi?id=181950
        <rdar://problem/43357371>

        Reviewed by Brent Fulgham.

        This patch moves Document::domainIsRegisterable to SecurityOrigin::isMatchingRegistrableDomainSuffix
        to be more aligned with the HTML standard:
        https://html.spec.whatwg.org/multipage/origin.html#is-a-registrable-domain-suffix-of-or-is-equal-to.
        Besides that, it also removes redundant codes within the original method that is also done in
        OriginAccessEntry::matchesOrigin.

        Covered by new API tests.

        * dom/Document.cpp:
        (WebCore::Document::setDomain):
        (WebCore::Document::domainIsRegisterable const): Deleted.
        * dom/Document.h:
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::isMatchingRegistrableDomainSuffix const):
        * page/SecurityOrigin.h:

2019-05-01  Ryosuke Niwa  <rniwa@webkit.org>

        [iOS] Element::focus and Element::scrollIntoView do not clamp scroll positions
        https://bugs.webkit.org/show_bug.cgi?id=197211

        Reviewed by Simon Fraser.

        Fixed the bug that Element::focus and Element::scrollIntoView were not clamping scroll offsets,
        which causes scrollTop etc... to return a bogus negative scrolling offset.

        Unfortunately, we can't just use FrameView's ScrollableArea::constrainScrollPosition since
        scrollRectToVisible relies on the visible rect being expanded by the content insets in order to scroll to
        a position within the content insets of UIScrollView; e.g. revealing the top of the page as the center.
        We manually expand minimumScrollPosition() and maximumScrollPosition() by the content insets instead.

        Tests: fast/scrolling/ios/programmatic-scroll-via-focus-should-clamp-top.html
               fast/scrolling/ios/programmatic-scroll-via-scrollIntoView-inside-iframe-should-clamp-top.html
               fast/scrolling/ios/programmatic-scroll-via-scrollIntoView-should-clamp-top.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):

2019-05-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Add a version of viewport shrink-to-fit heuristics that preserves page layout
        https://bugs.webkit.org/show_bug.cgi?id=197342
        <rdar://problem/50063091>

        Reviewed by Tim Horton.

        Adds support for a new shrink-to-fit heuristic that attempts to lay out the contents of the page at a larger
        width in order to shrink content to fit the viewport. See WebKit ChangeLog for more details.

        Tests: fast/viewport/ios/shrink-to-fit-content-constant-width.html
               fast/viewport/ios/shrink-to-fit-content-large-width-breakpoint.html
               fast/viewport/ios/shrink-to-fit-content-no-viewport.html
               fast/viewport/ios/shrink-to-fit-content-responsive-viewport-with-horizontal-overflow.html
               fast/viewport/ios/shrink-to-fit-content-temporary-overflow.html

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::setMinimumEffectiveDeviceWidth):
        (WebCore::ViewportConfiguration::setIsKnownToLayOutWiderThanViewport):
        (WebCore::ViewportConfiguration::description const):
        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::canIgnoreScalingConstraints const):
        (WebCore::ViewportConfiguration::minimumEffectiveDeviceWidth const):

        Add several new getters and setters in ViewportConfiguration.

        (WebCore::ViewportConfiguration::isKnownToLayOutWiderThanViewport const):
        (WebCore::ViewportConfiguration::shouldIgnoreMinimumEffectiveDeviceWidth const):

        Importantly, only allow ignoring the minimum effective device width in webpages with responsive viewports, if
        they also have *not* laid out wider than the viewport.

        (WebCore::ViewportConfiguration::setForceAlwaysUserScalable):

2019-05-01  Zalan Bujtas  <zalan@apple.com>

        [iOS] Star rating is covered with a black circle when writing a review on Yelp
        https://bugs.webkit.org/show_bug.cgi?id=197469
        <rdar://problem/48094446>

        Reviewed by Dean Jackson.

        This patch moves the background painting of the radio/checkbox form controls in checked state to RenderTheme.
        It enables content authors to disable default appearance using -webkit-appearance: none (it is also inline with what we do on macOS).

        Test: fast/forms/radio-and-checkbox-checked-with-no-appearance.html

        * css/html.css:
        (input:matches([type="checkbox"], [type="radio"]):checked):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintCheckboxDecorations):
        (WebCore::RenderThemeIOS::paintRadioDecorations):

2019-05-01  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION (r244182): RenderingUpdate should not be scheduled for invisible pages
        https://bugs.webkit.org/show_bug.cgi?id=197451

        Reviewed by Simon Fraser.

        Before r244182, some web pages never need to schedule a RenderingUpdate.
        Only pages with rAF callbacks, web animations, intersection and resize 
        observers needed to do so. After r244182, all pages have to schedule a
        RenderingUpdate when a page rendering update is required.

        When Safari opens, it create a 'blank' web page. The blank page will not
        be visible unless the user selects to show the 'Empty page' in the new
        tab. Although the blank page is not visible, the loader needs to resolveStyle()
        which requires to scheduleLayerFlushNow(). 

        We need to optimize this case: calling scheduleLayerFlushNow() for invisible
        pages. We do that by checking if the page is visible before scheduling
        the RenderingUpdate.

        Also we need to change or get rid of scheduleLayerFlushNow() since its name
        has become confusing. It suggests that it is going to schedule flushing
        the layer 'now'. But after r244182, it does scheduleRenderingUpdate() first.
        And when it fires, scheduleCompositingLayerFlush() will be called.

        * page/RenderingUpdateScheduler.cpp:
        (WebCore::RenderingUpdateScheduler::scheduleRenderingUpdate):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::scheduleLayerFlush):
        (WebCore::RenderLayerCompositor::didChangeVisibleRect):
        (WebCore::RenderLayerCompositor::frameViewDidScroll):
        (WebCore::RenderLayerCompositor::attachRootLayer):
        (WebCore::RenderLayerCompositor::setLayerFlushThrottlingEnabled):
        (WebCore::RenderLayerCompositor::layerFlushTimerFired):
        (WebCore::RenderLayerCompositor::scheduleLayerFlushNow): Deleted.
        * rendering/RenderLayerCompositor.h:

2019-05-01  Darin Adler  <darin@apple.com>

        WebKit has too much of its own UTF-8 code and should rely more on ICU's UTF-8 support
        https://bugs.webkit.org/show_bug.cgi?id=195535

        Reviewed by Alexey Proskuryakov.

        * platform/SharedBuffer.cpp:
        (WebCore::utf8Buffer): Removed unnecessary "strict" argument to convertUTF16ToUTF8 since
        that is the default behavior. Also updated for changes to return values.

        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::writeToStringBuilder): Removed unnecessary use of StringBuffer for a temporary
        buffer for characters. Rewrote to use U8_NEXT and U16_APPEND directly.

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::convertUTF16EntityToUTF8): Updated for changes to CompletionResult.

2019-05-01  Shawn Roberts  <sroberts@apple.com>

        Unreviewed, rolling out r244821.

        Causing

        Reverted changeset:

        "WebKit has too much of its own UTF-8 code and should rely
        more on ICU's UTF-8 support"
        https://bugs.webkit.org/show_bug.cgi?id=195535
        https://trac.webkit.org/changeset/244821

2019-05-01  Shawn Roberts  <sroberts@apple.com>

        Unreviewed, rolling out r244822.

        Causing

        Reverted changeset:

        https://trac.webkit.org/changeset/244822

2019-05-01  Youenn Fablet  <youenn@apple.com>

        Reject/throw when calling AudioContext methods on a stopped AudioContext
        https://bugs.webkit.org/show_bug.cgi?id=197391

        Reviewed by Eric Carlson.

        Return InvalidStateError in that case.
        ASSERT that we do not call lazyInitialize after being stopped
        since this would mean we are doing unneeded processing.

        Test: http/wpt/webaudio/audiocontext-stopped.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::lazyInitialize):
        (WebCore::AudioContext::createBufferSource):
        (WebCore::AudioContext::createMediaElementSource):
        (WebCore::AudioContext::createMediaStreamSource):
        (WebCore::AudioContext::createMediaStreamDestination):
        (WebCore::AudioContext::createScriptProcessor):
        (WebCore::AudioContext::createBiquadFilter):
        (WebCore::AudioContext::createWaveShaper):
        (WebCore::AudioContext::createPanner):
        (WebCore::AudioContext::createConvolver):
        (WebCore::AudioContext::createDynamicsCompressor):
        (WebCore::AudioContext::createAnalyser):
        (WebCore::AudioContext::createGain):
        (WebCore::AudioContext::createDelay):
        (WebCore::AudioContext::createChannelSplitter):
        (WebCore::AudioContext::createChannelMerger):
        (WebCore::AudioContext::createOscillator):
        (WebCore::AudioContext::createPeriodicWave):
        (WebCore::AudioContext::startRendering):
        (WebCore::AudioContext::suspend):
        (WebCore::AudioContext::resume):
        (WebCore::AudioContext::close):
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioContext.idl:

2019-05-01  Eric Carlson  <eric.carlson@apple.com>

        XMLHttpRequest should propagate user gestures for media playback
        https://bugs.webkit.org/show_bug.cgi?id=197428
        <rdar://problem/46677392>

        Reviewed by Jer Noble.

        A user gesture the would allow media state change in effect when XMLHttpRequest.send is 
        called should be active when the event handlers fire after the transaction completes successfully.

        Test: http/tests/media/user-gesture-preserved-across-xmlhttprequest.html

        * dom/UserGestureIndicator.cpp:
        (WebCore::UserGestureIndicator::UserGestureIndicator): Add a 'scope' parameter to potentially
        limit the scope of the gesture to just media.
        (WebCore::UserGestureIndicator::~UserGestureIndicator): Clear the scope.
        * dom/UserGestureIndicator.h:
        (WebCore::UserGestureToken::processingUserGesture const):
        (WebCore::UserGestureToken::setScope):
        (WebCore::UserGestureToken::resetScope):
        (WebCore::UserGestureToken::hasExpired const):

        * page/DOMTimer.cpp:
        (WebCore::DOMTimerFireState::DOMTimerFireState): Don't need to store the nested timer interval,
        UserGestureIndicator knows when it started.
        (WebCore::DOMTimer::DOMTimer): Ditto.
        (WebCore::DOMTimer::fired): Ditto.
        (WebCore::DOMTimerFireState::nestedTimerInterval const): Deleted.
        (WebCore::shouldForwardUserGesture): Deleted.
        (WebCore::userGestureTokenToForward): Deleted.
        (WebCore::currentNestedTimerInterval): Deleted.
        * page/DOMTimer.h:

        * testing/Internals.cpp:
        (WebCore::Internals::setXHRMaximumIntervalForUserGestureForwarding): Override the maximum
        user gesture interval for testing.
        * testing/Internals.h:
        * testing/Internals.idl:

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest): 
        (WebCore::XMLHttpRequest::send): Stash the user gesture token.
        (WebCore::XMLHttpRequest::dispatchEvent): Clear user gesture token if it has expired. If still
        valid, activate it.
        * xml/XMLHttpRequest.h:

2019-04-29  Darin Adler  <darin@apple.com>

        WebKit has too much of its own UTF-8 code and should rely more on ICU's UTF-8 support
        https://bugs.webkit.org/show_bug.cgi?id=195535

        Reviewed by Alexey Proskuryakov.

        * platform/SharedBuffer.cpp:
        (WebCore::utf8Buffer): Removed unnecessary "strict" argument to convertUTF16ToUTF8 since
        that is the default behavior. Also updated for changes to return values.

        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::writeToStringBuilder): Removed unnecessary use of StringBuffer for a temporary
        buffer for characters. Rewrote to use U8_NEXT and U16_APPEND directly.

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::convertUTF16EntityToUTF8): Updated for changes to CompletionResult.

2019-04-30  John Wilander  <wilander@apple.com>

        Add logging of Ad Click Attribution errors and events to a dedicated channel
        https://bugs.webkit.org/show_bug.cgi?id=197332
        <rdar://problem/49918800>

        Reviewed by Youenn Fablet.

        This patch adds an experimental Ad Click Attribution debug mode which
        logs information.

        No new tests.

        * loader/AdClickAttribution.cpp:
        (WebCore::AdClickAttribution::parseConversionRequest):
        (WebCore::AdClickAttribution::debugModeEnabled):
        * loader/AdClickAttribution.h:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::adClickAttributionDebugModeEnabled const):
        (WebCore::RuntimeEnabledFeatures::setAdClickAttributionDebugModeEnabled):
        * platform/Logging.h:

2019-04-30  Myles C. Maxfield  <mmaxfield@apple.com>

        font-weight: 1000 is not parsed successfully
        https://bugs.webkit.org/show_bug.cgi?id=197427

        Reviewed by Dean Jackson.

        The spec says:
        "Only values greater than or equal to 1, and less than or equal to 1000, are valid"

        This change brings us in-line with all the other browsers.

        Test: fast/text/font-weight-1-1000.html

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeFontWeightNumber):

2019-04-30  Youenn Fablet  <youenn@apple.com>

        Make Document audio producers use WeakPtr
        https://bugs.webkit.org/show_bug.cgi?id=197382

        Reviewed by Eric Carlson.

        Move from a hash set of raw pointers to a hash set of weak pointers.
        This helps make the code cleaner.
        No observable change of behavior.

        * Modules/mediastream/MediaStreamTrack.h:
        * dom/Document.cpp:
        (WebCore::Document::addAudioProducer):
        (WebCore::Document::removeAudioProducer):
        (WebCore::Document::updateIsPlayingMedia):
        (WebCore::Document::pageMutedStateDidChange):
        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        * html/HTMLMediaElement.h:
        * page/MediaProducer.h:

2019-04-30  Youenn Fablet  <youenn@apple.com>

        [macOS WK1] ASSERTION FAILED: formData in WebCore::ResourceRequest::doUpdateResourceHTTPBody()
        https://bugs.webkit.org/show_bug.cgi?id=196864
        <rdar://problem/49854497>

        Reviewed by Alex Christensen.

        In case of redirection, it is sometimes not possible to retrieve the form data
        from its NSInputStream in case of redirections.
        To handle this case, reuse the first request form data if the new request has a body.
        We also clear the HTTP content type in such a case if the original request has no content type.

        Covered by re-enabled tests.

        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):

2019-04-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r244773.
        https://bugs.webkit.org/show_bug.cgi?id=197436

        Causing assertion failures on debug queues (Requested by
        ShawnRoberts on #webkit).

        Reverted changeset:

        "Make Document audio producers use WeakPtr"
        https://bugs.webkit.org/show_bug.cgi?id=197382
        https://trac.webkit.org/changeset/244773

2019-04-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r244774.
        https://bugs.webkit.org/show_bug.cgi?id=197431

        Causing assertion failures on debug queues (Requested by
        ShawnRoberts on #webkit).

        Reverted changeset:

        "Reject/throw when calling AudioContext methods on a stopped
        AudioContext"
        https://bugs.webkit.org/show_bug.cgi?id=197391
        https://trac.webkit.org/changeset/244774

2019-04-30  Alex Christensen  <achristensen@webkit.org>

        Add WKContentRuleList ping resource-type
        https://bugs.webkit.org/show_bug.cgi?id=197325
        <rdar://problem/49841404>

        Reviewed by Geoff Garen.

        Tests: http/tests/contentextensions/block-ping-resource-type-ping.html and http/tests/contentextensions/block-ping-resource-type-raw.html

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForLoad):
        * contentextensions/ContentExtensionsBackend.h:
        * loader/PingLoader.cpp:
        (WebCore::processContentRuleListsForLoad):
        (WebCore::PingLoader::sendPing):
        * loader/ResourceLoadInfo.cpp:
        (WebCore::ContentExtensions::readResourceType):
        (WebCore::ContentExtensions::ResourceLoadInfo::getResourceFlags const):
        * loader/ResourceLoadInfo.h:
        * page/UserContentProvider.cpp:
        (WebCore::UserContentProvider::processContentRuleListsForLoad):
        * page/UserContentProvider.h:

2019-04-30  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Move 'gpu' API entry point from DOMWindow to Navigator
        https://bugs.webkit.org/show_bug.cgi?id=197348

        Reviewed by Myles C. Maxfield.

        Latest API provides 'gpu' through Navigator instead of DOMWindow. Replace DOMWindowWebGPU with NavigatorGPU.

        Existing tests updated to match. Add test: webgpu-enabled-in-worker.html to ensure workers can access WebGPU.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/webgpu/NavigatorGPU.cpp:
        (WebCore::NavigatorGPU::from):
        (WebCore::NavigatorGPU::supplementName):
        (WebCore::NavigatorGPU::gpu):
        (WebCore::NavigatorGPU::gpu const):
        * Modules/webgpu/NavigatorGPU.h:
        * Modules/webgpu/NavigatorGPU.idl:
        * Modules/webgpu/WorkerNavigatorGPU.cpp:
        (WebCore::WorkerNavigatorGPU::from):
        (WebCore::WorkerNavigatorGPU::supplementName):
        (WebCore::WorkerNavigatorGPU::gpu):
        (WebCore::WorkerNavigatorGPU::gpu const):
        * Modules/webgpu/WorkerNavigatorGPU.h:
        * Modules/webgpu/WorkerNavigatorGPU.idl:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-04-30  Zalan Bujtas  <zalan@apple.com>

        Double-tapping a post to like doesn't work on Instagram.com (needs 'dblclick' event)
        https://bugs.webkit.org/show_bug.cgi?id=197347
        <rdar://problem/49393423>

        Reviewed by Wenson Hsieh.

        Tests: fast/events/touch/ios/double-tap-for-double-click1.html
               fast/events/touch/ios/double-tap-for-double-click2.html

        * page/Frame.h:
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::nodeRespondingToDoubleClickEvent):

2019-04-30  Youenn Fablet  <youenn@apple.com>

        Reject/throw when calling AudioContext methods on a stopped AudioContext
        https://bugs.webkit.org/show_bug.cgi?id=197391

        Reviewed by Eric Carlson.

        Return InvalidStateError in that case.
        ASSERT that we do not call lazyInitialize after being stopped
        since this would mean we are doing unneeded processing.

        Test: http/wpt/webaudio/audiocontext-stopped.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::lazyInitialize):
        (WebCore::AudioContext::createBufferSource):
        (WebCore::AudioContext::createMediaElementSource):
        (WebCore::AudioContext::createMediaStreamSource):
        (WebCore::AudioContext::createMediaStreamDestination):
        (WebCore::AudioContext::createScriptProcessor):
        (WebCore::AudioContext::createBiquadFilter):
        (WebCore::AudioContext::createWaveShaper):
        (WebCore::AudioContext::createPanner):
        (WebCore::AudioContext::createConvolver):
        (WebCore::AudioContext::createDynamicsCompressor):
        (WebCore::AudioContext::createAnalyser):
        (WebCore::AudioContext::createGain):
        (WebCore::AudioContext::createDelay):
        (WebCore::AudioContext::createChannelSplitter):
        (WebCore::AudioContext::createChannelMerger):
        (WebCore::AudioContext::createOscillator):
        (WebCore::AudioContext::createPeriodicWave):
        (WebCore::AudioContext::startRendering):
        (WebCore::AudioContext::suspend):
        (WebCore::AudioContext::resume):
        (WebCore::AudioContext::close):
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioContext.idl:

2019-04-30  Youenn Fablet  <youenn@apple.com>

        Make Document audio producers use WeakPtr
        https://bugs.webkit.org/show_bug.cgi?id=197382

        Reviewed by Eric Carlson.

        Move from a hash set of raw pointers to a hash set of weak pointers.
        This helps make the code cleaner.
        No observable change of behavior.

        * Modules/mediastream/MediaStreamTrack.h:
        * dom/Document.cpp:
        (WebCore::Document::addAudioProducer):
        (WebCore::Document::removeAudioProducer):
        (WebCore::Document::updateIsPlayingMedia):
        (WebCore::Document::pageMutedStateDidChange):
        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        * html/HTMLMediaElement.h:
        * page/MediaProducer.h:

2019-04-30  Antti Koivisto  <antti@apple.com>

        Tighten type of ScrollingTree:rootNode() to ScrollingTreeFrameScrollingNode
        https://bugs.webkit.org/show_bug.cgi?id=197414

        Reviewed by Frédéric Wang.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously):
        (WebCore::ScrollingTree::handleWheelEvent):
        (WebCore::ScrollingTree::mainFrameViewportChangedViaDelegatedScrolling):
        (WebCore::ScrollingTree::updateTreeFromStateNode):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::rootNode const):

2019-04-30  Youenn Fablet  <youenn@apple.com>

        Refactor AudioContext to register/unregister itself at construction/destruction time
        https://bugs.webkit.org/show_bug.cgi?id=197383

        Reviewed by Eric Carlson.

        Registering/Unregistering is cheap.
        Instead of registering/unregistering in initialize/uninitialize,
        move this code to constructor/destructor.
        No observable change of behavior.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::~AudioContext):
        (WebCore::AudioContext::lazyInitialize):
        (WebCore::AudioContext::uninitialize):
        (WebCore::AudioContext::visibilityStateChanged):

2019-04-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        WebCore::StyleColorScheme should not have explicitly-declared copy constructor
        https://bugs.webkit.org/show_bug.cgi?id=197412

        Reviewed by Don Olmstead.

        Either we need to explicitly declare a copy assignment operator here, or the copy
        constructor needs to be removed. Having one without the other causes a huge warning spam
        with GCC 9. In this case, the copy constructor is redundant because it's identical to an
        implicitly-declared copy constructor, so let's just remove it.

        * rendering/style/StyleColorScheme.h:

2019-04-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Support prefers-color-scheme media query
        https://bugs.webkit.org/show_bug.cgi?id=196685

        Reviewed by Michael Catanzaro.

        Change the gtk-application-prefer-dark-theme setting when tests change the useDarkModeAppearance setting.

        * PlatformGTK.cmake:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::resetToConsistentState):
        (WebCore::InternalSettings::setUseDarkAppearanceInternal):
        (WebCore::InternalSettings::setUseDarkAppearance):
        * testing/InternalSettings.h:

2019-04-29  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r244755.

        Casued several test failures on iOS

        Reverted changeset:

        "Double-tapping a post to like doesn't work on Instagram.com
        (needs 'dblclick' event)"
        https://bugs.webkit.org/show_bug.cgi?id=197347
        https://trac.webkit.org/changeset/244755

2019-04-29  Alex Christensen  <achristensen@webkit.org>

        <rdar://problem/50299396> Fix internal High Sierra build
        https://bugs.webkit.org/show_bug.cgi?id=197388

        * Configurations/Base.xcconfig:

2019-04-29  Zalan Bujtas  <zalan@apple.com>

        Double-tapping a post to like doesn't work on Instagram.com (needs 'dblclick' event)
        https://bugs.webkit.org/show_bug.cgi?id=197347
        <rdar://problem/49393423>

        Reviewed by Wenson Hsieh.

        Tests: fast/events/touch/ios/double-tap-for-double-click1.html
               fast/events/touch/ios/double-tap-for-double-click2.html

        * page/Frame.h:
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::nodeRespondingToDoubleClickEvent):

2019-04-30  Simon Fraser  <simon.fraser@apple.com>

        Transform is sometimes left in a bad state after an animation
        https://bugs.webkit.org/show_bug.cgi?id=197401
        rdar://problem/48179186

        Reviewed by Dean Jackson.
        
        In some more complex compositing scenarios, at the end of an animation we'd
        fail to push a new transform onto a layer, because updateGeometry() would
        think there's an animation running (which there is, but in the "Ending" state).

        It's simpler in this code to just always push transform and opacity to the layer;
        they will get overridden by the animation while it's running. The current code
        dates from the first landing of the file, and the reason for the if (!isRunningAcceleratedTransformAnimation)
        check is lost in the sands of time.

        I was not able to get a reliable ref or layer tree test for this, because the next compositing update
        fixes it, and WTR seems to trigger one.  But the added test does show the bug
        in Safari, and is a good test to have.

        Test: compositing/animation/transform-after-animation.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):

2019-04-29  Youenn Fablet  <youenn@apple.com>

        getDisplayMedia should be called on user gesture
        https://bugs.webkit.org/show_bug.cgi?id=197356

        Reviewed by Eric Carlson.

        Allow getDisplayMedia on user gesture only.
        Otherwise reject the promise.
        Minor refactoring to align getDisplayMedia, getUserMedia and
        enumerateDevices when called with no document.

        Test: fast/mediastream/screencapture-user-gesture.html

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::getUserMedia const):
        * Modules/mediastream/MediaDevices.h:
        * Modules/mediastream/NavigatorMediaDevices.h:
        * page/DOMWindow.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setDisableGetDisplayMediaUserGestureConstraint):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-04-29  Javier Fernandez  <jfernandez@igalia.com>

        line should not be broken before the first space after a word
        https://bugs.webkit.org/show_bug.cgi?id=197278

        Reviewed by Myles C. Maxfield.

        The 'white-space: break-spaces' only adds breaking opportunities after
        a white space character. However, it's possible to break before the
        first space after a word when the feature is used in combination with
        other properties, like overflow-wrap.

        However, breaking before the first space should not be allowed if
        there are previous opportunities. We wrongly assumed that we had to
        consider these previous breaking opportunities if the proper combination
        of line breaking properties is being used, so that breaking before the
        first space after a word is allowed.

        This wrong assumption caused several issues, like the one described in
        the bug, that lead to incorrectly break before the first space even
        though there are previous opportunities, either white spaces or between
        letters.

        Theses issues have been analyzed [1] by the CSS WG and finally agreed on a
        expected behavior, represented in the Web Platform tests added in this
        patch.

        For the later case, of considering previous opportunities between
        letters, we have a seperated issue #952254, so the tests covering such
        cases will be added to the TestExpecations as Failure entries.

        [1] https://github.com/w3c/csswg-drafts/issues/3701

        Tests: imported/w3c/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-001.html
               imported/w3c/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-002.html
               imported/w3c/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-003.html
               imported/w3c/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-004.html
               imported/w3c/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-005.html
               imported/w3c/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-006.html
               imported/w3c/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-007.html
               imported/w3c/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-008.html
               imported/w3c/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-009.html
               imported/w3c/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-010.html
               imported/w3c/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-011.html
               imported/w3c/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-012.html
               imported/w3c/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-013.html

        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleText):
        (WebCore::BreakingContext::trailingSpacesHang):

2019-04-29  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r238090): animation on https://www.robotodyssey.online gets stuck; site broken
        https://bugs.webkit.org/show_bug.cgi?id=197381

        Reviewed by Zalan Bujtas.

        When -webkit-clip-path changes on a composited layer, we need to trigger a backing geometry update
        to push the changes to GraphicsLayers.

        Test: compositing/style-change/clip-path-change.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::recompositeChangeRequiresGeometryUpdate):

2019-04-29  Chris Dumez  <cdumez@apple.com>

        User-facing strings should use curly quotes instead of straight
        https://bugs.webkit.org/show_bug.cgi?id=197370

        Reviewed by Geoffrey Garen.

        Update localizable strings.

        * en.lproj/Localizable.strings:

2019-04-29  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed fix for non-unified build after r244687.

        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:

2019-04-29  Youenn Fablet  <youenn@apple.com>

        RTCTrackEvent should be delayed until the whole remote description is set
        https://bugs.webkit.org/show_bug.cgi?id=196808
        <rdar://problem/49802649>

        Reviewed by Eric Carlson.

        As per https://w3c.github.io/webrtc-pc/#set-description,
        fire events just before resolving the setRemoteDescription promise.
        This ensures that the exposed stream has all necessary tracks from the beginning.
        Pending track events are created in LibWebRTCMediaEndpoint and stored in PeerConnectionBackend.

        Covered by updated test.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::setRemoteDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionFailed):
        (WebCore::PeerConnectionBackend::addPendingTrackEvent):
        (WebCore::PeerConnectionBackend::stop):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addRemoteTrack):
        (WebCore::LibWebRTCMediaEndpoint::addPendingTrackEvent):
        (WebCore::LibWebRTCMediaEndpoint::newTransceiver):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:

2019-04-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r244635): [GTK] Wrong background color used in non-dark mode
        https://bugs.webkit.org/show_bug.cgi?id=197276

        Reviewed by Michael Catanzaro.

        Since r244635, we are now getting the frame view background color from the theme. That's correct for dark mode,
        but in non-dark mode we still want to use white backgrounds by default. This made a lot of tests to fail.

        * css/CSSValueKeywords.in: Add -webkit-control-background when HAVE(OS_DARK_MODE_SUPPORT).
        * css/html.css: Use -webkit-control-background instead of -apple-system-control-background.
        * page/FrameView.cpp:
        (WebCore::FrameView::updateBackgroundRecursively): Use CSSValueWindow instead of CSSValueWindowframe.
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::systemColor const): Only get the window background from the theme in dark mode. Handle
        also CSSValueWebkitControlBackground.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor const): Handle CSSValueWebkitControlBackground when HAVE(OS_DARK_MODE_SUPPORT).

2019-04-28  Andy Estes  <aestes@apple.com>

        [Apple Pay] Increment the API version from 6 to 7
        https://bugs.webkit.org/show_bug.cgi?id=197041
        <rdar://problem/49986625>

        Reviewed by Geoffrey Garen.

        * Modules/applepay/PaymentCoordinatorClient.cpp:
        (WebCore::PaymentCoordinatorClient::supportsVersion):

2019-04-28  Andy Estes  <aestes@apple.com>

        Fix the watchOS engineering build.

        * Modules/webgpu/WebGPUComputePassEncoder.cpp: Included Logging.h.

2019-04-28  Youenn Fablet  <youenn@apple.com>

        Remove no longer needed mDNS ICE candidate resolution code
        https://bugs.webkit.org/show_bug.cgi?id=197315

        Reviewed by Eric Carlson.

        No change of behavior.
        Removed code is no longer exercised as mDNS resolution happens inside libwebrtc
        using the same resolution mechanism as for TURN/STUN server names.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::addIceCandidateSucceeded):
        (WebCore::PeerConnectionBackend::addIceCandidateFailed):
        * Modules/mediastream/PeerConnectionBackend.h:

2019-04-27  Simon Fraser  <simon.fraser@apple.com>

        Move some Compositing logging to the Layers log channel
        https://bugs.webkit.org/show_bug.cgi?id=197345

        Reviewed by Sam Weinig.

        Make Compositing logging a bit less verbose by moving the GraphicsLayer tree dump
        to the Layers log channel. Also log GraphicsLayers after flushing, when we'll have
        accurate visible rects. 

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateCoverage):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::layersLogEnabled):
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):

2019-04-27  Megan Gardner  <megan_gardner@apple.com>

        Lookup only looking up the first word in selection
        https://bugs.webkit.org/show_bug.cgi?id=197341
        <rdar://problem/48221414>

        Reviewed by Wenson Hsieh.

        Lookup is not testable.

        Reveal needs the full range in order to correctly create the item for the popover.

        * editing/cocoa/DictionaryLookup.mm:
        (WebCore::showPopupOrCreateAnimationController):

2019-04-26  Jer Noble  <jer.noble@apple.com>

        Reduce the number of copies made during SourceBufferPrivateAVFObjC::append() using SharedBuffer
        https://bugs.webkit.org/show_bug.cgi?id=197335
        <rdar://problem/49175604>

        Rubber-stamped by Alex Christensen.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::append):

2019-04-26  Jessie Berlin  <jberlin@webkit.org>

        Add new mac target numbers
        https://bugs.webkit.org/show_bug.cgi?id=197313

        Reviewed by Alex Christensen.

        * Configurations/Version.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

2019-04-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r244708.
        https://bugs.webkit.org/show_bug.cgi?id=197334

        "Broke the debug build" (Requested by rmorisset on #webkit).

        Reverted changeset:

        "All prototypes should call didBecomePrototype()"
        https://bugs.webkit.org/show_bug.cgi?id=196315
        https://trac.webkit.org/changeset/244708

2019-04-26  Robin Morisset  <rmorisset@apple.com>

        All prototypes should call didBecomePrototype()
        https://bugs.webkit.org/show_bug.cgi?id=196315

        Reviewed by Saam Barati.

        It was found by existing tests, with the new assert in JSC::Structure

        * bindings/js/JSWindowProxy.cpp:
        (WebCore::JSWindowProxy::setWindow):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GeneratePrototypeDeclaration):
        (GenerateConstructorHelperMethods):

2019-04-26  Eric Carlson  <eric.carlson@apple.com>

        Create AVFoundationSoftLink.{h,mm} to reduce duplicate code
        https://bugs.webkit.org/show_bug.cgi?id=197171
        <rdar://problem/47454979>

        Reviewed by Youenn Fablet.

        Tests: TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm

        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::jsValueWithValueInContext):
        (WebCore::jsValueWithAVMetadataItemInContext):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::setCategory):
        (WebCore::AudioSession::category const):
        (WebCore::AudioSession::routeSharingPolicy const):
        (WebCore::AudioSession::routingContextUID const):
        (WebCore::AudioSession::sampleRate const):
        (WebCore::AudioSession::bufferSize const):
        (WebCore::AudioSession::numberOfOutputChannels const):
        (WebCore::AudioSession::tryToSetActiveInternal):
        (WebCore::AudioSession::preferredBufferSize const):
        (WebCore::AudioSession::setPreferredBufferSize):
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (-[WebMediaSessionHelper initWithCallback:]):
        (-[WebMediaSessionHelper startMonitoringAirPlayRoutes]):
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::AVTrackPrivateAVFObjCImpl::audioKind const):
        (WebCore::AVTrackPrivateAVFObjCImpl::videoKind const):
        (WebCore::AVTrackPrivateAVFObjCImpl::label const):
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::createMix):
        * platform/graphics/avfoundation/MediaPlaybackTargetMac.mm:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        (WebCore::MediaSelectionGroupAVFObjC::updateOptions):
        * platform/graphics/avfoundation/objc/AVFoundationMIMETypeCache.mm:
        (WebCore::AVFoundationMIMETypeCache::canDecodeType):
        (WebCore::AVFoundationMIMETypeCache::loadMIMETypes):
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::supportsPersistableState):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::supportsPersistentKeys):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::supportsMediaCapability):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::initializeWithConfiguration):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::updateLicense):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::loadSession):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::removeSessionData):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::ensureSession):
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::isAvailable):
        (WebCore::CDMSessionAVContentKeySession::releaseKeys):
        (WebCore::CDMSessionAVContentKeySession::update):
        (WebCore::CDMSessionAVContentKeySession::generateKeyReleaseMessage):
        (WebCore::CDMSessionAVContentKeySession::contentKeySession):
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::releaseKeys):
        (WebCore::CDMSessionAVStreamSession::update):
        (WebCore::CDMSessionAVStreamSession::setStreamSession):
        (WebCore::CDMSessionAVStreamSession::generateKeyReleaseMessage):
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::imageDecoderAssetOptions):
        (WebCore::ImageDecoderAVFObjC::ImageDecoderAVFObjC):
        (WebCore::ImageDecoderAVFObjC::firstEnabledTrack):
        (WebCore::ImageDecoderAVFObjC::readSamples):
        (SOFT_LINK_CONSTANT_MAY_FAIL): Deleted.
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateAVFObjC::label const):
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateLegacyAVFObjC::label const):
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::devicePicker):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::assetCacheForPath):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::clearMediaCache):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::clearMediaCacheForOrigins):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageGenerator):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::synchronizeTextTrackState):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isAvailable):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
        (WebCore::determineChangedTracksFromNewTracksAndOldItems):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateAudioTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::outputMediaDataWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForLegibleMedia):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForAudibleMedia):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForVisualMedia):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processMediaSelectionOptions):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTextTrack):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetType const):
        (WebCore::exernalDeviceDisplayNameForPlayer):
        (WebCore::metadataType):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[WebCoreAVFPullDelegate outputMediaDataWillChange:]):
        (-[WebCoreAVFPullDelegate outputSequenceWasFlushed:]):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processLegacyClosedCaptionsTracks): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isAvailable):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsType):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::streamSession):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayers):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVSampleBufferErrorListener observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::layerTypeForPlatformLayer):
        (WebCore::PlatformCALayerCocoa::PlatformCALayerCocoa):
        (WebCore::PlatformCALayerCocoa::clone const):
        (WebCore::PlatformCALayerCocoa::avPlayerLayer const):
        * platform/graphics/cocoa/HEVCUtilitiesCocoa.mm:
        (WebCore::validateHEVCParameters):
        * platform/ios/PlatformSpeechSynthesizerIOS.mm:
        (getAVSpeechUtteranceDefaultSpeechRate):
        (getAVSpeechUtteranceMaximumSpeechRate):
        (-[WebSpeechSynthesisWrapper speakUtterance:]):
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        (SOFT_LINK_CONSTANT): Deleted.
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerLayer init]):
        (-[WebAVPlayerLayer layoutSublayers]):
        (-[WebAVPlayerLayer setVideoGravity:]):
        (-[WebAVPlayerLayer videoRect]):
        (WebAVPlayerLayerView_startRoutingVideoToPictureInPicturePlayerLayerView):
        * platform/mac/SerializedPlatformRepresentationMac.mm:
        (WebCore::jsValueWithValueInContext):
        (WebCore::jsValueWithAVMetadataItemInContext):
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::getAVFormatIDKeyWithFallback):
        (WebCore::getAVNumberOfChannelsKeyWithFallback):
        (WebCore::getAVSampleRateKeyWithFallback):
        (WebCore::getAVEncoderBitRateKeyWithFallback):
        (WebCore::MediaRecorderPrivateWriter::create):
        (WebCore::MediaRecorderPrivateWriter::setVideoInput):
        (WebCore::MediaRecorderPrivateWriter::setAudioInput):
        * platform/mediastream/RealtimeVideoSource.h:
        * platform/mediastream/VideoPreset.h:
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:
        (WebCore::AVAudioSessionCaptureDeviceManager::refreshAudioCaptureDevices):
        * platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm:
        (-[WebCoreAudioCaptureSourceIOSListener initWithCallback:]):
        (-[WebCoreAudioCaptureSourceIOSListener handleInterruption:]):
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::deviceIsAvailable):
        (WebCore::AVCaptureDeviceManager::updateCachedAVCaptureDevices):
        (WebCore::AVCaptureDeviceManager::refreshCaptureDevices):
        (WebCore::AVCaptureDeviceManager::isAvailable):
        (WebCore::AVCaptureDeviceManager::~AVCaptureDeviceManager):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoPreset::create):
        (WebCore::AVVideoPreset::AVVideoPreset):
        (WebCore::AVVideoCaptureSource::create):
        (WebCore::AVVideoCaptureSource::AVVideoCaptureSource):
        (WebCore::AVVideoCaptureSource::capabilities):
        (WebCore::sensorOrientationFromVideoOutput):
        (WebCore::AVVideoCaptureSource::setupSession):
        (WebCore::AVVideoCaptureSource::frameDurationForFrameRate):
        (WebCore::AVVideoCaptureSource::setupCaptureSession):
        (WebCore::AVVideoCaptureSource::captureOutputDidOutputSampleBufferFromConnection):
        (WebCore::AVVideoCaptureSource::generatePresets):
        (-[WebCoreAVVideoCaptureSourceObserver addNotificationObservers]):
        (-[WebCoreAVVideoCaptureSourceObserver captureOutput:didOutputSampleBuffer:fromConnection:]):

2019-04-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r244683.
        https://bugs.webkit.org/show_bug.cgi?id=197320

        Causing crash on iOS Simulator and EWS failures (Requested by
        sroberts on #webkit).

        Reverted changeset:

        "[iOS] Add internal setting to force -webkit-text-size-adjust
        to "auto""
        https://bugs.webkit.org/show_bug.cgi?id=197275
        https://trac.webkit.org/changeset/244683

2019-04-26  Youenn Fablet  <youenn@apple.com>

        Use normal loading path for ping loads
        https://bugs.webkit.org/show_bug.cgi?id=196807

        Reviewed by Alex Christensen.

        Make use of regular code path for ping loads and beacon.
        This is done conditionally on KeepAlive flag.
        The benefits are a single loading code path and service worker interception.

        For that purpose, introduce a LoaderStrategy switch based on KeepAlive runtime flag.
        This switch is used to use ping loads when keepAlive is set or regular loads.
        In case of regular loads, the keepAlive flag should be used to extend the lifetime of the load.

        Migrate ping loads to use CachedResourceLoader instead of PingLoad.
        For that purpose, introduce a new Ping CachedResource type.

        Covered by existing tests.

        * Modules/beacon/NavigatorBeacon.cpp:
        (WebCore::NavigatorBeacon::sendBeacon):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::inspectorResourceType):
        * loader/LinkLoader.cpp:
        (WebCore::createLinkPreloadResourceClient):
        * loader/LoaderStrategy.h:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::sendViolationReport):
        (WebCore::PingLoader::startPingLoad):
        * loader/PingLoader.h:
        * loader/ResourceLoadInfo.cpp:
        (WebCore::toResourceType):
        * loader/SubresourceLoader.cpp:
        (WebCore::logResourceLoaded):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::defaultPriorityForResourceType):
        (WebCore::CachedResource::load):
        (WebCore::CachedResource::cancelLoad):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::shouldUsePingLoad):
        (WebCore::CachedResource::isMainOrMediaOrIconOrRawResource const):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::requestPingResource):
        (WebCore::contentTypeFromResourceType):
        (WebCore::CachedResourceLoader::checkInsecureContent const):
        (WebCore::CachedResourceLoader::allowedByContentSecurityPolicy const):
        (WebCore::CachedResourceLoader::canRequest):
        (WebCore::isResourceSuitableForDirectReuse):
        (WebCore::destinationForType):
        * loader/cache/CachedResourceLoader.h:

2019-04-26  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build after r244695
       ​https://bugs.webkit.org/show_bug.cgi?id=197165

        * loader/PingLoader.cpp:

2019-04-26  Alex Christensen  <achristensen@webkit.org>

        Fix internal High Sierra build after r244653
        https://bugs.webkit.org/show_bug.cgi?id=197131

        * DerivedSources.make:
        -std=gnu++17 didn't exist yet.  -std=gnu++1z did.

2019-04-26  Alex Christensen  <achristensen@webkit.org>

        Add ENABLE(CONTENT_EXTENSIONS) and namespace ContentExtensions to ResourceLoadInfo.h
        https://bugs.webkit.org/show_bug.cgi?id=197165

        Reviewed by Youenn Fablet.

        No change in behavior.  This will just make it harder for people working on the loader to mistake
        these ContentExtension specific structures for other structures general to loading.
        One such mistake was made in r244248.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect):
        * contentextensions/ContentExtensionsBackend.h:
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::subresourcesAllowReuse const):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader):
        * loader/PingLoader.cpp:
        (WebCore::processContentRuleListsForLoad):
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::sendViolationReport):
        * loader/ResourceLoadInfo.cpp:
        (WebCore::toResourceType): Deleted.
        (WebCore::readResourceType): Deleted.
        (WebCore::readLoadType): Deleted.
        (WebCore::ResourceLoadInfo::isThirdParty const): Deleted.
        (WebCore::ResourceLoadInfo::getResourceFlags const): Deleted.
        * loader/ResourceLoadInfo.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequestInternal):
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::SubresourceLoader):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::open):
        * page/UserContentProvider.cpp:
        (WebCore::UserContentProvider::processContentRuleListsForLoad):
        (WebCore::UserContentProvider::actionsForResourceLoad):
        * page/UserContentProvider.h:

2019-04-26  Alex Christensen  <achristensen@webkit.org>

        Fix an internal High Sierra build after r244653
       ​https://bugs.webkit.org/show_bug.cgi?id=197131

        * DerivedSources.make:
        Apparently we can't use gnu++17 when preprocessing Platform.h in the makefile.

2019-04-26  Chris Fleizach  <cfleizach@apple.com>

        AX: Provide iOS method for setting focus
        https://bugs.webkit.org/show_bug.cgi?id=197200
        <rdar://problem/50131679>

        Reviewed by Alex Christensen.

        Put the focus setting code in a place that iOS and macOS can access.
        Override a platform level method for setting focus on iOS.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilitySetFocus:]):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase baseAccessibilitySetFocus:]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper _accessibilitySetValue:forAttribute:]):

2019-04-26  Said Abou-Hallawa  <sabouhallawa@apple.com>

        propertyRegistry() was not overridden for SVGFEFloodElement and SVGFEMergeElement
        https://bugs.webkit.org/show_bug.cgi?id=197303

        Reviewed by Alex Christensen.

        Therefore SVGElement::propertyRegistry() was called instead. This means
        these two elements will not have access to the properties of the base
        class SVGFilterPrimitiveStandardAttributes.

        Tests: svg/dom/SVGFEFloodElement-filter-standard-attributes.svg

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::commitPropertyChange):
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEMergeElement.h:

2019-04-26  Youenn Fablet  <youenn@apple.com>

        [Mac WK2 iOS Sim] Layout Test imported/w3c/web-platform-tests/webrtc/RTCRtpReceiver-getSynchronizationSources.https.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=196633
        <rdar://problem/49627667>

        Reviewed by Alex Christensen.

        Use formula defined in https://w3c.github.io/webrtc-stats/#dom-rtcrtpcontributingsourcestats-audiolevel
        to compute the audio level from the RTP header information.
        Covered by rebased test.

        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.cpp:
        (WebCore::fillRTCRtpContributingSource):

2019-04-26  Sihui Liu  <sihui_liu@apple.com>

        Stop IDB transactions to release locked database files when network process is ready to suspend
        https://bugs.webkit.org/show_bug.cgi?id=196372
        <rdar://problem/48930116>

        Reviewed by Brady Eidson.

        Suspend IDB database thread and finish ongoing IDB transactions on the main thread before suspending network 
        process.

        API test: IndexedDB.IndexedDBSuspendImminently

        * Modules/indexeddb/server/IDBBackingStore.h:
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::tryStop):
        (WebCore::IDBServer::IDBServer::resume):
        * Modules/indexeddb/server/IDBServer.h:
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp: Remove some error log messages, because now we may try
        performing database operations without an active transaction if the transaction is finished on the main thread.
        (WebCore::IDBServer::SQLiteIDBBackingStore::createObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::renameObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::clearObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::renameIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteRange):
        (WebCore::IDBServer::SQLiteIDBBackingStore::addRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllIndexRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getCount):
        (WebCore::IDBServer::SQLiteIDBBackingStore::generateKeyNumber):
        (WebCore::IDBServer::SQLiteIDBBackingStore::revertGeneratedKeyNumber):
        (WebCore::IDBServer::SQLiteIDBBackingStore::maybeUpdateKeyGeneratorNumber):
        (WebCore::IDBServer::SQLiteIDBBackingStore::openCursor):
        (WebCore::IDBServer::SQLiteIDBBackingStore::iterateCursor):
        (WebCore::IDBServer::SQLiteIDBBackingStore::hasTransaction const):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::prepareToFinishTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::commitTransactionAfterQuotaCheck):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformCommitTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::abortTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformAbortTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::abortTransactionOnMainThread):
        (WebCore::IDBServer::UniqueIDBDatabase::commitTransactionOnMainThread):
        (WebCore::IDBServer::UniqueIDBDatabase::finishActiveTransactions):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::setState):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::state const):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::setResult):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::result const):
        * platform/sql/SQLiteDatabaseTracker.cpp:
        (WebCore::SQLiteDatabaseTracker::hasTransactionInProgress):
        * platform/sql/SQLiteDatabaseTracker.h:

2019-04-26  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Fix Curl Request Scheduler not to release wrong Curl handle when request is cancelled.
        https://bugs.webkit.org/show_bug.cgi?id=191650

        Reviewed by Fujii Hironori.

        Test: http/tests/misc/repeat-open-cancel.html

        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::cancel):
        (WebCore::CurlRequest::isCancelled):
        (WebCore::CurlRequest::isCompletedOrCancelled):
        (WebCore::CurlRequest::didCompleteTransfer):
        (WebCore::CurlRequest::completeDidReceiveResponse):
        (WebCore::CurlRequest::pausedStatusChanged):
        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::isCompleted const): Deleted.
        (WebCore::CurlRequest::isCancelled const): Deleted.
        (WebCore::CurlRequest::isCompletedOrCancelled const): Deleted.
        * platform/network/curl/CurlRequestScheduler.cpp:
        (WebCore::CurlRequestScheduler::cancel):
        (WebCore::CurlRequestScheduler::callOnWorkerThread):
        (WebCore::CurlRequestScheduler::startThreadIfNeeded):
        (WebCore::CurlRequestScheduler::stopThreadIfNoMoreJobRunning):
        (WebCore::CurlRequestScheduler::stopThread):
        (WebCore::CurlRequestScheduler::executeTasks):
        (WebCore::CurlRequestScheduler::workerThread):
        (WebCore::CurlRequestScheduler::startTransfer):
        (WebCore::CurlRequestScheduler::completeTransfer):
        (WebCore::CurlRequestScheduler::cancelTransfer):
        (WebCore::CurlRequestScheduler::finalizeTransfer):
        * platform/network/curl/CurlRequestScheduler.h:

2019-04-25  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Add internal setting to force -webkit-text-size-adjust to "auto"
        https://bugs.webkit.org/show_bug.cgi?id=197275
        <rdar://problem/50211019>

        Reviewed by Simon Fraser.

        This setting makes it easier to investigate the autosizing work we've been doing
        in https://bugs.webkit.org/show_bug.cgi?id=197250.

        * page/Settings.yaml:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::adjustComputedFontSizes):
        * rendering/TextAutoSizing.cpp:
        (WebCore::TextAutoSizingValue::adjustTextNodeSizes):

2019-04-25  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Implement idempotent mode for text autosizing
        https://bugs.webkit.org/show_bug.cgi?id=197250
        <rdar://problem/50211034>

        Reviewed by Jon Lee.

        Our text autosizing code has this interesting behavior where it is sensitive to the width of the text's container
        and the number of lines of text inside the element. Not only is it sensitive to those things, but as those things
        change, their values are stored inside the RenderObject itself and then never recomputed. This means that the text
        autosizing parameters are sensitive to the entire history of an element. So, a newly created element with the same
        style as an existing element can have dramatically different results.

        This patch adds a new mode for text autosizing, which isn't sensitive to either of those things, and therefore
        maintains the invariant that a newly created element will behave the same as an existing element with the same style.
        Instead of using container size, it instead uses the viewport's initial scale. As the viewport's initial scale
        changes, new layouts will be triggered, which will cause the autosizing code to use the new value.

        Tests: fast/text-autosizing/ios/idempotentmode/idempotent-autosizing-identity.html
               fast/text-autosizing/ios/idempotentmode/idempotent-autosizing.html

        * page/FrameViewLayoutContext.cpp:
        (WebCore::FrameViewLayoutContext::applyTextSizingIfNeeded):
        * page/Page.cpp:
        (WebCore::Page::setInitialScale): WebKit will push the initial scale down into the page.
        * page/Page.h:
        (WebCore::Page::initialScale const):
        * page/SettingsBase.h:
        * page/cocoa/SettingsBaseCocoa.mm:
        (WebCore::SettingsBase::textAutosizingUsesIdempotentMode):
        (WebCore::SettingsBase::defaultTextAutosizingEnabled):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::idempotentTextSize): Describe a piecewise-linear curve for the text size to follow. The curve scales
        depending on the viewport's initial scale.
        (WebCore::RenderBlockFlow::adjustComputedFontSizes):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderElement.cpp:
        (WebCore::includeNonFixedHeight): This new mode should consider max-height as well as height when determining if
        content overflows.
        (WebCore::RenderElement::adjustComputedFontSizesOnBlocks):
        (WebCore::RenderElement::resetTextAutosizing):
        * rendering/RenderElement.h:
        * rendering/RenderObject.h:

2019-04-25  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r234330): 3 legacy-animation-engine/compositing tests are flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=188357
        <rdar://problem/42986633>

        Reviewed by Dean Jackson.

        DumpRenderTree had no code that set page.setCompositingPolicyOverride() to Normal, so some
        tests would fall into low memory mode and have different behavior.
        
        Fix by moving the code that calls setCompositingPolicyOverride(Normal) from the WK2 layer
        to Internals, so it's shared by DRT and WTR.
        
        We no longer need the WK2 C SPI glue.

        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):

2019-04-25  Sihui Liu  <sihui_liu@apple.com>

        [ iOS Sim ] REGRESSION (r242986) Layout Test storage/indexeddb/modern/idbtransaction-objectstore-failures-private.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=196357
        <rdar://problem/49386836>

        Reviewed by Geoffrey Garen.

        Dispatch IDBRequest event to IDBTransaction if event of IDBTransaction has not been dispatched.

        Covered by existing tests.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::dispatchEvent):
        * Modules/indexeddb/IDBTransaction.h:

2019-04-25  Chris Dumez  <cdumez@apple.com>

        ASSERT(scriptExecutionContext()) in Performance::resourceTimingBufferFullTimerFired()
        https://bugs.webkit.org/show_bug.cgi?id=197300
        <rdar://problem/49965990>

        Reviewed by Youenn Fablet.

        We crash because the scriptExecutionContext has been destroyed by the time the m_resourceTimingBufferFullTimer
        timer fires. However, r241598 already makes sure that we stop the timer when the script execution context
        is destroyed. This makes me think that somebody restarts the timer *after* the script execution context has
        been destroyed. The thing is that we only start the timer in Performance::addResourceTiming() and there are
        only 2 call sites for this method. Both call sites get the Performance object from the Window object, which
        they get from the Document object. As a result, I would believe that the Window's document is alive, even
        though the Performance object's scriptExecutionContext is not. This could indicate that the Performance
        object's scriptExecutionContext gets out of sync with its Window's document. I have found one place where
        it could happen in theory (DOMWindow::didSecureTransitionTo()). I have not been able to write a test
        confirming my theory though so this is a speculative fix. I have also added a few assertions to help us
        track down the issue if my speculative fix turns out to be ineffective.

        No new tests, we do not know how to reproduce.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::didSecureTransitionTo):
        This is a speculative fix for the crash. When a DOMWindow transitions from one document to
        another, reset its data members which store the DOMWindow's document to make sure that they
        do not get out of sync.

        (WebCore::DOMWindow::crypto const):
        (WebCore::DOMWindow::navigator):
        (WebCore::DOMWindow::performance const):
        Add assertions to make sure that the member's scriptExecutionContext is in sync with
        the window's.

        * page/Performance.cpp:
        (WebCore::Performance::addResourceTiming):
        Add assertion to make sure that the scriptExecutionContext() is non-null when calling this
        as this may start the m_resourceTimingBufferFullTimer timer. If my speculative fix above
        does not work, we should hit this and this should tell us which call site is causing this.

2019-04-25  Timothy Hatcher  <timothy@apple.com>

        Disable ContentChangeObserver on iOSMac.
        https://bugs.webkit.org/show_bug.cgi?id=197292
        rdar://problem/49039957

        Reviewed by Zalan Bujtas.

        We don’t need to run any of ContentChangeObserver, because we have hover events on iOSMac.
        Disabling it skips the synthetic mouse move events and speeds up clicks.

        * page/SettingsBase.cpp:
        (WebCore::SettingsBase::defaultContentChangeObserverEnabled): Return false for PLATFORM(IOSMAC).

2019-04-25  Timothy Hatcher  <timothy@apple.com>

        Disable date and time inputs on iOSMac.
        https://bugs.webkit.org/show_bug.cgi?id=197287
        rdar://problem/46794376

        Reviewed by Wenson Hsieh.

        * Configurations/FeatureDefines.xcconfig:
        * platform/text/mac/LocaleMac.h:
        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::formatDateTime):

2019-04-25  Alex Christensen  <achristensen@webkit.org>

        Fix more Windows builds after r244653
        https://bugs.webkit.org/show_bug.cgi?id=197131

        * svg/properties/SVGAnimatedPropertyList.h:
        * svg/properties/SVGProperty.h:
        * svg/properties/SVGPropertyList.h:

2019-04-25  Alex Christensen  <achristensen@webkit.org>

        Fix more builds after r244653
        https://bugs.webkit.org/show_bug.cgi?id=197131

        * svg/properties/SVGValuePropertyList.h:
        Something is preventing MSVC from seeing protected constructors from subclasses.

2019-04-25  Per Arne Vollan  <pvollan@apple.com>

        -[WKWebsiteDataStore fetchDataRecordsOfTypes:completionHandler:] never returns _WKWebsiteDataTypeCredentials
        https://bugs.webkit.org/show_bug.cgi?id=196991
        <rdar://problem/45507423>

        Reviewed by Alex Christensen.

        Add method to get all origins with persistent credentials from credential storage.

        API tests: WKWebsiteDataStore.FetchNonPersistentCredentials
                   WKWebsiteDataStore.FetchPersistentCredentials

        * platform/network/CredentialStorage.h:
        * platform/network/mac/CredentialStorageMac.mm:
        (WebCore::CredentialStorage::originsWithPersistentCredentials):

2019-04-25  Alex Christensen  <achristensen@webkit.org>

        Fix MSVC build after r244653
        https://bugs.webkit.org/show_bug.cgi?id=197131

        * svg/properties/SVGValueProperty.h:
        MSVC doesn't think it can access these protected constructors from subclasses.
        Make the build work and investigate this later.

2019-04-25  Alex Christensen  <achristensen@webkit.org>

        Start using C++17
        https://bugs.webkit.org/show_bug.cgi?id=197131

        Reviewed by Darin Adler.

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

2019-04-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r244627.
        https://bugs.webkit.org/show_bug.cgi?id=197282

        Causing internal build failures (Requested by ShawnRoberts on
        #webkit).

        Reverted changeset:

        "Create AVFoundationSoftLink.{h,mm} to reduce duplicate code"
        https://bugs.webkit.org/show_bug.cgi?id=197171
        https://trac.webkit.org/changeset/244627

2019-04-25  Antti Koivisto  <antti@apple.com>

        redefinition of enumerator 'NSAttachmentCharacter' with Apple internal build
        https://bugs.webkit.org/show_bug.cgi?id=197279

        Reviewed by Antoine Quint.

        Try to fix the build.

        * platform/mac/WebNSAttributedStringExtras.mm:

2019-04-25  Antti Koivisto  <antti@apple.com>

        Visited link hash should be computed only once
        https://bugs.webkit.org/show_bug.cgi?id=197229
        <rdar://problem/48438924>

        Reviewed by Alex Christensen.

        Test: fast/history/visited-href-mutation.html

        Visited link style is now based on the first target URL of the link element. Further href mutations don't affect styling.

        * dom/Document.cpp:
        (WebCore::Document::updateBaseURL):
        * dom/VisitedLinkState.cpp:
        (WebCore::linkAttribute):
        (WebCore::linkHashForElement):

        Visited link support is now limited to HTML and SVG <a> elements.

        (WebCore::VisitedLinkState::invalidateStyleForLink):
        (WebCore::VisitedLinkState::determineLinkStateSlowCase):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::HTMLAnchorElement):
        (WebCore::HTMLAnchorElement::parseAttribute):
        * html/HTMLAnchorElement.h:
        (WebCore::HTMLAnchorElement::visitedLinkHash const):
        (WebCore::HTMLAnchorElement::invalidateCachedVisitedLinkHash): Deleted.
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::visitedLinkHash const):
        * svg/SVGAElement.h:

2019-04-25  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] gst_element_get_state: assertion 'GST_IS_ELEMENT (element)' failed in WebCore::MediaPlayerPrivateGStreamer::paused
        https://bugs.webkit.org/show_bug.cgi?id=196691

        Reviewed by Eric Carlson.

        For gif assets, fail media loading early and notify the
        MediaPlayer by setting both network and ready states, so that the
        MediaPlayer will try with with the next media engine or pass the
        error to HTMLMediaElement if there are none.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::loadFull):
        (WebCore::MediaPlayerPrivateGStreamer::loadingFailed):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2019-04-25  Philippe Normand  <pnormand@igalia.com>

        [REGRESSION(r243197)][GStreamer] http/tests/media/clearkey/collect-webkit-media-session.html hits an ASSERT
        https://bugs.webkit.org/show_bug.cgi?id=197230

        Reviewed by Xabier Rodriguez-Calvar.

        Perform the resource loader disposal and destruction from the main
        thread. Also ensure there's no circular reference between the
        CachedResourceStreamingClient and WebKitWebSrc when disposing of
        the private WebKitWebSrc storage.

        * platform/graphics/gstreamer/MainThreadNotifier.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (_WebKitWebSrcPrivate::~_WebKitWebSrcPrivate):
        (webkit_web_src_class_init):
        (webKitWebSrcDispose):
        (webKitWebSrcCloseSession):
        (webKitWebSrcFinalize): Deleted.

2019-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Hardcoded text color in input fields
        https://bugs.webkit.org/show_bug.cgi?id=126907

        Reviewed by Michael Catanzaro.

        Enable HAVE_OS_DARK_MODE_SUPPORT for GTK port to ensure that dark mode is used when Page::useDarkAppearance()
        returns true. This patch reverts r232913, I'll reopen the bug, I think we need to find a better solution for
        that.

        * CMakeLists.txt: Add HAVE_OS_DARK_MODE_SUPPORT to FEATURE_DEFINES_WITH_SPACE_SEPARATOR if enabled.
        * css/CSSDefaultStyleSheets.cpp: Ensure html{color:text} is used in simple style sheet when
        HAVE_OS_DARK_MODE_SUPPORT is enabled.
        * page/FrameView.cpp:
        (WebCore::FrameView::updateBackgroundRecursively): Use CSSValueWindowframe to get the frame view background
        color when HAVE_OS_DARK_MODE_SUPPORT is enabled for non-mac ports.
        * platform/gtk/RenderThemeWidget.cpp:
        (WebCore::RenderThemeWidget::getOrCreate): Create window widget.
        (WebCore::RenderThemeWindow::RenderThemeWindow): Add window widget.
        * platform/gtk/RenderThemeWidget.h:
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::disabledTextColor const): Always use the color from the theme for consistency with
        other form controls.
        (WebCore::RenderThemeGtk::systemColor const): Get the color from the theme for CSSValueText, CSSValueGraytext
        and CSSValueWindowframe.
        * rendering/RenderThemeGtk.h:

2019-04-24  Zalan Bujtas  <zalan@apple.com>

        Regression (r244291): Broken API Test AutoLayoutRenderingProgressRelativeOrdering
        https://bugs.webkit.org/show_bug.cgi?id=196948
        <rdar://problem/49927131>

        Reviewed by Tim Horton.

        Covered by existing tests.

        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::autoSizeIfEnabled):
        (WebCore::FrameView::enableAutoSizeMode):
        * page/FrameView.h:

2019-04-24  Youenn Fablet  <youenn@apple.com>

        Do not restart WebRTC stats timer if backend is stopped
        https://bugs.webkit.org/show_bug.cgi?id=197257
        <rdar://problem/50095879>

        Reviewed by Eric Carlson.

        We used to stop and reschedule the stat gathering timer in case the
        gathering delay is changing. Timer should not be rescheduled if the backend is stopped.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::OnStatsDelivered):

2019-04-24  Andres Gonzalez  <andresg_22@apple.com>

        Flaky crash under WebCore::AXObjectCache::stopCachingComputedObjectAttributes()
        https://bugs.webkit.org/show_bug.cgi?id=187391
        <rdar://problem/40681396

        Check for null value returned by AccessibilityObject::axObjectCache.

        Reviewed by Chris Fleizach.

        No need for new test since existing tests caught this problem.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::firstChild const):
        (WebCore::AccessibilityNodeObject::lastChild const):
        (WebCore::AccessibilityNodeObject::previousSibling const):
        (WebCore::AccessibilityNodeObject::nextSibling const):
        (WebCore::AccessibilityNodeObject::addChildren):
        (WebCore::AccessibilityNodeObject::anchorElement const):
        (WebCore::AccessibilityNodeObject::changeValueByStep):
        (WebCore::AccessibilityNodeObject::changeValueByPercent):
        (WebCore::AccessibilityNodeObject::textForLabelElement const):
        (WebCore::AccessibilityNodeObject::titleElementText const):
        (WebCore::AccessibilityNodeObject::alternativeText const):
        (WebCore::AccessibilityNodeObject::ariaLabeledByText const):
        (WebCore::AccessibilityNodeObject::helpText const):

2019-04-24  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r242132): Nested position:sticky elements move incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=197255
        rdar://problem/50137744

        Reviewed by Zalan Bujtas.
        
        Revert to the behavior of the code before r242132, where we looked at the direct parent
        scrolling tree node instead of walking up the ancestor chain to find an enclosing scrolling node.
        This fixes nested sticky behavior.

        Test: scrollingcoordinator/mac/nested-sticky.html

        * page/scrolling/cocoa/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::applyLayerPositions):

2019-04-24  Eric Carlson  <eric.carlson@apple.com>

        Create AVFoundationSoftLink.{h,mm} to reduce duplicate code
        https://bugs.webkit.org/show_bug.cgi?id=197171
        <rdar://problem/47454979>

        Reviewed by Youenn Fablet.

        Tests: TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm

        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::jsValueWithValueInContext):
        (WebCore::jsValueWithAVMetadataItemInContext):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::setCategory):
        (WebCore::AudioSession::category const):
        (WebCore::AudioSession::routeSharingPolicy const):
        (WebCore::AudioSession::routingContextUID const):
        (WebCore::AudioSession::sampleRate const):
        (WebCore::AudioSession::bufferSize const):
        (WebCore::AudioSession::numberOfOutputChannels const):
        (WebCore::AudioSession::tryToSetActiveInternal):
        (WebCore::AudioSession::preferredBufferSize const):
        (WebCore::AudioSession::setPreferredBufferSize):
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (-[WebMediaSessionHelper initWithCallback:]):
        (-[WebMediaSessionHelper startMonitoringAirPlayRoutes]):
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::AVTrackPrivateAVFObjCImpl::audioKind const):
        (WebCore::AVTrackPrivateAVFObjCImpl::videoKind const):
        (WebCore::AVTrackPrivateAVFObjCImpl::label const):
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::createMix):
        * platform/graphics/avfoundation/MediaPlaybackTargetMac.mm:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        (WebCore::MediaSelectionGroupAVFObjC::updateOptions):
        * platform/graphics/avfoundation/objc/AVFoundationMIMETypeCache.mm:
        (WebCore::AVFoundationMIMETypeCache::canDecodeType):
        (WebCore::AVFoundationMIMETypeCache::loadMIMETypes):
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::supportsPersistableState):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::supportsPersistentKeys):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::supportsMediaCapability):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::initializeWithConfiguration):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::updateLicense):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::loadSession):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::removeSessionData):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::ensureSession):
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::isAvailable):
        (WebCore::CDMSessionAVContentKeySession::releaseKeys):
        (WebCore::CDMSessionAVContentKeySession::update):
        (WebCore::CDMSessionAVContentKeySession::generateKeyReleaseMessage):
        (WebCore::CDMSessionAVContentKeySession::contentKeySession):
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::releaseKeys):
        (WebCore::CDMSessionAVStreamSession::update):
        (WebCore::CDMSessionAVStreamSession::setStreamSession):
        (WebCore::CDMSessionAVStreamSession::generateKeyReleaseMessage):
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::imageDecoderAssetOptions):
        (WebCore::ImageDecoderAVFObjC::ImageDecoderAVFObjC):
        (WebCore::ImageDecoderAVFObjC::firstEnabledTrack):
        (WebCore::ImageDecoderAVFObjC::readSamples):
        (SOFT_LINK_CONSTANT_MAY_FAIL): Deleted.
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateAVFObjC::label const):
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateLegacyAVFObjC::label const):
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::devicePicker):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::assetCacheForPath):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::clearMediaCache):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::clearMediaCacheForOrigins):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageGenerator):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::synchronizeTextTrackState):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isAvailable):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
        (WebCore::determineChangedTracksFromNewTracksAndOldItems):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateAudioTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::outputMediaDataWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForLegibleMedia):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForAudibleMedia):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForVisualMedia):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processMediaSelectionOptions):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTextTrack):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetType const):
        (WebCore::exernalDeviceDisplayNameForPlayer):
        (WebCore::metadataType):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[WebCoreAVFPullDelegate outputMediaDataWillChange:]):
        (-[WebCoreAVFPullDelegate outputSequenceWasFlushed:]):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processLegacyClosedCaptionsTracks): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isAvailable):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsType):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::streamSession):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayers):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVSampleBufferErrorListener observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::layerTypeForPlatformLayer):
        (WebCore::PlatformCALayerCocoa::PlatformCALayerCocoa):
        (WebCore::PlatformCALayerCocoa::clone const):
        (WebCore::PlatformCALayerCocoa::avPlayerLayer const):
        * platform/graphics/cocoa/HEVCUtilitiesCocoa.mm:
        (WebCore::validateHEVCParameters):
        * platform/ios/PlatformSpeechSynthesizerIOS.mm:
        (getAVSpeechUtteranceDefaultSpeechRate):
        (getAVSpeechUtteranceMaximumSpeechRate):
        (-[WebSpeechSynthesisWrapper speakUtterance:]):
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        (SOFT_LINK_CONSTANT): Deleted.
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerLayer init]):
        (-[WebAVPlayerLayer layoutSublayers]):
        (-[WebAVPlayerLayer setVideoGravity:]):
        (-[WebAVPlayerLayer videoRect]):
        (WebAVPlayerLayerView_startRoutingVideoToPictureInPicturePlayerLayerView):
        * platform/mac/SerializedPlatformRepresentationMac.mm:
        (WebCore::jsValueWithValueInContext):
        (WebCore::jsValueWithAVMetadataItemInContext):
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::getAVFormatIDKeyWithFallback):
        (WebCore::getAVNumberOfChannelsKeyWithFallback):
        (WebCore::getAVSampleRateKeyWithFallback):
        (WebCore::getAVEncoderBitRateKeyWithFallback):
        (WebCore::MediaRecorderPrivateWriter::create):
        (WebCore::MediaRecorderPrivateWriter::setVideoInput):
        (WebCore::MediaRecorderPrivateWriter::setAudioInput):
        * platform/mediastream/RealtimeVideoSource.h:
        * platform/mediastream/VideoPreset.h:
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:
        (WebCore::AVAudioSessionCaptureDeviceManager::refreshAudioCaptureDevices):
        * platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm:
        (-[WebCoreAudioCaptureSourceIOSListener initWithCallback:]):
        (-[WebCoreAudioCaptureSourceIOSListener handleInterruption:]):
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::deviceIsAvailable):
        (WebCore::AVCaptureDeviceManager::updateCachedAVCaptureDevices):
        (WebCore::AVCaptureDeviceManager::refreshCaptureDevices):
        (WebCore::AVCaptureDeviceManager::isAvailable):
        (WebCore::AVCaptureDeviceManager::~AVCaptureDeviceManager):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoPreset::create):
        (WebCore::AVVideoPreset::AVVideoPreset):
        (WebCore::AVVideoCaptureSource::create):
        (WebCore::AVVideoCaptureSource::AVVideoCaptureSource):
        (WebCore::AVVideoCaptureSource::capabilities):
        (WebCore::sensorOrientationFromVideoOutput):
        (WebCore::AVVideoCaptureSource::setupSession):
        (WebCore::AVVideoCaptureSource::frameDurationForFrameRate):
        (WebCore::AVVideoCaptureSource::setupCaptureSession):
        (WebCore::AVVideoCaptureSource::captureOutputDidOutputSampleBufferFromConnection):
        (WebCore::AVVideoCaptureSource::generatePresets):
        (-[WebCoreAVVideoCaptureSourceObserver addNotificationObservers]):
        (-[WebCoreAVVideoCaptureSourceObserver captureOutput:didOutputSampleBuffer:fromConnection:]):

2019-04-24  Brady Eidson  <beidson@apple.com>

        XMLHTTPRequest POSTs to a custom WKURLSchemeHandler protocol are missing the HTTP body.
        https://bugs.webkit.org/show_bug.cgi?id=191362

        Reviewed by Alex Christensen.

        Covered by new API tests.

        In 2008 some refactoring added an HTTP(S)-only restriction to copying the form body for
        XHRs that POST, and it added that restriction with no explanation.

        We definitely want to allow that.

        Blobs are broken at this time (covered by bug 197237)

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::sendBytesData):

2019-04-24  John Wilander  <wilander@apple.com>

        Age out unconverted Ad Click Attributions after one week.
        https://bugs.webkit.org/show_bug.cgi?id=197238
        <rdar://problem/50177349>

        Reviewed by Chris Dumez.

        This patch adds the two functions AdClickAttribution::markAsExpired()
        and AdClickAttribution::hasExpired() which make use of the existing
        m_timeOfAdClick member.

        Test: http/tests/adClickAttribution/expired-attributions-removed.html

        * loader/AdClickAttribution.cpp:
        (WebCore::AdClickAttribution::markAsExpired):
        (WebCore::AdClickAttribution::hasExpired const):
        * loader/AdClickAttribution.h:

2019-04-24  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (iOS 12.2): CSS perspective property value can only be set correctly once
        https://bugs.webkit.org/show_bug.cgi?id=197105
        rdar://problem/50068230

        Reviewed by Zalan Bujtas.

        Make sure we trigger a geometry update when style properties change that
        result in a StyleDifference::RecompositeLayer, and which are updated on layers
        via RenderLayerBacking::updateGeometry().

        Tests: compositing/style-change/backface-visibility-change.html
               compositing/style-change/perspective-change.html
               compositing/style-change/perspective-origin-change.html
               compositing/style-change/transform-origin-change.html
               compositing/style-change/transform-style-change.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::recompositeChangeRequiresGeometryUpdate):
        (WebCore::RenderLayerCompositor::layerStyleChanged):

2019-04-24  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to control the renderTreeAsText output by setting options on testRunner
        https://bugs.webkit.org/show_bug.cgi?id=197133

        Reviewed by Sam Weinig.

        Add testRunner.setRenderTreeDumpOptions() and expose the subset of RenderAsTextFlag flags
        that make sense in testing (those that don't dump unstable data like addresses), and plumb
        these flags through the various framework layers.

        Convert RenderAsTextBehavior to an OptionSet<RenderAsTextFlag>.

        Fix code generation in WebKitTestRunner to generate bindings for IDL const values,
        and hand-code DumpRenderTree bindings.

        Some cleanup of the TestRunners, using member initializers.

        Test: fast/harness/render-tree-as-text-options.html

        * rendering/RenderLayer.cpp:
        (WebCore::showLayerTree):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        (WebCore::writeDebugInfo):
        (WebCore::write):
        (WebCore::writeLayer):
        (WebCore::writeLayerRenderers):
        (WebCore::writeLayers):
        (WebCore::externalRepresentation):
        * rendering/RenderTreeAsText.h:
        (WebCore::externalRepresentation):
        (WebCore::write):
        (WebCore::writeDebugInfo):
        (): Deleted.
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writePositionAndStyle):
        (WebCore::writeStandardPrefix):
        (WebCore::writeChildren):
        (WebCore::writeSVGResourceContainer):
        (WebCore::writeSVGContainer):
        (WebCore::write):
        (WebCore::writeSVGText):
        (WebCore::writeSVGInlineText):
        (WebCore::writeSVGImage):
        (WebCore::writeSVGGradientStop):
        (WebCore::writeResources):
        * rendering/svg/SVGRenderTreeAsText.h:

2019-04-24  Antoine Quint  <graouts@apple.com>

        [iOS] Calling preventDefault() when handling a pointerdown event should not prevent panning, zooming or click event dispatch
        https://bugs.webkit.org/show_bug.cgi?id=195839
        <rdar://problem/48946154>

        Reviewed by Brent Fulgham.

        Tests: pointerevents/ios/pointer-events-prevent-default-allows-click-event.html
               pointerevents/ios/pointer-events-prevent-default-allows-scrolling.html

        The Pointer Events specification defines that the default action of any and all pointer events MUST NOT
        be a manipulation of the viewport (e.g. panning or zooming). In practice, this means that calling
        preventDefault() while handling a Pointer Event has no effect on the inner workings of the user agent,
        so we change the method signature of PointerCaptureController::dispatchEventForTouchAtIndex() to return
        void since we don't need to know whether preventDefault() was called.

        https://www.w3.org/TR/pointerevents/#declaring-candidate-regions-for-default-touch-behaviors

        * page/PointerCaptureController.cpp:
        (WebCore::PointerCaptureController::dispatchEventForTouchAtIndex):
        * page/PointerCaptureController.h:

2019-04-24  Frederic Wang  <fwang@igalia.com>

        With async scrolling enabled, this MathML test asserts
        https://bugs.webkit.org/show_bug.cgi?id=196123

        This patch ensures that updateScrollInfoAfterLayout() is called during MathML layout. This
        fixes assertions when async scrolling is enabled and MathML elements have non-visible overflow.

        Reviewed by Rob Buis.

        Test: mathml/mathml-overflow-crash.html

        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::layoutBlock):
        (WebCore::RenderMathMLBlock::layoutInvalidMarkup):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::layoutBlock):
        * rendering/mathml/RenderMathMLMath.cpp:
        (WebCore::RenderMathMLMath::layoutBlock):
        * rendering/mathml/RenderMathMLMenclose.cpp:
        (WebCore::RenderMathMLMenclose::layoutBlock):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::layoutBlock):
        * rendering/mathml/RenderMathMLPadded.cpp:
        (WebCore::RenderMathMLPadded::layoutBlock):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::layoutBlock):
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::layoutBlock):
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::layoutBlock):
        * rendering/mathml/RenderMathMLSpace.cpp:
        (WebCore::RenderMathMLSpace::layoutBlock):
        * rendering/mathml/RenderMathMLToken.cpp:
        (WebCore::RenderMathMLToken::layoutBlock):
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::layoutBlock):

2019-04-24  Greg V  <greg@unrelenting.technology>

        Fix -Wc++11-narrowing on unsigned char platforms like FreeBSD/aarch64
        https://bugs.webkit.org/show_bug.cgi?id=197148

        Reviewed by Alex Christensen.

        * contentextensions/DFACombiner.cpp:
        * contentextensions/NFAToDFA.cpp:

2019-04-24  Chris Dumez  <cdumez@apple.com>

        X-Frame-Options header should be ignored when frame-ancestors CSP directive is present
        https://bugs.webkit.org/show_bug.cgi?id=197226
        <rdar://problem/50155649>

        Reviewed by Alex Christensen.

        X-Frame-Options header should be ignored when frame-ancestors CSP directive is present:
        - https://www.w3.org/TR/CSP3/#frame-ancestors-and-frame-options

        Specification says:
        """
        In order to allow backwards-compatible deployment, the frame-ancestors directive _obsoletes_ the
        X-Frame-Options header. If a resource is delivered with an policy that includes a directive named
        frame-ancestors and whose disposition is "enforce", then the X-Frame-Options header MUST be ignored.
        """

        Gecko and Blink follow the specification, WebKit does not. As a result, page [1] is broken with
        WebKit-only on Schwab.com. The page height is wrong and you cannot see all the ETFs as a result.

        [1] https://www.schwab.com/public/schwab/investing/investment_help/investment_research/etf_research/etfs.html?&path=/Prospect/Research/etfs/overview/oneSourceETFs.asp

        Test: http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-overrides-X-Frames-Options.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::overridesXFrameOptions const):
        * page/csp/ContentSecurityPolicy.h:
        * page/csp/ContentSecurityPolicyDirectiveList.h:
        (WebCore::ContentSecurityPolicyDirectiveList::hasFrameAncestorsDirective const):

2019-04-24  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Do not use the global _WKContentChange in WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=196286
        <rdar://problem/49364417>

        Reviewed by Simon Fraser.

        By reporting WKContentIndeterminateChange in sendMouseMoveEvent enables us to remove the global _WKContentChange state.
        Using _WKContentChange is fine as long as only the observed frame reports content change during the synthetic click event.
        In case of multiple frames, we should really consult the local state instead.
        Unfortunately sendMouseMoveEvent has no access to the observed Document object so we can't really identify the observed content change.
        WKContentIndeterminateChange triggers asynchronous decision making at the callsite and in the callback we have access
        to the active Document/ContentChangeObverver object and can report the correct state.
        This is inline with current WebKit(WK2) behaviour.

        Manually tested with a WebKitLegacy test app.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::setHasNoChangeState):
        (WebCore::ContentChangeObserver::setHasIndeterminateState):
        (WebCore::ContentChangeObserver::setHasVisibleChangeState):
        (WebCore::ContentChangeObserver::setObservedContentState): Deleted.
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::mouseMoved):
        * platform/ios/wak/WAKWindow.mm:
        (-[WAKWindow sendMouseMoveEvent:contentChange:]):
        * platform/ios/wak/WKContentObservation.cpp: Removed.
        * platform/ios/wak/WKContentObservation.h:

2019-04-24  Philippe Normand  <pnormand@igalia.com>

        [GTK][GStreamer] Flaky ASSERTION FAILED: m_lock.isHeld() in TextureMapperPlatformLayerProxy
        https://bugs.webkit.org/show_bug.cgi?id=196739

        Reviewed by Xabier Rodriguez-Calvar.

        The crash was triggered because m_videoDecoderPlatform not being
        explicitely set, its value would be inferred as one of the enum
        class values. Making it Optional avoids this issue.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2019-04-24  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Crash in AudioTrackPrivate with playbin3 enabled
        https://bugs.webkit.org/show_bug.cgi?id=196913

        Reviewed by Xabier Rodriguez-Calvar.

        The crash was due to a playbin3 code path being triggered during
        MSE playback, which is not supposed to work in playbin3 anyway.
        The problem is that setting the USE_PLAYBIN3 environment variable
        to "1" makes the GStreamer playback plugin register the playbin3
        element under the playbin name. So that leads to playbin3 being
        used everywhere in WebKit where we assume the playbin element is
        used. So the proposed solution is to:

        - use a WebKit-specific environment variable instead of the
        GStreamer USE_PLAYBIN3 variable.
        - emit a warning if the USE_PLAYBIN3 environment variable is
        detected. We can't unset it ourselves for security reasons.

        The patch also includes a code cleanup of the player method
        handling the pipeline creation. The previous code had a bug
        leading to playbin3 being used for MSE.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):

2019-04-24  chris fleizach  <cfleizach@apple.com>

        AX: Remove deprecated Accessibility Object Model events
        https://bugs.webkit.org/show_bug.cgi?id=197073
        <rdar://problem/50027819>

        Reviewed by Ryosuke Niwa.

        Test: accessibility/mac/replace-text-with-range.html

        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::setSelected):
        * accessibility/AccessibilityMediaObject.cpp:
        (WebCore::AccessibilityMediaObject::increment):
        (WebCore::AccessibilityMediaObject::decrement):
        * accessibility/AccessibilityMenuListOption.cpp:
        (WebCore::AccessibilityMenuListOption::setSelected):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::increment):
        (WebCore::AccessibilityNodeObject::decrement):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::press):
        (WebCore::AccessibilityObject::replaceTextInRange):
        (WebCore::AccessibilityObject::scrollToMakeVisible const):
        (WebCore::AccessibilityObject::shouldDispatchAccessibilityEvent const): Deleted.
        (WebCore::AccessibilityObject::dispatchAccessibilityEvent const): Deleted.
        (WebCore::AccessibilityObject::dispatchAccessibilityEventWithType const): Deleted.
        (WebCore::AccessibilityObject::dispatchAccessibleSetValueEvent const): Deleted.
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setFocused):
        (WebCore::AccessibilityRenderObject::setValue):
        * accessibility/AccessibilityScrollbar.cpp:
        (WebCore::AccessibilityScrollbar::setValue):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::setValue):
        * accessibility/ios/AccessibilityObjectIOS.mm:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject const):
        (WebCore::AccessibilityObject::hasAccessibleDismissEventListener const): Deleted.
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityPerformEscape]): Deleted.
        (-[WebAccessibilityObjectWrapper accessibilityElementDidBecomeFocused]): Deleted.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityPerformShowMenuAction]):
        * dom/Element.idl:
        * dom/EventNames.h:
        * dom/EventNames.in:
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createEventHandlerNameMap):
        * page/Settings.yaml:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setAccessibilityEventsEnabled): Deleted.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2019-04-23  Andy Estes  <aestes@apple.com>

        [iOS] QuickLook documents loaded from file: URLs should be allowed to perform same-document navigations
        https://bugs.webkit.org/show_bug.cgi?id=196749
        <rdar://problem/35773454>

        Reviewed by Daniel Bates.

        QuickLook previews are in a non-local origin defined by a unique x-apple-ql-id: URL, which
        isolates the origin that hosted the document from the document preview itself. When a
        QuickLook document is loaded as a file: URL, SecurityOrigin's protections against loading
        local resources from non-local origins prevented navigations like location.reload() and
        fragment navigations.

        To allow reloads and same-document navigations in QuickLook documents loaded from file: URLs,
        we should grant the QuickLook document's SecurityOrigin access to the file path that loaded
        the preview.

        Added a new API test.

        * dom/Document.cpp:
        (WebCore::Document::applyQuickLookSandbox):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::createNonLocalWithAllowedFilePath):
        (WebCore::SecurityOrigin::canDisplay const):
        * page/SecurityOrigin.h:

2019-04-23  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debugger: remove ASSERT_NOT_REACHED where it's possible to reach
        https://bugs.webkit.org/show_bug.cgi?id=197210
        <rdar://problem/48462912>

        Reviewed by Joseph Pecoraro.

        * inspector/agents/page/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::didAddEventListener):
        (WebCore::PageDebuggerAgent::didPostMessage):

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::consoleAgentEnabled):
        (WebCore::InspectorInstrumentation::timelineAgentEnabled):
        Drive-by: add additional `FAST_RETURN_IF_NO_FRONTENDS`.

2019-04-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r244556.
        https://bugs.webkit.org/show_bug.cgi?id=197212

        Causing build failures on multiple builders (Requested by
        ShawnRoberts on #webkit).

        Reverted changeset:

        "Create AVFoundationSoftLink.{h,mm} to reduce duplicate code"
        https://bugs.webkit.org/show_bug.cgi?id=197171
        https://trac.webkit.org/changeset/244556

2019-04-23  Devin Rousso  <drousso@apple.com>

        Web Inspector: Uncaught Exception: null is not an object (evaluating 'this.ownerDocument.frameIdentifier')
        https://bugs.webkit.org/show_bug.cgi?id=196420
        <rdar://problem/49444205>

        Reviewed by Timothy Hatcher.

        Modify the existing `frameId` to represent the owner frame of the node, rather than the
        frame it holds (in the case of an `<iframe>`).

        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):

2019-04-23  Devin Rousso  <drousso@apple.com>

        ContentSecurityPolicy::logToConsole should include line/column number and source location
        https://bugs.webkit.org/show_bug.cgi?id=114317
        <rdar://problem/13614617>

        Reviewed by Timothy Hatcher.

        No change in functionality.

        * page/csp/ContentSecurityPolicy.h:
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation const):
        (WebCore::ContentSecurityPolicy::logToConsole const):

2019-04-23  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: support recording TypedOMCSSImageValue
        https://bugs.webkit.org/show_bug.cgi?id=192609

        Reviewed by Timothy Hatcher.

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::indexForData):
        (WebCore::InspectorCanvas::buildAction):

2019-04-23  Andres Gonzalez  <andresg_22@apple.com>

        Accessibility text search and selection API enhancements.
        https://bugs.webkit.org/show_bug.cgi?id=197095
        <rdar://problem/48181791>

        Reviewed by Chris Fleizach.

        - Split the existing SelectTextWithCriteria API into two: search text API (SearchTextWithCriteria) and a text operation API (TextOperation: select, replace, capitalize...).
        - This allows for more flexibility and extensibility.
        - Added the ability to retrieve text markers for multiple search hits.
        - Various code clean up and consolidation.
        - Added LayoutTest for search API.
        - Previous API is marked with "To be deprecated", and is implemented with new implementation. May be removed in a future change.

        Test: accessibility/mac/search-text/search-text.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::rangeClosestToRange):
        (WebCore::AccessibilityObject::rangeOfStringClosestToRangeInDirection const):
        (WebCore::AccessibilityObject::findTextRange const):
        (WebCore::AccessibilityObject::findTextRanges const):
        (WebCore::AccessibilityObject::performTextOperation):
        (WebCore::AccessibilityObject::frame const):
        (WebCore::AccessibilityObject::selectText): Deleted.
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilitySearchTextCriteria::AccessibilitySearchTextCriteria):
        (WebCore::AccessibilityTextOperation::AccessibilityTextOperation):
        (WebCore::AccessibilitySelectTextCriteria::AccessibilitySelectTextCriteria): Deleted.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (accessibilityTextCriteriaForParameterizedAttribute):
        (accessibilitySearchTextCriteriaForParameterizedAttribute):
        (accessibilityTextOperationForParameterizedAttribute):
        (-[WebAccessibilityObjectWrapper IGNORE_WARNINGS_END]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        (accessibilitySelectTextCriteriaForCriteriaParameterizedAttribute): Deleted.

2019-04-23  Guy Lewin  <guy@lewin.co.il>

        Multiple File Input Icon Set Regardless of File List
        https://bugs.webkit.org/show_bug.cgi?id=195537

        Reviewed by Alexey Proskuryakov.

        File input elements display icon with an empty file list after
        resetting the file list in 'change' event handler - on iOS

        Test: fast/forms/file/file-reset-in-change-using-open-panel-with-icon.html

        * html/FileInputType.cpp:
        (WebCore::FileInputType::filesChosen):

2019-04-23  Eric Carlson  <eric.carlson@apple.com>

        Create AVFoundationSoftLink.{h,mm} to reduce duplicate code
        https://bugs.webkit.org/show_bug.cgi?id=197171
        <rdar://problem/47454979>

        Reviewed by Youenn Fablet.

        Tests: TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm

        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::jsValueWithValueInContext):
        (WebCore::jsValueWithAVMetadataItemInContext):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::setCategory):
        (WebCore::AudioSession::category const):
        (WebCore::AudioSession::routeSharingPolicy const):
        (WebCore::AudioSession::routingContextUID const):
        (WebCore::AudioSession::sampleRate const):
        (WebCore::AudioSession::bufferSize const):
        (WebCore::AudioSession::numberOfOutputChannels const):
        (WebCore::AudioSession::tryToSetActiveInternal):
        (WebCore::AudioSession::preferredBufferSize const):
        (WebCore::AudioSession::setPreferredBufferSize):
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (-[WebMediaSessionHelper initWithCallback:]):
        (-[WebMediaSessionHelper startMonitoringAirPlayRoutes]):
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::AVTrackPrivateAVFObjCImpl::audioKind const):
        (WebCore::AVTrackPrivateAVFObjCImpl::videoKind const):
        (WebCore::AVTrackPrivateAVFObjCImpl::label const):
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::createMix):
        * platform/graphics/avfoundation/MediaPlaybackTargetMac.mm:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        (WebCore::MediaSelectionGroupAVFObjC::updateOptions):
        * platform/graphics/avfoundation/objc/AVFoundationMIMETypeCache.mm:
        (WebCore::AVFoundationMIMETypeCache::canDecodeType):
        (WebCore::AVFoundationMIMETypeCache::loadMIMETypes):
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::supportsPersistableState):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::supportsPersistentKeys):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::supportsMediaCapability):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::initializeWithConfiguration):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::updateLicense):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::loadSession):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::removeSessionData):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::ensureSession):
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::isAvailable):
        (WebCore::CDMSessionAVContentKeySession::releaseKeys):
        (WebCore::CDMSessionAVContentKeySession::update):
        (WebCore::CDMSessionAVContentKeySession::generateKeyReleaseMessage):
        (WebCore::CDMSessionAVContentKeySession::contentKeySession):
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::releaseKeys):
        (WebCore::CDMSessionAVStreamSession::update):
        (WebCore::CDMSessionAVStreamSession::setStreamSession):
        (WebCore::CDMSessionAVStreamSession::generateKeyReleaseMessage):
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::imageDecoderAssetOptions):
        (WebCore::ImageDecoderAVFObjC::ImageDecoderAVFObjC):
        (WebCore::ImageDecoderAVFObjC::firstEnabledTrack):
        (WebCore::ImageDecoderAVFObjC::readSamples):
        (SOFT_LINK_CONSTANT_MAY_FAIL): Deleted.
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateAVFObjC::label const):
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateLegacyAVFObjC::label const):
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::devicePicker):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::assetCacheForPath):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::clearMediaCache):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::clearMediaCacheForOrigins):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageGenerator):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::synchronizeTextTrackState):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isAvailable):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
        (WebCore::determineChangedTracksFromNewTracksAndOldItems):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateAudioTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::outputMediaDataWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForLegibleMedia):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForAudibleMedia):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForVisualMedia):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processMediaSelectionOptions):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTextTrack):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetType const):
        (WebCore::exernalDeviceDisplayNameForPlayer):
        (WebCore::metadataType):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[WebCoreAVFPullDelegate outputMediaDataWillChange:]):
        (-[WebCoreAVFPullDelegate outputSequenceWasFlushed:]):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processLegacyClosedCaptionsTracks): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isAvailable):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsType):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::streamSession):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayers):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVSampleBufferErrorListener observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::layerTypeForPlatformLayer):
        (WebCore::PlatformCALayerCocoa::PlatformCALayerCocoa):
        (WebCore::PlatformCALayerCocoa::clone const):
        (WebCore::PlatformCALayerCocoa::avPlayerLayer const):
        * platform/graphics/cocoa/HEVCUtilitiesCocoa.mm:
        (WebCore::validateHEVCParameters):
        * platform/ios/PlatformSpeechSynthesizerIOS.mm:
        (getAVSpeechUtteranceDefaultSpeechRate):
        (getAVSpeechUtteranceMaximumSpeechRate):
        (-[WebSpeechSynthesisWrapper speakUtterance:]):
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        (SOFT_LINK_CONSTANT): Deleted.
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerLayer init]):
        (-[WebAVPlayerLayer layoutSublayers]):
        (-[WebAVPlayerLayer setVideoGravity:]):
        (-[WebAVPlayerLayer videoRect]):
        (WebAVPlayerLayerView_startRoutingVideoToPictureInPicturePlayerLayerView):
        * platform/mac/SerializedPlatformRepresentationMac.mm:
        (WebCore::jsValueWithValueInContext):
        (WebCore::jsValueWithAVMetadataItemInContext):
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::getAVFormatIDKeyWithFallback):
        (WebCore::getAVNumberOfChannelsKeyWithFallback):
        (WebCore::getAVSampleRateKeyWithFallback):
        (WebCore::getAVEncoderBitRateKeyWithFallback):
        (WebCore::MediaRecorderPrivateWriter::create):
        (WebCore::MediaRecorderPrivateWriter::setVideoInput):
        (WebCore::MediaRecorderPrivateWriter::setAudioInput):
        * platform/mediastream/RealtimeVideoSource.h:
        * platform/mediastream/VideoPreset.h:
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:
        (WebCore::AVAudioSessionCaptureDeviceManager::refreshAudioCaptureDevices):
        * platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm:
        (-[WebCoreAudioCaptureSourceIOSListener initWithCallback:]):
        (-[WebCoreAudioCaptureSourceIOSListener handleInterruption:]):
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::deviceIsAvailable):
        (WebCore::AVCaptureDeviceManager::updateCachedAVCaptureDevices):
        (WebCore::AVCaptureDeviceManager::refreshCaptureDevices):
        (WebCore::AVCaptureDeviceManager::isAvailable):
        (WebCore::AVCaptureDeviceManager::~AVCaptureDeviceManager):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoPreset::create):
        (WebCore::AVVideoPreset::AVVideoPreset):
        (WebCore::AVVideoCaptureSource::create):
        (WebCore::AVVideoCaptureSource::AVVideoCaptureSource):
        (WebCore::AVVideoCaptureSource::capabilities):
        (WebCore::sensorOrientationFromVideoOutput):
        (WebCore::AVVideoCaptureSource::setupSession):
        (WebCore::AVVideoCaptureSource::frameDurationForFrameRate):
        (WebCore::AVVideoCaptureSource::setupCaptureSession):
        (WebCore::AVVideoCaptureSource::captureOutputDidOutputSampleBufferFromConnection):
        (WebCore::AVVideoCaptureSource::generatePresets):
        (-[WebCoreAVVideoCaptureSourceObserver addNotificationObservers]):
        (-[WebCoreAVVideoCaptureSourceObserver captureOutput:didOutputSampleBuffer:fromConnection:]):

2019-04-23  Timothy Hatcher  <timothy@apple.com>

        Speed up RenderTheme::systemColor on Speedometer2.
        https://bugs.webkit.org/show_bug.cgi?id=197203
        rdar://problem/50056756

        Reviewed by Tim Horton.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::systemColor const): Remove some unused code. And fetch the cache after an early return.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor const): Avoid some allocations in LocalDefaultSystemAppearance
        when a CSS color is in the system color cache.

2019-04-23  Ryosuke Niwa  <rniwa@webkit.org>

        [iOS] element.focus() sometimes fails to reveal the focused element when it becomes editable dynamically
        https://bugs.webkit.org/show_bug.cgi?id=197188

        Reviewed by Wenson Hsieh.

        The bug was caused by the scroll-to-reveal code triggered by Element::updateFocusAppearance updating
        the scroll position via scrolling tree update in a layer tree commit which happens after
        _zoomToRevealFocusedElement in WKContentView had already scrolled the frame view.

        To fix this problem, we need to defer the editor state update until the layer commit (see r244494),
        and update the scrolling tree before invoking WebPageProxy::editorStateChanged which brings up
        the keyboard and scroll-to-reveal the caret in the UI process side.

        We also avoid revealing the focus for the second time via Document::scheduleScrollToFocusedElement
        in Element::updateFocusAppearance as this timer based scrolling also happens after we had already
        revealed the caret in _zoomToRevealFocusedElement. This is a bit hacky but works for most cases since
        we wouldn't bring up a keyboard if the focused element was not editable anyway.

        Test: editing/selection/ios/scrolling-to-focused-element-inside-iframe.html

        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance): Avoid scheduling a timer based reavel of the focused element
        when we're already revealing the element via selection change.

2019-04-23  Remy Demarest  <rdemarest@apple.com>

        Fix layout issues occuring when entering full screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=197086
        <rdar://problem/47733671>.

        Reviewed by Darin Adler.

        This issue is the result of changing the style mask of the window after entering
        full screen mode. Safari adds an invisible toolbar to display the URL of the page
        which ends up breaking the layout. Having that window use a style that includes a
        titlebar fixes the bug.

        * platform/mac/WebCoreFullScreenWindow.mm:
        (-[WebCoreFullScreenWindow constrainFrameRect:toScreen:]): Ensure that the window
        can fill the entire screen including the underlapping the menu bar, so that the
        window does not resize when the animation is done.
        (-[WebCoreFullScreenWindow canBecomeMainWindow]): Borderless windows cannot become
        main by default, adding the titlebar allows it to become main, prevent this from
        happening at all to preserve the existing behavior.

2019-04-23  Chris Dumez  <cdumez@apple.com>

        [Process-Swap-On-Navigation] WebKit hangs when going back to a form submission's page due to Process-Swap-On-Navigation on iOS 12.2 and higher
        https://bugs.webkit.org/show_bug.cgi?id=197097
        <rdar://problem/50048318>

        Reviewed by Alex Christensen.

        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        If we still have a provisional item (new load has been started or we did not clear it because we're about to retry),
        then let the client know the load will continue by passing an extra flag with the didFailProvisionalLoad.

        * loader/FrameLoaderClient.h:
        * loader/FrameLoaderTypes.h:

2019-04-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [ATK] Implement AtkComponentIface scroll_to methods
        https://bugs.webkit.org/show_bug.cgi?id=196856

        Reviewed by Michael Catanzaro.

        Implement scroll_to and scroll_to_point when ATK >= 2.30.

        Fixes: accessibility/scroll-to-global-point-iframe-nested.html
               accessibility/scroll-to-global-point-iframe.html
               accessibility/scroll-to-global-point-main-window.html
               accessibility/scroll-to-global-point-nested.html
               accessibility/scroll-to-make-visible-div-overflow.html
               accessibility/scroll-to-make-visible-iframe.html
               accessibility/scroll-to-make-visible-nested-2.html
               accessibility/scroll-to-make-visible-nested.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::scrollToMakeVisible const): Add new method receiving the
        ScrollRectToVisibleOptions since ATK interface has a parameter to decide how to scroll.
        * accessibility/AccessibilityObject.h:
        * accessibility/atk/WebKitAccessibleInterfaceComponent.cpp:
        (atkToContents):
        (webkitAccessibleComponentRefAccessibleAtPoint):
        (webkitAccessibleComponentGetExtents):
        (webkitAccessibleComponentGrabFocus):
        (webkitAccessibleComponentScrollTo):
        (webkitAccessibleComponentScrollToPoint):
        (webkitAccessibleComponentInterfaceInit):
        (core): Deleted.

2019-04-22  Youenn Fablet  <youenn@apple.com>

        Update libwebrtc logging when WebCore WebRTC logging is updated
        https://bugs.webkit.org/show_bug.cgi?id=197166
        <rdar://problem/50107696>

        Unreviewed.

        Build fix after https://trac.webkit.org/changeset/244511.

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

2019-04-22  Youenn Fablet  <youenn@apple.com>

        Cache API should return Abort error in case of putting an aborted fetch
        https://bugs.webkit.org/show_bug.cgi?id=196757

        Reviewed by Darin Adler.

        In case of an aborted fetch, call consume callback with an AbortError.
        Update the code that handles load cancelling as the loader callback is called.
        Covered by rebased tests.

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::addAbortSteps):
        (WebCore::FetchResponse::BodyLoader::didFail):
        (WebCore::FetchResponse::BodyLoader::BodyLoader):
        (WebCore::FetchResponse::BodyLoader::~BodyLoader):
        (WebCore::FetchResponse::stop):
        * Modules/fetch/FetchResponse.h:

2019-04-22  Youenn Fablet  <youenn@apple.com>

        Update libwebrtc logging when WebCore WebRTC logging is updated
        https://bugs.webkit.org/show_bug.cgi?id=197166

        Reviewed by Eric Carlson.

        When updating WebRTC logging from Web Inspector, update libwebrtc logging so that no page reload is required.
        Manually tested.

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

2019-04-22  Simon Fraser  <simon.fraser@apple.com>

        Introduce the concept of "opportunistic" stacking contexts
        https://bugs.webkit.org/show_bug.cgi?id=197077

        Reviewed by Zalan Bujtas.

        Bring back a variant of some code removed in r236424, which allows a RenderLayer
        to be stacking context for painting, without actually being on in terms of CSS.
        
        Internally, RenderLayer will call setIsOpportunisticStackingContext() to make a layer
        into a stacking context for painting. External callers deal with isStackingContext()
        or isCSSStackingContext().

        Sadly we can't make m_forcedStackingContext (set on media element layers) trigger a
        non-CSS stacking context; media controls use mix-blend-mode, and rely on the fake-stacking
        media layer to be the "isolateBlending" ancestor.

        No code uses this yet.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::shouldBeCSSStackingContext const):
        (WebCore::RenderLayer::isStackingContextChanged):
        (WebCore::RenderLayer::setIsOpportunisticStackingContext):
        (WebCore::RenderLayer::setIsCSSStackingContext):
        (WebCore::RenderLayer::updateAncestorChainHasBlendingDescendants):
        (WebCore::RenderLayer::dirtyAncestorChainHasBlendingDescendants):
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::RenderLayer::calculateClipRects const):
        (WebCore::outputPaintOrderTreeLegend):
        (WebCore::outputPaintOrderTreeRecursive):
        (WebCore::RenderLayer::shouldBeStackingContext const): Deleted.
        (WebCore::RenderLayer::setIsStackingContext): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::compositingOpacity const):

2019-04-22  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Move swap chain methods from GPUDevice to GPUCanvasContext
        https://bugs.webkit.org/show_bug.cgi?id=197126

        Reviewed by Dean Jackson.

        GPUSwapChains are now configured via GPUCanvasContext instead of GPUDevice. Covers WebGPU API 
        pull request #262.

        Existing WebGPU tests updated to match.

        * Modules/webgpu/GPUCanvasContext.cpp:
        (WebCore::GPUCanvasContext::configureSwapChain):
        (WebCore::GPUCanvasContext::replaceSwapChain): Deleted.
        * Modules/webgpu/GPUCanvasContext.h:
        * Modules/webgpu/GPUCanvasContext.idl:
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createSwapChain const): Deleted.
        * Modules/webgpu/WebGPUDevice.h:
        (WebCore::WebGPUDevice::device):
        * Modules/webgpu/WebGPUDevice.idl:
        * Modules/webgpu/WebGPUSwapChainDescriptor.cpp: Copied from Source/WebCore/Modules/webgpu/WebGPUSwapChainDescriptor.h.
        (WebCore::WebGPUSwapChainDescriptor::asGPUSwapChainDescriptor const):
        * Modules/webgpu/WebGPUSwapChainDescriptor.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::setSwapChain):
        (WebCore::GPUDevice::tryCreateSwapChain const): Deleted.
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/GPUSwapChain.h:
        * platform/graphics/gpu/GPUSwapChainDescriptor.h:
        (WebCore::GPUSwapChainDescriptor::GPUSwapChainDescriptor):
        * platform/graphics/gpu/cocoa/GPUSwapChainMetal.mm:
        (WebCore::GPUSwapChain::tryCreate):

2019-04-22  Said Abou-Hallawa  <said@apple.com>

        Mark SVGStringList properties '[SameObject]' in the IDL files
        Followup to https://bugs.webkit.org/show_bug.cgi?id=197137

        Reviewed by Darin Adler.

        The SVG elements do not create tear-off wrappers for SVGStrigList DOM
        objects anymore. Instead they return Ref pointers to the same RefCounted
        objects. So they should be marked '[SameObject]' in their IDL files.

        * svg/SVGTests.idl:
        * svg/SVGViewElement.idl:

2019-04-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r244495.
        https://bugs.webkit.org/show_bug.cgi?id=197159

        Causing build failures on OpenSource and Internal bots
        (Requested by ShawnRoberts on #webkit).

        Reverted changeset:

        "WHLSLPrepare.cpp always recompiles, even if nothing was
        changed"
        https://bugs.webkit.org/show_bug.cgi?id=197151
        https://trac.webkit.org/changeset/244495

2019-04-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r241289): [GTK] accessibility/removed-continuation-element-causes-crash.html and accessibility/removed-anonymous-block-child-causes-crash.html crashes
        https://bugs.webkit.org/show_bug.cgi?id=194630

        Reviewed by Michael Catanzaro.

        Do not assume core object always has a wrapper in webkitAccessibleRefChild().

        Fixes: accessibility/removed-continuation-element-causes-crash.html
               accessibility/removed-anonymous-block-child-causes-crash.html

        * accessibility/atk/WebKitAccessible.cpp:
        (webkitAccessibleRefChild): Return early if wrapper is nullptr.

2019-04-21  Darin Adler  <darin@apple.com>

        WHLSLPrepare.cpp always recompiles, even if nothing was changed
        https://bugs.webkit.org/show_bug.cgi?id=197151

        Reviewed by Dan Bernstein.

        * DerivedSources-input.xcfilelist: Script updated this automatically after
        DerivedSources.make was corrected.
        * DerivedSources-output.xcfilelist: Ditto, although I had to manually remove
        one bogus leftover reference to WHLSLStandardLibrary.cpp.

        * DerivedSources.make: Updated the rule that builds WHSLStandardLibrary.h to
        no longer refer to nonexistent WHLSLStandardLibrary.cpp. Because the dependency
        was on a file that was never created, the rule to regenerate WHSLStandardLibrary.h
        was running on every build, instead of only when one of the dependencies changed.

2019-04-20  Said Abou-Hallawa  <said@apple.com>

        REGRESSION (r243137): SVGViewElement.viewTarget should not return a new object
        https://bugs.webkit.org/show_bug.cgi?id=197137

        Reviewed by Darin Adler.

        All the DOM objects accessing the viewTarget of the same SVGViewElement 
        should hold a Ref pointer to the same SVGStringList property.

        Test: svg/dom/SVGViewElement-viewTarget.html

        * svg/SVGViewElement.idl:

2019-04-20  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r243958): Unnecessary deactivation of AudioSession (PLT Regression)
        https://bugs.webkit.org/show_bug.cgi?id=197123
        <rdar://problem/49783264>

        Reviewed by Per Arne Vollan.

        Only set m_becameActive if we actually activated the AudioSession before starting playback. This
        avoids unnecessarily deactivating the AudioSession in processWillSuspend().

        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::sessionWillBeginPlayback):

2019-04-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: CPU: ensure that tracking stops when disconnecting Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=197115
        <rdar://problem/49877875>

        Reviewed by Joseph Pecoraro.

        * inspector/agents/InspectorCPUProfilerAgent.cpp:
        (WebCore::InspectorCPUProfilerAgent::willDestroyFrontendAndBackend):

2019-04-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION: Elements: "Inspect Element" context menu often doesn't select that element
        https://bugs.webkit.org/show_bug.cgi?id=197091
        <rdar://problem/49953728>

        Reviewed by Joseph Pecoraro.

        Delay the `inspect` event fron firing with the focued node until the frontend has had a
        chance to request the document. Otherwise, requesting the document clears the mapping of
        node-to-id, so the focused node's id would no longer be valid.

        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::focusNode):
        (WebCore::InspectorDOMAgent::didCommitLoad):

2019-04-19  John Wilander  <wilander@apple.com>

        Disable Ad Click Attribution in ephemeral sessions and make sure conversion requests use an ephemeral, stateless session
        https://bugs.webkit.org/show_bug.cgi?id=197108
        <rdar://problem/49918702>

        Reviewed by Alex Christensen.

        Tests: http/tests/adClickAttribution/conversion-disabled-in-ephemeral-session.html
               http/tests/adClickAttribution/store-disabled-in-ephemeral-session.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAdClickAttribution const):
            Early return for ephemeral sessions.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::shouldUseCredentialStorage):
            Now returns false for StoredCredentialsPolicy:EphemeralStatelessCookieless.
        * platform/network/StoredCredentialsPolicy.h:
            Added enum value EphemeralStatelessCookieless.

2019-04-19  Timothy Hatcher  <timothy@apple.com>

        Standardize the <meta name="color-scheme"> separator.
        https://bugs.webkit.org/show_bug.cgi?id=193931
        rdar://problem/49995929

        Reviewed by Darin Adler.

        Tests: css-dark-mode/color-scheme-meta.html

        * dom/Document.cpp:
        (WebCore::processColorSchemeString): Use isHTMLSpace insead of isColorSchemeSeparator and isASCIISpace.
        (WebCore::isColorSchemeSeparator): Deleted.

2019-04-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Add quirks to disable autocorrection and autocapitalization in hidden editable areas on some websites
        https://bugs.webkit.org/show_bug.cgi?id=197102
        <rdar://problem/49864669>

        Reviewed by Ryosuke Niwa.

        Add a quirk to disable autocorrection and autocapitalization in hidden editable areas.

        * page/Quirks.cpp:
        (WebCore::shouldSuppressAutocorrectionAndAutocaptializationInHiddenEditableAreasForHost):
        (WebCore::Quirks::shouldSuppressAutocorrectionAndAutocaptializationInHiddenEditableAreas const):
        * page/Quirks.h:

2019-04-18  Fujii Hironori  <Hironori.Fujii@sony.com>

        Implement KeyedDecoderGeneric and KeyedEncoderGeneric
        https://bugs.webkit.org/show_bug.cgi?id=186410

        Reviewed by Don Olmstead.

        Implemented KeyedDecoderGeneric and KeyedEncoderGeneric by using
        WTF::Persistence::Decoder and WTF::Persistence::Encoder.

        No new tests. Covered by existing tests.

        * PlatformWin.cmake: Added KeyedDecoderGeneric.cpp and
        KeyedEncoderGeneric.cpp, and removed KeyedDecoderCF.cpp and
        KeyedEncoderCF.cpp for WinCairo port.
        * platform/generic/KeyedDecoderGeneric.cpp:
        * platform/generic/KeyedDecoderGeneric.h:
        * platform/generic/KeyedEncoderGeneric.cpp:
        * platform/generic/KeyedEncoderGeneric.h:

2019-04-18  Ross Kirsling  <ross.kirsling@sony.com>

        [WinCairo] Non-unified build fails to link Tools
        https://bugs.webkit.org/show_bug.cgi?id=196866

        Reviewed by Fujii Hironori.

        * CMakeLists.txt:
        Drive-by fix -- don't disable string pooling when building WebCoreTestSupport.
        (This should have been part of r235203.)

2019-04-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r244434.
        https://bugs.webkit.org/show_bug.cgi?id=197089

        caused 1 API test failure (Requested by zalan on #webkit).

        Reverted changeset:

        "Regression (r244291): Broken API Test
        AutoLayoutRenderingProgressRelativeOrdering"
        https://bugs.webkit.org/show_bug.cgi?id=196948
        https://trac.webkit.org/changeset/244434

2019-04-18  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Make WebCore headers copies
        https://bugs.webkit.org/show_bug.cgi?id=182512
        <rdar://problem/37510435>

        Unreviewed build fix.

        Add new header from r244440.

        * Headers.cmake:

2019-04-18  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Make WebCore headers copies
        https://bugs.webkit.org/show_bug.cgi?id=182512
        <rdar://problem/37510435>

        Reviewed by Alex Christensen.

        The header copying is moved to a target WebCorePrivateFrameworkHeaders. This target was
        originally Windows only but now this is enabled for all CMake based ports.

        Enumerated all headers within WebCore that are used for WebKit(Legacy), tools and
        tests. Shared headers are within Headers.cmake while port and platform specific headers
        are in their respective CMake files. Listing out all headers is preferred because globbing
        will break the build whenever a file is added.

        All include directories within the WebCore source tree are now PRIVATE. They were
        modified to use WebCore_PRIVATE_INCLUDE_DIRECTORIES. They will not propagate to other targets
        which will prevent erroneous includes in targets dependent on WebCore.

        * CMakeLists.txt:
        * Headers.cmake: Added.
        * PlatformAppleWin.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * PlatformPlayStation.cmake:
        * PlatformWPE.cmake:
        * PlatformWin.cmake:
        * PlatformWinCairo.cmake:
        * platform/Cairo.cmake:
        * platform/Curl.cmake:
        * platform/FreeType.cmake:
        * platform/GStreamer.cmake:
        * platform/HolePunch.cmake:
        * platform/ImageDecoders.cmake:
        * platform/Soup.cmake: Added.
        * platform/TextureMapper.cmake:

2019-04-18  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Implement API default values
        https://bugs.webkit.org/show_bug.cgi?id=197032

        Reviewed by Myles C. Maxfield.

        Add default values and 'required' qualifiers recently merged to the WebGPU API.

        WebGPU tests specifying these default values have been updated to rely on them for functionality.

        * Modules/webgpu/GPUBindGroupLayoutBinding.idl:
        * Modules/webgpu/GPUBindGroupLayoutDescriptor.idl:
        * Modules/webgpu/GPUBlendDescriptor.idl:
        * Modules/webgpu/GPUBufferDescriptor.idl:
        * Modules/webgpu/GPUColor.idl:
        * Modules/webgpu/GPUColorStateDescriptor.idl:
        * Modules/webgpu/GPUDepthStencilStateDescriptor.idl:
        * Modules/webgpu/GPUExtent3D.idl:
        * Modules/webgpu/GPUInputStateDescriptor.idl:
        * Modules/webgpu/GPUOrigin3D.h:
        * Modules/webgpu/GPUOrigin3D.idl:
        * Modules/webgpu/GPURequestAdapterOptions.idl:
        * Modules/webgpu/GPUTextureDescriptor.idl:
        * Modules/webgpu/GPUVertexAttributeDescriptor.idl:
        * Modules/webgpu/GPUVertexInputDescriptor.idl:
        * Modules/webgpu/WebGPUBindGroupBinding.idl:
        * Modules/webgpu/WebGPUBindGroupDescriptor.idl:
        * Modules/webgpu/WebGPUBufferBinding.h:
        * Modules/webgpu/WebGPUBufferBinding.idl:
        * Modules/webgpu/WebGPUCommandEncoder.idl:
        * Modules/webgpu/WebGPUPipelineDescriptorBase.idl:
        * Modules/webgpu/WebGPUPipelineLayoutDescriptor.idl:
        * Modules/webgpu/WebGPUPipelineStageDescriptor.idl:
        * Modules/webgpu/WebGPURenderPassDescriptor.idl:
        * Modules/webgpu/WebGPURenderPipelineDescriptor.cpp:
        (WebCore::WebGPURenderPipelineDescriptor::tryCreateGPURenderPipelineDescriptor const):
        * Modules/webgpu/WebGPURenderPipelineDescriptor.h:
        * Modules/webgpu/WebGPURenderPipelineDescriptor.idl:
        * Modules/webgpu/WebGPUShaderModuleDescriptor.idl:
        * platform/graphics/gpu/GPUBlendDescriptor.h:
        * platform/graphics/gpu/GPUColorStateDescriptor.h:
        * platform/graphics/gpu/GPUCommandBuffer.h:
        * platform/graphics/gpu/GPUDepthStencilStateDescriptor.h:
        * platform/graphics/gpu/GPURenderPassDescriptor.h:
        * platform/graphics/gpu/GPURenderPipelineDescriptor.h:
        (WebCore::GPURenderPipelineDescriptor::GPURenderPipelineDescriptor):
        * platform/graphics/gpu/GPURequestAdapterOptions.h:
        * platform/graphics/gpu/GPUTextureDescriptor.h:
        * platform/graphics/gpu/GPUVertexAttributeDescriptor.h:
        * platform/graphics/gpu/GPUVertexInputDescriptor.h:
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::convertRenderPipelineDescriptor):
        (WebCore::trySetFunctionsForPipelineDescriptor):

2019-04-18  Jer Noble  <jer.noble@apple.com>

        Refactoring: Pull all fullscreen code out of Document and into its own helper class
        https://bugs.webkit.org/show_bug.cgi?id=197017

        Reviewed by Eric Carlson.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::matchesFullScreenPseudoClass):
        (WebCore::matchesFullScreenAnimatingFullScreenTransitionPseudoClass):
        (WebCore::matchesFullScreenDocumentPseudoClass):
        (WebCore::matchesFullScreenControlsHiddenPseudoClass):
        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        (WebCore::Document::prepareForDestruction):
        (WebCore::Document::nodeChildrenWillBeRemoved):
        (WebCore::Document::nodeWillBeRemoved):
        (WebCore::isAttributeOnAllOwners): Deleted.
        (WebCore::Document::fullScreenIsAllowedForElement const): Deleted.
        (WebCore::Document::requestFullScreenForElement): Deleted.
        (WebCore::Document::webkitCancelFullScreen): Deleted.
        (WebCore::Document::webkitExitFullscreen): Deleted.
        (WebCore::Document::webkitFullscreenEnabled const): Deleted.
        (WebCore::unwrapFullScreenRenderer): Deleted.
        (WebCore::Document::webkitWillEnterFullScreen): Deleted.
        (WebCore::Document::webkitDidEnterFullScreen): Deleted.
        (WebCore::Document::webkitWillExitFullScreen): Deleted.
        (WebCore::Document::webkitDidExitFullScreen): Deleted.
        (WebCore::Document::setFullScreenRenderer): Deleted.
        (WebCore::Document::dispatchFullScreenChangeEvents): Deleted.
        (WebCore::Document::dispatchFullScreenChangeOrErrorEvent): Deleted.
        (WebCore::Document::fullScreenElementRemoved): Deleted.
        (WebCore::Document::adjustFullScreenElementOnNodeRemoval): Deleted.
        (WebCore::Document::isAnimatingFullScreen const): Deleted.
        (WebCore::Document::setAnimatingFullScreen): Deleted.
        (WebCore::Document::areFullscreenControlsHidden const): Deleted.
        (WebCore::Document::setFullscreenControlsHidden): Deleted.
        (WebCore::Document::clearFullscreenElementStack): Deleted.
        (WebCore::Document::popFullscreenElementStack): Deleted.
        (WebCore::Document::pushFullscreenElementStack): Deleted.
        (WebCore::Document::addDocumentToFullScreenChangeEventQueue): Deleted.
        * dom/Document.h:
        (WebCore::Document::fullscreenManager):
        (WebCore::Document::webkitIsFullScreen const): Deleted.
        (WebCore::Document::webkitFullScreenKeyboardInputAllowed const): Deleted.
        (WebCore::Document::webkitCurrentFullScreenElement const): Deleted.
        (WebCore::Document::webkitCurrentFullScreenElementForBindings const): Deleted.
        (WebCore::Document::fullScreenRenderer const): Deleted.
        (WebCore::Document::webkitFullscreenElement const): Deleted.
        (WebCore::Document::webkitFullscreenElementForBindings const): Deleted.
        * dom/Document.idl:
        * dom/DocumentFullscreen.h:
        (WebCore::DocumentFullscreen::webkitFullscreenEnabled):
        (WebCore::DocumentFullscreen::webkitFullscreenElement):
        (WebCore::DocumentFullscreen::webkitExitFullscreen):
        (WebCore::DocumentFullscreen::webkitIsFullScreen):
        (WebCore::DocumentFullscreen::webkitFullScreenKeyboardInputAllowed):
        (WebCore::DocumentFullscreen::webkitCurrentFullScreenElement):
        (WebCore::DocumentFullscreen::webkitCancelFullScreen):
        * dom/DocumentFullscreen.idl:
        * dom/Element.cpp:
        (WebCore::Element::webkitRequestFullscreen):
        * dom/EventPath.cpp:
        (WebCore::shouldEventCrossShadowBoundary):
        * dom/FullscreenManager.cpp: Added.
        (WebCore::isAttributeOnAllOwners):
        (WebCore::FullscreenManager::FullscreenManager):
        (WebCore::FullscreenManager::fullscreenIsAllowedForElement const):
        (WebCore::FullscreenManager::requestFullscreenForElement):
        (WebCore::FullscreenManager::cancelFullscreen):
        (WebCore::FullscreenManager::requestExitFullscreen):
        (WebCore::FullscreenManager::exitFullscreen):
        (WebCore::FullscreenManager::isFullscreenEnabled const):
        (WebCore::unwrapFullscreenRenderer):
        (WebCore::FullscreenManager::willEnterFullscreen):
        (WebCore::FullscreenManager::didEnterFullscreen):
        (WebCore::FullscreenManager::willExitFullscreen):
        (WebCore::FullscreenManager::didExitFullscreen):
        (WebCore::FullscreenManager::setFullscreenRenderer):
        (WebCore::FullscreenManager::dispatchFullscreenChangeEvents):
        (WebCore::FullscreenManager::dispatchFullscreenChangeOrErrorEvent):
        (WebCore::FullscreenManager::fullscreenElementRemoved):
        (WebCore::FullscreenManager::adjustFullscreenElementOnNodeRemoval):
        (WebCore::FullscreenManager::isAnimatingFullscreen const):
        (WebCore::FullscreenManager::setAnimatingFullscreen):
        (WebCore::FullscreenManager::areFullscreenControlsHidden const):
        (WebCore::FullscreenManager::setFullscreenControlsHidden):
        (WebCore::FullscreenManager::clear):
        (WebCore::FullscreenManager::emptyEventQueue):
        (WebCore::FullscreenManager::clearFullscreenElementStack):
        (WebCore::FullscreenManager::popFullscreenElementStack):
        (WebCore::FullscreenManager::pushFullscreenElementStack):
        (WebCore::FullscreenManager::addDocumentToFullscreenChangeEventQueue):
        * dom/FullscreenManager.h: Added.
        (WebCore::FullscreenManager::document):
        (WebCore::FullscreenManager::document const):
        (WebCore::FullscreenManager::topDocument const):
        (WebCore::FullscreenManager::page const):
        (WebCore::FullscreenManager::frame const):
        (WebCore::FullscreenManager::documentElement const):
        (WebCore::FullscreenManager::hasLivingRenderTree const):
        (WebCore::FullscreenManager::pageCacheState const):
        (WebCore::FullscreenManager::scheduleFullStyleRebuild):
        (WebCore::FullscreenManager::fullscreenElement const):
        (WebCore::FullscreenManager::isFullscreen const):
        (WebCore::FullscreenManager::isFullscreenKeyboardInputAllowed const):
        (WebCore::FullscreenManager::currentFullscreenElement const):
        (WebCore::FullscreenManager::fullscreenRenderer const):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isFullscreen const):
        (WebCore::HTMLMediaElement::isStandardFullscreen const):
        (WebCore::HTMLMediaElement::enterFullscreen):
        (WebCore::HTMLMediaElement::exitFullscreen):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::canShowControlsManager const):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlFullscreenButtonElement::defaultEventHandler):
        * inspector/agents/InspectorDOMAgent.cpp:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::isKeyEventAllowedInFullScreen const):
        (WebCore::EventHandler::internalKeyEvent):
        * page/Page.cpp:
        (WebCore::Page::setFullscreenControlsHidden):
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreen::wrapNewRenderer):
        (WebCore::RenderFullScreen::wrapExistingRenderer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::isDescendantOfFullScreenLayer):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderInline.cpp:
        (WebCore::RenderTreeBuilder::Inline::splitInlines):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::createRenderer):
        * style/StyleSharingResolver.cpp:
        (WebCore::Style::SharingResolver::canShareStyleWithElement const):
        * testing/Internals.cpp:
        (WebCore::Internals::webkitWillEnterFullScreenForElement):
        (WebCore::Internals::webkitDidEnterFullScreenForElement):
        (WebCore::Internals::webkitWillExitFullScreenForElement):
        (WebCore::Internals::webkitDidExitFullScreenForElement):
        (WebCore::Internals::isAnimatingFullScreen const):

2019-04-18  Jer Noble  <jer.noble@apple.com>

        Add support for parsing FairPlayStreaming PSSH boxes.
        https://bugs.webkit.org/show_bug.cgi?id=197064

        Reviewed by Eric Carlson.

        API Tests: ISO.ISOFairPlayStreamingPsshBox

        Add a new set of ISOBox classes for parsing the contents of a FairPlayStreaming PSSH box,
        and add support for this new box to CDMFairPlayStreaming.

        Drive-by fix: add an explicit include for MainThread.h to LibWebRTCProviderCocoa.cpp.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FourCC.h:
        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        (WebCore::CDMPrivateFairPlayStreaming::cencName):
        (WebCore::fairPlaySystemID):
        (WebCore::extractSchemeAndKeyIdFromCenc):
        (WebCore::CDMPrivateFairPlayStreaming::extractKeyIDsCenc):
        (WebCore::CDMPrivateFairPlayStreaming::sanitizeCenc):
        (WebCore::validInitDataTypes):
        (WebCore::CDMFactory::platformRegisterFactories):
        * platform/graphics/avfoundation/CDMFairPlayStreaming.h:
        * platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.cpp: Added.
        (WebCore::ISOFairPlayStreamingPsshBox::fairPlaySystemID):
        (WebCore::ISOFairPlayStreamingInfoBox::parse):
        (WebCore::ISOFairPlayStreamingKeyRequestInfoBox::parse):
        (WebCore::ISOFairPlayStreamingKeyAssetIdBox::parse):
        (WebCore::ISOFairPlayStreamingKeyContextBox::parse):
        (WebCore::ISOFairPlayStreamingKeyVersionListBox::parse):
        (WebCore::ISOFairPlayStreamingKeyRequestBox::parse):
        (WebCore::ISOFairPlayStreamingInitDataBox::parse):
        (WebCore::ISOFairPlayStreamingPsshBox::parse):
        * platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h: Added.
        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:

2019-04-18  Sihui Liu  <sihui_liu@apple.com>

        Blob type cannot be stored correctly in IDB when IDBObjectStore has autoIncrement and keyPath options
        https://bugs.webkit.org/show_bug.cgi?id=196128
        <rdar://problem/49562115>

        Reviewed by Geoffrey Garen.

        If a key is auto-generated, it should become a property of the value object. Network process would perform the 
        key injection by deserializing IDBValue into script value, setting the property, serializing the result and 
        storing it in a database record. But network process does not have a JSDOMGlobalObject, so it would fail to 
        deserialize types including Blob and File.

        To solve this issue, we move the key injection to web process and let network process store the original value 
        it gets. In this case, when web process asks for some value, network process should return key, value and key 
        path so that web process can decide whether it should perform a key injection before returning the result. Note
        that the auto-generated key would always be stored as the key in a ObjectStore record.

        Test: storage/indexeddb/modern/objectstore-autoincrement-types.html

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::setGetResult):
        * Modules/indexeddb/IDBCursor.h:
        (WebCore::IDBCursor::primaryKeyPath):
        * Modules/indexeddb/IDBGetAllResult.cpp:
        (WebCore::IDBGetAllResult::isolatedCopy):
        (WebCore::IDBGetAllResult::addKey):
        (WebCore::IDBGetAllResult::addValue):
        (WebCore::IDBGetAllResult::keys const):
        (WebCore::IDBGetAllResult::values const):
        (WebCore::IDBGetAllResult::allBlobFilePaths const):
        (WebCore::isolatedCopyOfVariant): Deleted.

        * Modules/indexeddb/IDBGetAllResult.h: Introduce an IDBKeyPath parameter. Also replace Variant with two Vectors,
        because we only needed to store either key or value before, and now the stored value could be incomplete.
        (WebCore::IDBGetAllResult::IDBGetAllResult):
        (WebCore::IDBGetAllResult::keyPath const):
        (WebCore::IDBGetAllResult::encode const):
        (WebCore::IDBGetAllResult::decode):

        * Modules/indexeddb/IDBGetResult.cpp:
        (WebCore::IDBGetResult::setValue):
        * Modules/indexeddb/IDBGetResult.h:
        (WebCore::IDBGetResult::IDBGetResult):
        (WebCore::IDBGetResult::keyPath const):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::setResult):
        (WebCore::IDBRequest::setResultToStructuredClone):
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::didGetAllRecordsOnServer):
        (WebCore::IDBTransaction::didGetRecordOnServer):
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::getRecord):
        * Modules/indexeddb/server/MemoryIndex.cpp:
        (WebCore::IDBServer::MemoryIndex::getResultForKeyRange const):
        (WebCore::IDBServer::MemoryIndex::getAllRecords const):
        * Modules/indexeddb/server/MemoryIndexCursor.cpp:
        (WebCore::IDBServer::MemoryIndexCursor::currentData):
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::updateIndexesForPutRecord):
        (WebCore::IDBServer::MemoryObjectStore::populateIndexWithExistingRecords):
        (WebCore::IDBServer::MemoryObjectStore::getAllRecords const):
        * Modules/indexeddb/server/MemoryObjectStoreCursor.cpp:
        (WebCore::IDBServer::MemoryObjectStoreCursor::currentData):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::updateOneIndexForAddRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::updateAllIndexesForAddRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::cachedStatementForGetAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllIndexRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetIndexRecordForOneKey):
        (WebCore::IDBServer::SQLiteIDBBackingStore::openCursor):
        (WebCore::IDBServer::SQLiteIDBBackingStore::iterateCursor):
        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::currentData):
        * Modules/indexeddb/server/SQLiteIDBCursor.h:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:

        (WebCore::IDBServer::UniqueIDBDatabase::performPutOrAdd): Remove the key injection from network process. 
        UniqueIDBDatabase stores any value it gets from IDBClient.

        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::getResultRef):
        * Modules/indexeddb/shared/IDBResultData.h:

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::injectIDBKeyIntoScriptValue): If property is read-only, set would fail and injectKeyIntoResult would
        return null, but we expect it to return result as long as the property value is the same as target. Therefore, 
        we can add an early return here.

        (WebCore::createKeyPathArray):
        (WebCore::generateIndexKeyForValue): We used to generate IndexKey from value stored in database but now the
        value gets stored does not include auto-generated key, as we remove the key injection from network process. In 
        this case if the IDBIndex has the same key path as the auto-generated key, IndexKey would be failed to create
        for it cannot extract auto-generated key from value. Since the auto-generated key would always be the key in 
        database record, we could use value of that key when we find a match in key path.

        (WebCore::deserializeIDBValueWithKeyInjection): If the key path in the result is single entry, the key is 
        probably auto-generated, so we could inject the result key into the result value unconditionally.

        * bindings/js/IDBBindingUtilities.h:
        * bindings/js/JSIDBCursorWithValueCustom.cpp:
        (WebCore::JSIDBCursorWithValue::value const):
        * bindings/js/JSIDBRequestCustom.cpp:
        (WebCore::JSIDBRequest::result const):

2019-04-18  Zalan Bujtas  <zalan@apple.com>

        Regression (r244291): Broken API Test AutoLayoutRenderingProgressRelativeOrdering
        https://bugs.webkit.org/show_bug.cgi?id=196948
        <rdar://problem/49927131>

        Reviewed by Tim Horton.

        * page/FrameView.cpp:
        (WebCore::FrameView::setContentsSize):
        (WebCore::FrameView::autoSizeIfEnabled):
        * page/FrameView.h:

2019-04-18  Shawn Roberts  <sroberts@apple.com>

        Unreviewed manual rollout of r244248 and r244409
        Causing assertion failures on Mac WK2 Debug builds
        https://bugs.webkit.org/show_bug.cgi?id=195623

        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::prefetchIfNeeded):
        * loader/ResourceLoadInfo.cpp:
        (WebCore::toResourceType):
        * loader/ResourceLoadInfo.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequestInternal):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

2019-04-18  Antti Koivisto  <antti@apple.com>

        Tile update problems in iframe after scrolling page too soon after load
        https://bugs.webkit.org/show_bug.cgi?id=197057
        <rdar://problem/49913663>

        Reviewed by Simon Fraser.

        We end up destroying FrameHosting scrolling node when we shouldn't.

        No test, despite attempts I couldn't get this state to stick. The problem is that in
        most cases the destroying scrolling node gets immediately recreated and connected again.
        Getting into testably buggy state requires some very specific layer tree configuration update.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::detachFromScrollingCoordinator):

        Test the right thing.

2019-04-18  Antoine Quint  <graouts@apple.com>

        [Pointer Events WPT] Unskip imported/w3c/web-platform-tests/pointerevents/pointerevent_lostpointercapture_for_disconnected_node.html
        https://bugs.webkit.org/show_bug.cgi?id=197004

        Reviewed by Antti Koivisto.

        We need to release pointer capture when an element that has pointer capture is disconnected from the DOM.

        * dom/Element.cpp:
        (WebCore::Element::removedFromAncestor): Notify the PointerCaptureController that an element was disconnected.
        * dom/PointerEvent.cpp:
        (WebCore::PointerEvent::create): Broaden createPointerCancelEvent() to take in an event type so that we may use it to create a
        lostpointercapture event as well.
        (WebCore::PointerEvent::createPointerCancelEvent): Deleted.
        * dom/PointerEvent.h:
        * page/PointerCaptureController.cpp:
        (WebCore::PointerCaptureController::elementWasRemoved): Check whether the provided element matches one of the target overrides recorded
        in the map of captured pointer IDs.
        (WebCore::PointerCaptureController::pointerEventWasDispatched): This block of code was actually useless in this location, the new code
        added in elementWasRemoved() performs the actions that the spec text mandates.
        (WebCore::PointerCaptureController::cancelPointer): Replace the call to createPointerCancelEvent() with one to create().
        * page/PointerCaptureController.h:

2019-04-17  Antoine Quint  <graouts@apple.com>

        [Pointer Events WPT] Unskip imported/w3c/web-platform-tests/pointerevents/pointerevent_on_event_handlers.html
        https://bugs.webkit.org/show_bug.cgi?id=197006

        Reviewed by Antti Koivisto.

        Add support for on* HTML attributes and JS properties for pointer events.

        * dom/GlobalEventHandlers.idl:
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createEventHandlerNameMap):

2019-04-17  Timothy Hatcher  <timothy@apple.com>

        Standardize the `<meta name="color-scheme">` separator.
        https://bugs.webkit.org/show_bug.cgi?id=193931

        Reviewed by Simon Fraser.

        Drop support for comma as a valid seperator in <meta name="color-scheme"> to
        match the proposal being tracked by: https://github.com/whatwg/html/issues/4504

        Tests: css-dark-mode/color-scheme-meta.html
               css-dark-mode/older-syntax/supported-color-schemes-meta.html

        * dom/Document.cpp:
        (WebCore::isColorSchemeSeparator): Drop support for comma.

2019-04-17  Timothy Hatcher  <timothy@apple.com>

        Rename `supported-color-schemes` to `color-scheme`.
        https://bugs.webkit.org/show_bug.cgi?id=197016
        rdar://problem/49980259

        Reviewed by Simon Fraser.

        Changed `supported-color-schemes` to `color-scheme` to follow the spec changes
        being tracked by: https://github.com/w3c/csswg-drafts/issues/3807

        The old `supported-color-schemes` is now an alias of `color-scheme` for compatibility.

        Tests: css-dark-mode/color-scheme-css-parse.html
               css-dark-mode/color-scheme-css.html
               css-dark-mode/color-scheme-meta.html
               css-dark-mode/color-scheme-priority.html
               css-dark-mode/color-scheme-scrollbar.html
               css-dark-mode/older-syntax/supported-color-schemes-css.html
               css-dark-mode/older-syntax/supported-color-schemes-meta.html
               css-dark-mode/older-systems/color-scheme-css.html
               css-dark-mode/older-systems/color-scheme-meta.html

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::updateColorScheme):
        (WebCore::StyleBuilderConverter::convertColorScheme):
        (WebCore::StyleBuilderConverter::updateSupportedColorSchemes): Deleted.
        (WebCore::StyleBuilderConverter::convertSupportedColorSchemes): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueColorScheme):
        (WebCore::StyleBuilderCustom::applyValueSupportedColorSchemes): Deleted.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyMatchedProperties):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeColorScheme):
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::consumeSupportedColorSchemes): Deleted.
        * dom/Document.cpp:
        (WebCore::processColorSchemeString):
        (WebCore::Document::processColorScheme):
        (WebCore::Document::useDarkAppearance const):
        (WebCore::processColorSchemes): Deleted.
        (WebCore::Document::processSupportedColorSchemes): Deleted.
        * dom/Document.h:
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::process):
        * page/FrameView.cpp:
        (WebCore::FrameView::rendererForColorScheme const):
        (WebCore::FrameView::useDarkAppearance const):
        (WebCore::FrameView::styleColorOptions const):
        (WebCore::FrameView::rendererForSupportedColorSchemes const): Deleted.
        * page/FrameView.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::rareInheritedDataChangeRequiresRepaint):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::colorScheme const):
        (WebCore::RenderStyle::setHasExplicitlySetColorScheme):
        (WebCore::RenderStyle::hasExplicitlySetColorScheme const):
        (WebCore::RenderStyle::setColorScheme):
        (WebCore::RenderStyle::initialColorScheme):
        (WebCore::RenderStyle::NonInheritedFlags::operator== const):
        (WebCore::RenderStyle::supportedColorSchemes const): Deleted.
        (WebCore::RenderStyle::setHasExplicitlySetSupportedColorSchemes): Deleted.
        (WebCore::RenderStyle::hasExplicitlySetSupportedColorSchemes const): Deleted.
        (WebCore::RenderStyle::setSupportedColorSchemes): Deleted.
        (WebCore::RenderStyle::initialSupportedColorSchemes): Deleted.
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleColorScheme.h: Renamed from Source/WebCore/rendering/style/StyleSupportedColorSchemes.h.
        (WebCore::StyleColorScheme::StyleColorScheme):
        (WebCore::StyleColorScheme::operator== const):
        (WebCore::StyleColorScheme::operator!= const):
        (WebCore::StyleColorScheme::isAuto const):
        (WebCore::StyleColorScheme::isOnly const):
        (WebCore::StyleColorScheme::colorScheme const):
        (WebCore::StyleColorScheme::add):
        (WebCore::StyleColorScheme::contains const):
        (WebCore::StyleColorScheme::setAllowsTransformations):
        (WebCore::StyleColorScheme::allowsTransformations const):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        * rendering/style/StyleRareInheritedData.h:

2019-04-17  Justin Fan  <justin_fan@apple.com>

        [Web GPU] GPUComputePassEncoder::dispatch number of thread groups, not grid size
        https://bugs.webkit.org/show_bug.cgi?id=196984

        Reviewed by Myles C. Maxfield.

        Test: Updated compute-squares.html.

        * platform/graphics/gpu/cocoa/GPUComputePassEncoderMetal.mm:
        (WebCore::GPUComputePassEncoder::dispatch):

2019-04-17  Andy Estes  <aestes@apple.com>

        [iOS] Support multiple file selection in UIDocumentPickerViewController
        https://bugs.webkit.org/show_bug.cgi?id=197014
        <rdar://problem/49963514>

        Reviewed by Tim Horton.

        * platform/LocalizedStrings.h:
        Exported multipleFileUploadText().

2019-04-17  John Wilander  <wilander@apple.com>

        Add prioritization of ad click conversions and cleaning of sent ad click conversions
        https://bugs.webkit.org/show_bug.cgi?id=196934
        <rdar://problem/49917773>

        Reviewed by Chris Dumez.

        Tests: http/tests/adClickAttribution/second-attribution-converted-with-higher-priority.html
               http/tests/adClickAttribution/second-attribution-converted-with-lower-priority.html
               http/tests/adClickAttribution/second-conversion-with-higher-priority.html
               http/tests/adClickAttribution/second-conversion-with-lower-priority.html

        * loader/AdClickAttribution.cpp:
        (WebCore::AdClickAttribution::hasHigherPriorityThan const):
            Added to facilitate priority comparison between two attributions.
        * loader/AdClickAttribution.h:
        (WebCore::AdClickAttribution::Destination::Destination):
            Added a WTF::HashTableDeletedValueType constructor and changed the copy constructor to
            a move constructor.
        (WebCore::AdClickAttribution::isEmpty const):

2019-04-17  Devin Rousso  <drousso@apple.com>

        AX: AccessibilityObject::parentObject() doesn't need to be pure virtual
        https://bugs.webkit.org/show_bug.cgi?id=197026
        <rdar://problem/49448209>

        Reviewed by Timothy Hatcher.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::parentObject const):

2019-04-17  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Use aria role as a hint whether a tap should result in a synthetic click
        https://bugs.webkit.org/show_bug.cgi?id=196988
        <rdar://problem/49955328>

        Reviewed by Simon Fraser.

        Test: fast/events/touch/ios/content-observation/tap-on-input-looking-div-with-role.html

        * accessibility/AccessibilityObject.h:

2019-04-17  Alex Christensen  <achristensen@webkit.org>

        WebSocketHandshake should not know about a Document
        https://bugs.webkit.org/show_bug.cgi?id=196468

        Reviewed by Tim Horton.

        I'll need to move WebSocketHandshake to the NetworkProcess for rdar://problem/46287028
        It currently uses the Document pointer for 3 things:
        1. To get the user agent, which we can pass in as a creation parameter.
        2. To get the origin, which we can also pass in as a creation parameter.
        3. To get cookies for the web inspector.  We can pass in a functor instead and have the inspector provide cookies itself.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect):
        (WebCore::WebSocketChannel::disconnect):
        (WebCore::WebSocketChannel::didOpenSocketStream):
        (WebCore::WebSocketChannel::clientHandshakeRequest):
        * Modules/websockets/WebSocketChannel.h:
        (WebCore::WebSocketChannel::document):
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::WebSocketHandshake):
        (WebCore::WebSocketHandshake::clientHandshakeMessage const):
        (WebCore::WebSocketHandshake::clientHandshakeRequest const):
        (WebCore::WebSocketHandshake::clientOrigin const): Deleted.
        (WebCore::WebSocketHandshake::clientHandshakeCookieRequestHeaderFieldProxy const): Deleted.
        (WebCore::WebSocketHandshake::clearDocument): Deleted.
        * Modules/websockets/WebSocketHandshake.h:
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::enable):

2019-04-17  Timothy Hatcher  <timothy@apple.com>

        Unreviewed build fix for iOSMac after r244223.

        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::routeSharingPolicy const): Add ALLOW_DEPRECATED_DECLARATIONS_BEGIN/END
        around AVAudioSessionRouteSharingPolicyLongForm use.

2019-04-17  Chris Dumez  <cdumez@apple.com>

        Remember device orientation permission for the duration of the browsing session
        https://bugs.webkit.org/show_bug.cgi?id=196992
        <rdar://problem/49946067>

        Reviewed by Alex Christensen.

        Use DeviceOrientationOrMotionPermissionState type more consistently in the code base
        instead of bool or Optional<bool>. Added "Prompt" value to this enumeration which is the
        default state and which indicates we should ask the client.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/DeviceOrientationAndMotionAccessController.cpp:
        (WebCore::DeviceOrientationAndMotionAccessController::DeviceOrientationAndMotionAccessController):
        (WebCore::DeviceOrientationAndMotionAccessController::shouldAllowAccess):
        * dom/DeviceOrientationAndMotionAccessController.h:
        (WebCore::DeviceOrientationAndMotionAccessController::accessState const):
        * dom/DeviceOrientationOrMotionEvent.cpp:
        (WebCore::DeviceOrientationOrMotionEvent::requestPermission):
        * dom/DeviceOrientationOrMotionPermissionState.h:
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::deviceOrientationAndMotionAccessState const):
        (WebCore::DocumentLoader::setDeviceOrientationAndMotionAccessState):
        * page/ChromeClient.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::isAllowedToAddDeviceMotionOrientationListener const):

2019-04-17  Rob Buis  <rbuis@igalia.com>

        XMLHttpRequest has the wrong fallback encoding
        https://bugs.webkit.org/show_bug.cgi?id=191741

        Reviewed by Alex Christensen.

        Allow overriding the response charset as specified here:
        https://xhr.spec.whatwg.org/#final-charset

        Behavior matches Firefox and Chrome.

        Tests: imported/w3c/web-platform-tests/encoding/replacement-encodings.any.html
               imported/w3c/web-platform-tests/encoding/replacement-encodings.any.worker.html
               imported/w3c/web-platform-tests/encoding/unsupported-encodings.any.html
               imported/w3c/web-platform-tests/encoding/unsupported-encodings.any.worker.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::finalResponseCharset const):
        (WebCore::XMLHttpRequest::createDecoder const):
        * xml/XMLHttpRequest.h:

2019-04-16  Antoine Quint  <graouts@apple.com>

        Opt Google Maps into simulated mouse events dispatch quirk
        https://bugs.webkit.org/show_bug.cgi?id=196965
        <rdar://problem/49934766>

        Reviewed by Dean Jackson.

        Use the correct Google Maps path.

        * page/Quirks.cpp:
        (WebCore::Quirks::shouldDispatchSimulatedMouseEvents const):

2019-04-16  Antoine Quint  <graouts@apple.com>

        Opt flipkart.com into simulated mouse events dispatch quirk
        https://bugs.webkit.org/show_bug.cgi?id=196961
        <rdar://problem/49648520>

        Reviewed by Dean Jackson.

        * page/Quirks.cpp:
        (WebCore::Quirks::shouldDispatchSimulatedMouseEvents const):

2019-04-16  Antoine Quint  <graouts@apple.com>

        Opt MSN.com into simulated mouse events dispatch quirk
        https://bugs.webkit.org/show_bug.cgi?id=196960
        <rdar://problem/49403260>

        Reviewed by Dean Jackson.

        * page/Quirks.cpp:
        (WebCore::Quirks::shouldDispatchSimulatedMouseEvents const):

2019-04-16  Zan Dobersek  <zdobersek@igalia.com>

        ScalableImageDecoder: don't forcefully decode image data when querying frame completeness, duration
        https://bugs.webkit.org/show_bug.cgi?id=191354
        <rdar://problem/46123406>

        Reviewed by Michael Catanzaro.

        ScalableImageDecoder::frameIsCompleteAtIndex() should only check the
        index validity and, if the index is valid, check for completeness of the
        corresponding frame. ScalableImageDecoder::frameDurationAtIndex() should
        also only retrieve duration for already-complete frames, or expand the
        default 0-second value according to the flashing-protection rule when
        the target frame is not yet complete.

        Both methods avoid calling ScalableImageDecoder::frameBufferAtIndex()
        as that method goes on and decodes image data to determine specific
        information. The ImageSource class that's querying this information
        doesn't anticipate this, and doesn't handle the increased memory
        consumption of the decoded data, leaving MemoryCache in the blind about
        the image resource's actual amount of consumed memory. ImageSource can
        instead gracefully handle any incomplete frame by marking the decoding
        status for this frame as only partial.

        * platform/image-decoders/ScalableImageDecoder.cpp:
        (WebCore::ScalableImageDecoder::frameIsCompleteAtIndex const):
        (WebCore::ScalableImageDecoder::frameHasAlphaAtIndex const):
        (WebCore::ScalableImageDecoder::frameDurationAtIndex const):

2019-04-16  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed non-unified build fix after r244307.

        * page/DiagnosticLoggingClient.h:

2019-04-16  Chris Dumez  <cdumez@apple.com>

        URL set by document.open() is not communicated to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=196941
        <rdar://problem/49237544>

        Reviewed by Geoff Garen.

        Notify the FrameLoaderClient whenever an explicit open was done and provide it with
        the latest document URL.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didExplicitOpen):
        * loader/FrameLoaderClient.h:

2019-04-16  Timothy Hatcher  <timothy@apple.com>

        FrameView base background color always starts white.
        https://bugs.webkit.org/show_bug.cgi?id=196976

        Reviewed by Beth Dakin.

        * page/FrameView.cpp:
        (WebCore::FrameView::setBaseBackgroundColor): Bail early if the base background
        color did not change.

2019-04-16  Devin Rousso  <drousso@apple.com>

        Unprefix -webkit-sticky
        https://bugs.webkit.org/show_bug.cgi?id=196962
        <rdar://problem/40903458>

        Reviewed by Simon Fraser.

        Updated existing tests.

        This change doesn't modify functionality, only exposing a new unprefixed CSS value.

        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator PositionType const):

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::convertPositionStyle):

2019-04-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r244321.
        https://bugs.webkit.org/show_bug.cgi?id=196968

        Causing all WK2 Debug builds to exit early after Assertion
        failures. (Requested by ShawnRoberts on #webkit).

        Reverted changeset:

        "URL set by document.open() is not communicated to the
        UIProcess"
        https://bugs.webkit.org/show_bug.cgi?id=196941
        https://trac.webkit.org/changeset/244321

2019-04-16  Caitlin Potter  <caitp@igalia.com>

        [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames()
        https://bugs.webkit.org/show_bug.cgi?id=176810

        Reviewed by Saam Barati.

        Previously, there was a comment here indicating uncertainty of whether it
        was necessary to filter DontEnum properties explicitly or not. It turns
        out that it was necessary in the case of JSC ProxyObjects.

        This patch adds DontEnum filtering for ProxyObjects, however we continue
        to explicitly filter them in JSDOMConvertRecord, which needs to use the
        property descriptor after filtering. This change prevents observably
        fetching the property descriptor twice per property.

        * bindings/js/JSDOMConvertRecord.h:

2019-04-15  Antoine Quint  <graouts@apple.com>

        [iOS] Redundant pointer events causes material design buttons to flush twice
        https://bugs.webkit.org/show_bug.cgi?id=196914
        <rdar://problem/49571860>

        Reviewed by Dean Jackson.

        Test: pointerevents/ios/pointer-event-order.html

        Do not dispatch pointer events for mouse events on iOS since we're already dispatching them when processing touch events.

        * dom/Element.cpp:
        (WebCore::Element::dispatchMouseEvent):

2019-04-15  John Wilander  <wilander@apple.com>

        Add a query string nonce to LayoutTests/http/tests/adClickAttribution/send-attribution-conversion-request.html to address flakiness
        https://bugs.webkit.org/show_bug.cgi?id=196955

        Unreviewed test gardening. The WebCore change is only in a dedicated
        test function.

        No new tests. Existing test updated.

        * loader/AdClickAttribution.cpp:
        (WebCore::AdClickAttribution::urlForTesting const):
            Now preserves the query string in the test URL.

2019-04-15  Chris Dumez  <cdumez@apple.com>

        URL set by document.open() is not communicated to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=196941
        <rdar://problem/49237544>

        Reviewed by Geoffrey Garen.

        Notify the FrameLoaderClient whenever an explicit open was done and provide it with
        the latest document URL.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didExplicitOpen):
        * loader/FrameLoaderClient.h:

2019-04-15  Eike Rathke  <erack@redhat.com>

        Fix logic flow for error log
        https://bugs.webkit.org/show_bug.cgi?id=196933

        Reviewed by Alexey Proskuryakov.

        Missing block braces logged an error always, not just
        if (actionIfInvalid == Complain).

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isSafeToLoadURL):

2019-04-15  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] FontPlatformData objects aren't cached at all when using font-family:system-ui
        https://bugs.webkit.org/show_bug.cgi?id=196846
        <rdar://problem/49499971>

        Reviewed by Simon Fraser and Darin Adler.

        When adding the special codepath for system-ui to behave as an entire list of fonts rather than a single item,
        I never added a cache for the FontPlatformData objects that codepath creates. The non-system-ui codepath already
        has a cache in fontPlatformDataCache() in FontCache.cpp.

        This patch causes a 16.8x performance improvement on the attached benchmark.

        Test: PerformanceTests/Layout/system-ui-rebuild-emoji.html

        * page/cocoa/MemoryReleaseCocoa.mm:
        (WebCore::platformReleaseMemory):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::invalidateFontCache):
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.cpp:
        (WebCore::FontFamilySpecificationKey::FontFamilySpecificationKey):
        (WebCore::FontFamilySpecificationKey::operator== const):
        (WebCore::FontFamilySpecificationKey::operator!= const):
        (WebCore::FontFamilySpecificationKey::isHashTableDeletedValue const):
        (WebCore::FontFamilySpecificationKey::computeHash const):
        (WebCore::FontFamilySpecificationKeyHash::hash):
        (WebCore::FontFamilySpecificationKeyHash::equal):
        (WebCore::fontMap):
        (WebCore::clearFontFamilySpecificationCoreTextCache):
        (WebCore::FontFamilySpecificationCoreText::fontRanges const):
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.h:
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        (WebCore::safeCFEqual): Deleted.

2019-04-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: fake value descriptors for promises add a catch handler, preventing "rejectionhandled" events from being fired
        https://bugs.webkit.org/show_bug.cgi?id=196484
        <rdar://problem/49114725>

        Reviewed by Joseph Pecoraro.

        Test: inspector/runtime/promise-native-getter.html

        Mark errors created from getters as being `isNativeGetterTypeError`.

        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::throwGetterTypeError):
        (WebCore::rejectPromiseWithGetterTypeError):
        (WebCore::rejectPromiseWithThisTypeError):

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::makeGetterTypeErrorForBuiltins):

        * bindings/js/JSDOMPromiseDeferred.h:
        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::createRejectedPromiseWithTypeError):

        * Modules/streams/WritableStream.js:
        (getter.closed):
        (getter.ready):

2019-04-15  Jer Noble  <jer.noble@apple.com>

        Add a DiagnosticLogging method taking an arbitrary dictionary of values.
        https://bugs.webkit.org/show_bug.cgi?id=196773

        Reviewed by Alex Christensen.

        * page/DiagnosticLoggingClient.h:

2019-04-15  Justin Fan  <justin_fan@apple.com>

        Let WTF::convertSafely deduce types from arguments.

        Reviewer's (Darin Adler) follow-up to https://bugs.webkit.org/show_bug.cgi?id=196793.

        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::tryCreate):
        * platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm:
        (WebCore::GPUCommandBuffer::copyBufferToTexture):
        (WebCore::GPUCommandBuffer::copyTextureToBuffer):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::trySetInputStateForPipelineDescriptor):

2019-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        Throw TypeError when custom element constructor returns a wrong element or tries to create itself
        https://bugs.webkit.org/show_bug.cgi?id=196892

        Reviewed by Dean Jackson.

        Throw TypeError instead of InvalidStateError for consistency. This updates WebKit's custom elements
        implementation for https://github.com/whatwg/html/pull/4525.

        Tests: imported/w3c/web-platform-tests/custom-elements/upgrading/Node-cloneNode.html
               imported/w3c/web-platform-tests/custom-elements/upgrading/upgrading-parser-created-element.html

        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::JSCustomElementInterface::upgradeElement):
        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore::constructJSHTMLElement):

2019-04-15  Don Olmstead  <don.olmstead@sony.com>

        [CMake] WebCore derived sources should only be referenced inside WebCore
        https://bugs.webkit.org/show_bug.cgi?id=196904

        Reviewed by Konstantin Tokarev.

        Use WebCore_DERIVED_SOURCES_DIR instead of DERIVED_SOURCES_WEBCORE_DIR.

        * CMakeLists.txt:
        * PlatformGTK.cmake:
        * PlatformWin.cmake:
        * WebCoreMacros.cmake:

2019-04-15  John Wilander  <wilander@apple.com>

        Send delayed Ad Click Attribution conversion requests to the click source
        https://bugs.webkit.org/show_bug.cgi?id=196838
        <rdar://problem/47650157>

        Reviewed by Chris Dumez and Youenn Fablet.

        WebCore::AdClickAttribution now:
        - Sets m_earliestTimeToSend correctly based on WallTime::now().
        - Allows for a test override of the base URL for conversions.
        - Holds state for whether or not a conversion request has been sent.
        - Outputs m_earliestTimeToSend and m_conversion->hasBeenSent in toString().
        - Returns m_earliestTimeToSend as a result of a call to
        convertAndGetEarliestTimeToSend() which used to be called setConversion().

        Test: http/tests/adClickAttribution/send-attribution-conversion-request.html

        * loader/AdClickAttribution.cpp:
        (WebCore::AdClickAttribution::convertAndGetEarliestTimeToSend):
        (WebCore::AdClickAttribution::url const):
        (WebCore::AdClickAttribution::urlForTesting const):
        (WebCore::AdClickAttribution::markConversionAsSent):
        (WebCore::AdClickAttribution::wasConversionSent const):
        (WebCore::AdClickAttribution::toString const):
        (WebCore::AdClickAttribution::setConversion): Deleted.
            Renamed convertAndGetEarliestTimeToSend().
        * loader/AdClickAttribution.h:
        (WebCore::AdClickAttribution::Conversion::Conversion):
        (WebCore::AdClickAttribution::Conversion::encode const):
        (WebCore::AdClickAttribution::Conversion::decode):
        * platform/Timer.h:
            Now exports nextFireInterval.

2019-04-15  Chris Dumez  <cdumez@apple.com>

        Regression(r237903) Speedometer 2 is 1-2% regressed on iOS
        https://bugs.webkit.org/show_bug.cgi?id=196841
        <rdar://problem/45957016>

        Reviewed by Myles C. Maxfield.

        Speedometer 2 content does not use the text-underline-offset and text-decoration-thickness
        features that were added in r237903 so I looked for behavior changes in the context of
        Speedometer from r237903. I found that RenderStyle::changeAffectsVisualOverflow() started
        returning true a lot more often after r237903. The reason is that r237903 dropped the
        visualOverflowForDecorations() checks in this method and started returning true a lot
        more as a result.

        To restore previous behavior, this patch adds back the visualOverflowForDecorations() checks
        that were dropped in r237903. I have verified that with this patch,
        RenderStyle::changeAffectsVisualOverflow() returns true as many times as it used to before
        r237903.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeAffectsVisualOverflow const):

2019-04-15  Said Abou-Hallawa  <said@apple.com>

        ASSERT fires when removing a disallowed clone from the shadow tree without reseting its corresponding element
        https://bugs.webkit.org/show_bug.cgi?id=196895

        Reviewed by Darin Adler.

        When cloning elements to the shadow tree of an SVGUseElement, the
        corresponding element links are set from the clones to the originals.
        Later some of the elements may be disallowed to exist in the shadow tree.
        For example the SVGPatternElement is disallowed and has to be removed 
        even after cloning. The problem is the corresponding elements are not
        reset to null. Usually this is not a problem because the removed elements
        will be deleted and the destructor of SVGElement will reset the corresponding
        element links. However in some cases, the cloned element is referenced
        from another SVGElement, for example the target of a SVGTRefElement. In
        this case the clone won't be deleted but it will be linked to the original
        and the event listeners won't be copied from the original. When the
        original is deleted, its event listeners have to be removed. The event
        listeners of the clones also ave to be removed. But because the event
        listeners of the original were not copied when cloning, the assertion in
        SVGElement::removeEventListener() fires.

        Test: svg/custom/use-disallowed-element-clear-corresponding-element.html

        * svg/SVGUseElement.cpp:
        (WebCore::disassociateAndRemoveClones):

2019-04-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: DOMDebugger: "Attribute Modified" breakpoints pause after the modification occurs for the style attribute
        https://bugs.webkit.org/show_bug.cgi?id=196556
        <rdar://problem/49570681>

        Reviewed by Timothy Hatcher.

        Test: inspector/dom-debugger/attribute-modified-style.html

        * css/PropertySetCSSStyleDeclaration.h:
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::StyleAttributeMutationScope::~StyleAttributeMutationScope):
        (WebCore::InlineCSSStyleDeclaration::willMutate): Added.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::styleAttributeChanged):
        (WebCore::StyledElement::inlineStyleChanged):

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willInvalidateStyleAttr): Added.
        (WebCore::InspectorInstrumentation::didInvalidateStyleAttr):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willInvalidateStyleAttrImpl): Added.
        (WebCore::InspectorInstrumentation::didInvalidateStyleAttrImpl):

        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didInvalidateStyleAttr):

        * inspector/agents/InspectorDOMDebuggerAgent.h:
        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::willInvalidateStyleAttr): Added.
        (WebCore::InspectorDOMDebuggerAgent::didInvalidateStyleAttr): Deleted.

2019-04-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: Elements: event listener change events should only be fired for the selected node and it's ancestors
        https://bugs.webkit.org/show_bug.cgi?id=196887
        <rdar://problem/49870627>

        Reviewed by Timothy Hatcher.

        Test: inspector/dom/event-listener-add-remove.html
              inspector/dom/event-listener-inspected-node.html

        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::setInspectedNode):
        (WebCore::InspectorDOMAgent::didAddEventListener):
        (WebCore::InspectorDOMAgent::willRemoveEventListener):

2019-04-15  Antoine Quint  <graouts@apple.com>

        Ensure iOS layout traits are used for media controls in modern compatibility mode
        https://bugs.webkit.org/show_bug.cgi?id=196812
        <rdar://problem/47460637>

        Unreviewed. Speculative fix for test regressions on open-source bots.

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype.get layoutTraits):

2019-04-11  Antoine Quint  <graouts@apple.com>

        Ensure iOS layout traits are used for media controls in modern compatibility mode
        https://bugs.webkit.org/show_bug.cgi?id=196812
        <rdar://problem/47460637>

        Reviewed by Dean Jackson.

        Test: media/modern-media-controls/media-controller/ios/media-controller-ios-layout-traits-modern-compatibility-mode.html

        Instead of looking at the UA string, check whether we support touches which is the correct indicator of whether we should
        be using the iOS layout traits for media controls.

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype.get layoutTraits):

2019-04-14  Rob Buis  <rbuis@igalia.com>

        Link prefetch not useful for top-level navigation
        https://bugs.webkit.org/show_bug.cgi?id=195623

        Reviewed by Youenn Fablet.

        Cache cross-domain top-level prefetches in a dedicated cache and not in the
        memory cache. Ignore prefetches for content extension checks.

        Tests: http/tests/cache/link-prefetch-main-resource-iframe.html
               http/tests/cache/link-prefetch-main-resource.html

        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::prefetchIfNeeded):
        * loader/ResourceLoadInfo.cpp:
        (WebCore::toResourceType):
        * loader/ResourceLoadInfo.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequestInternal):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

2019-04-14  Dean Jackson  <dino@apple.com>

        Extract UTI mapping and allow for additions
        https://bugs.webkit.org/show_bug.cgi?id=196822
        <rdar://problem/49822339>

        Reviewed by Darin Adler

        Post landing feedback on minimizing String constructors.

        * platform/network/mac/UTIUtilities.mm:
        (WebCore::MIMETypeFromUTITree):
        (WebCore::UTIFromMIMETypeCachePolicy::createValueForKey):

2019-04-14  Don Olmstead  <don.olmstead@sony.com>

        [CMake] JavaScriptCore derived sources should only be referenced inside JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=196742

        Reviewed by Konstantin Tokarev.

        Don't set JavaScriptCore_SCRIPTS_DIR now that it is set within WebKitFS.

        * CMakeLists.txt:

2019-04-12  Antoine Quint  <graouts@apple.com>

        Provide a quirk to disable Pointer Events
        https://bugs.webkit.org/show_bug.cgi?id=196877
        <rdar://problem/49863470>

        Reviewed by Dean Jackson.

        Add a quirk to disable Pointer Events. We also opt a website that has compatibility issues with Pointer Events into this new quirk.

        * dom/PointerEvent.idl:
        * page/Quirks.cpp:
        (WebCore::Quirks::shouldDisablePointerEventsQuirk const):
        * page/Quirks.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::absoluteEventTrackingRegionsForFrame const):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveElement):

2019-04-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Enable modern compatibility mode by default in WKWebView on some devices
        https://bugs.webkit.org/show_bug.cgi?id=196883
        <rdar://problem/49864527>

        Reviewed by Tim Horton.

        Add a new helper function to determine whether an app is pre-installed on iOS, for the purposes of ensuring
        compatibility with existing Apple apps that are not affected by linked-on-or-after. This involves all apps with
        a bundle ID that begins with "com.apple.".

        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::setApplicationBundleIdentifier):
        (WebCore::applicationBundleStartsWith):
        (WebCore::IOSApplication::isAppleApplication):

2019-04-12  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Prevent narrowing conversions during Metal function calls on 32-bit platforms
        https://bugs.webkit.org/show_bug.cgi?id=196793

        Reviewed by Darin Adler.

        On 32-bit platforms, NSUInteger is 32-bit, which limits certain Web GPU parameters. 
        Ensure that valid parameters are properly converted to NSUInteger for Metal calls, regardless of platform.

        * platform/graphics/gpu/GPUBuffer.h:
        (WebCore::GPUBuffer::byteLength const):
        * platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm:
        (WebCore::tryGetResourceAsBufferBinding):
        (WebCore::setBufferOnEncoder):
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::validateBufferUsage):
        (WebCore::GPUBuffer::tryCreate):
        (WebCore::GPUBuffer::GPUBuffer):
        (WebCore::GPUBuffer::setSubData):
        * platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm:
        (WebCore::GPUCommandBuffer::copyBufferToBuffer):
        (WebCore::GPUCommandBuffer::copyBufferToTexture):
        (WebCore::GPUCommandBuffer::copyTextureToBuffer):
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::GPURenderPassEncoder::drawIndexed):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::trySetInputStateForPipelineDescriptor):

2019-04-12  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed fix for non-unified build.

        * dom/ScriptedAnimationController.h:
        Add missing include from r244182.

2019-04-11  Ryosuke Niwa  <rniwa@webkit.org>

        WebThread should run at a higher priority than user initiated
        https://bugs.webkit.org/show_bug.cgi?id=196849
        <rdar://problem/46851062>

        Reviewed by Geoffrey Garen.

        Use QOS_CLASS_USER_INTERACTIVE on WebThread with -10 relative priority so that WebThread
        won't wait for other threads with priority 30-37 but does not content with the main thread.

        Also removed the call to pthread_attr_setschedparam which disables QoS.

        This improves the blocked time in StartWebThread from 2~3ms to 250μs while cold launching
        iBooks to an opened book.

        * platform/ios/wak/WebCoreThread.mm:
        (StartWebThread): Replaced 200 * 4096 by 800 * KB for a better readability.

2019-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        Add CSS Shadow Parts as a feature under consideration
        https://bugs.webkit.org/show_bug.cgi?id=196835

        Reviewed by Antti Koivisto.

        This feature is under consideration.

        * features.json:

2019-04-12  Ross Kirsling  <ross.kirsling@sony.com>

        WebKit should build successfully even with -DENABLE_UNIFIED_BUILDS=OFF
        https://bugs.webkit.org/show_bug.cgi?id=196845

        Reviewed by Ryosuke Niwa.

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::FontProxy::initialize):
        (WebCore::CanvasRenderingContext2DBase::FontProxy::fontMetrics const):
        (WebCore::CanvasRenderingContext2DBase::FontProxy::fontDescription const):
        (WebCore::CanvasRenderingContext2DBase::FontProxy::width const):
        (WebCore::CanvasRenderingContext2DBase::FontProxy::drawBidiText const):
        (WebCore::CanvasRenderingContext2DBase::beginCompositeLayer):
        (WebCore::CanvasRenderingContext2DBase::endCompositeLayer):
        Remove inline specifier to address linking errors (regardless of CMake platform).
        Doing this in a .cpp file interferes with symbol creation.

        * Modules/mediastream/MediaStreamTrack.cpp:
        * Modules/webvr/VREyeParameters.cpp:
        * Modules/webvr/VRFrameData.cpp:
        * Modules/webvr/VRPose.cpp:
        * accessibility/AccessibilityList.cpp:
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        * accessibility/isolatedtree/AXIsolatedTreeNode.cpp:
        * bindings/js/JSDOMConvertWebGL.cpp:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/JSIDBCursorWithValueCustom.cpp:
        * bindings/js/JSPerformanceObserverCustom.cpp:
        * bindings/js/WindowProxy.cpp:
        * platform/ColorData.gperf:
        * platform/mediastream/RealtimeMediaSourceSettings.cpp:
        * platform/network/DNSResolveQueue.cpp:
        * workers/service/ServiceWorkerClientQueryOptions.h:
        * workers/service/ServiceWorkerContainer.cpp:
        Add missing includes to address compiler errors on GTK.

2019-04-12  Zalan Bujtas  <zalan@apple.com>

        REGRESSION (r244098): [ Mac WK1 ] Layout Test fast/dynamic/paused-event-dispatch.html is Timing out
        https://bugs.webkit.org/show_bug.cgi?id=196789
        <rdar://problem/49855255>

        Reviewed by Tim Horton.

        Disable auto-sizing mode at the start of each test.

        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):

2019-04-12  Eric Carlson  <eric.carlson@apple.com>

        Update AudioSession route sharing policy
        https://bugs.webkit.org/show_bug.cgi?id=196776
        <rdar://problem/46501611>

        Reviewed by Jer Noble.

        No new tests, updated an API test.

        * platform/audio/AudioSession.cpp:
        (WebCore::convertEnumerationToString):
        * platform/audio/AudioSession.h:
        (WTF::LogArgument<WebCore::RouteSharingPolicy>::toString):
        (WTF::LogArgument<WebCore::AudioSession::CategoryType>::toString):
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (MediaSessionManagerCocoa::updateSessionState):
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::setCategory):
        (WebCore::AudioSession::routeSharingPolicy const):
        * platform/audio/mac/AudioSessionMac.cpp:
        (WebCore::AudioSession::setCategory):

2019-04-12  Antoine Quint  <graouts@apple.com>

        Opt some websites into the simulated mouse events dispatch quirk when in modern compatibility mode
        https://bugs.webkit.org/show_bug.cgi?id=196830
        <rdar://problem/49124313>

        Reviewed by Wenson Hsieh.

        We add a new policy to determine whether simulated mouse events dispatch are allowed and use it to determine whether the
        simulated mouse events dispatch quirk can be used for a given website. We then check the domain name for the current page's
        document to see if it matches some known websites that require this quirk.

        We needed to add some calls into Quirks::shouldDispatchSimulateMouseEvents() where we used to only consult the RuntimeEnabledFeature
        flag to ensure we correctly created touch regions for simulated mouse events.

        * dom/EventNames.h:
        (WebCore::EventNames::isTouchRelatedEventType const):
        * dom/Node.cpp:
        (WebCore::Node::moveNodeToNewDocument):
        (WebCore::tryAddEventListener):
        (WebCore::tryRemoveEventListener):
        (WebCore::Node::defaultEventHandler):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::simulatedMouseEventsDispatchPolicy const):
        (WebCore::DocumentLoader::setSimulatedMouseEventsDispatchPolicy):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        * page/Quirks.cpp:
        (WebCore::Quirks::shouldDispatchSimulatedMouseEvents const):
        (WebCore::Quirks::shouldDispatchSimulateMouseEvents const): Deleted.
        * page/Quirks.h:

2019-04-11  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Wrong scrolling behavior for nested absolute position elements inside overflow scroll
        https://bugs.webkit.org/show_bug.cgi?id=196146

        Reviewed by Antti Koivisto.
        
        computeCoordinatedPositioningForLayer() failed to handle nested positions elements
        inside overflow scroll, because it only walked up to the first containing block of
        a nested position:absolute. We need to walk all the way up the ancestor layer chain,
        looking at containing block, scroller and composited ancestor relationships.

        Make this code easier to understand by writing it in terms of "is foo scrolled by bar", rather than
        trying to collapse all the logic into a single ancestor walk, which was really hard. This is a few
        more ancestor traversals, but we now only run this code if there's composited scrolling
        in the ancestor chain.

        Tests: scrollingcoordinator/scrolling-tree/nested-absolute-in-absolute-overflow.html
               scrollingcoordinator/scrolling-tree/nested-absolute-in-overflow.html
               scrollingcoordinator/scrolling-tree/nested-absolute-in-relative-in-overflow.html
               scrollingcoordinator/scrolling-tree/nested-absolute-in-sc-overflow.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::enclosingCompositedScrollingLayer):
        (WebCore::isScrolledByOverflowScrollLayer):
        (WebCore::isNonScrolledLayerInsideScrolledCompositedAncestor):
        (WebCore::RenderLayerCompositor::layerContainingBlockCrossesCoordinatedScrollingBoundary):
        (WebCore::collectStationaryLayerRelatedOverflowNodes):
        (WebCore::RenderLayerCompositor::computeCoordinatedPositioningForLayer const):
        (WebCore::collectRelatedCoordinatedScrollingNodes):
        (WebCore::layerParentedAcrossCoordinatedScrollingBoundary): Deleted.

2019-04-12  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-flex][css-grid] Fix synthesized baseline
        https://bugs.webkit.org/show_bug.cgi?id=196312

        Reviewed by Javier Fernandez.

        When a flex or grid container has no baseline,
        its baseline should be synthesized from the border edges.
        The same happens for flex and grid items.
        
        Right now we were using the content box in some cases
        and even using the margin box in a particular scenario.
        The patch fixes this.
        
        At the same time this is also fixing the baseline for
        inline flex/grid containers to make it interoperable with Firefox.
        Inline blocks have a special behavior per legacy reasons,
        which applies to inline flex/grid containers when they have no items;
        otherwise the items should be used to compute its baseline.
        See more at: https://github.com/w3c/csswg-drafts/issues/3416

        Note that we need to keep current behavior for buttons,
        as the flexbox spec doesn't apply to them.

        Tests: css3/flexbox/flexbox-baseline-margins.html
               fast/css-grid-layout/grid-baseline-margins-1.html
               fast/css-grid-layout/grid-baseline-margins-2.html
               imported/w3c/web-platform-tests/css/css-align/baseline-rules/synthesized-baseline-flexbox-001.html
               imported/w3c/web-platform-tests/css/css-align/baseline-rules/synthesized-baseline-grid-001.html
               imported/w3c/web-platform-tests/css/css-align/baseline-rules/synthesized-baseline-inline-block-001.html

        * rendering/RenderButton.cpp:
        (WebCore::synthesizedBaselineFromContentBox):
        (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/RenderGrid.cpp:
        (WebCore::RenderGrid::baselinePosition const):
        (WebCore::RenderGrid::inlineBlockBaseline const):

2019-04-11  Simon Fraser  <simon.fraser@apple.com>

        Avoid doing positioned scrolling tree node work for layers not inside overflow:scroll
        https://bugs.webkit.org/show_bug.cgi?id=196848

        Reviewed by Zalan Bujtas.

        Maintain a bit on RenderLayer which says if a layer has a composited scrolling ancestor
        in the layer tree. We only need to do work related to making positioned scrolling tree nodes
        for layers which are layer tree descendants of overflow:scroll.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::outputPaintOrderTreeLegend):
        (WebCore::outputPaintOrderTreeRecursive):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition const):
        (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason const):
        (WebCore::RenderLayerCompositor::isViewportConstrainedFixedOrStickyLayer const):
        (WebCore::RenderLayerCompositor::fixedLayerIntersectsViewport const):
        (WebCore::RenderLayerCompositor::computeCoordinatedPositioningForLayer const):

2019-04-11  Zalan Bujtas  <zalan@apple.com>

        Try to fix Windows build.

        * page/PrintContext.cpp:
        (WebCore::PrintContext::computedPageMargin):

2019-04-11  Megan Gardner  <megan_gardner@apple.com>

        Update 'Save Image' to more clear instructions
        https://bugs.webkit.org/show_bug.cgi?id=196833
        <rdar://problem/47446845>

        Reviewed by Wenson Hsieh.

        Not testable, UI change only.

        * en.lproj/Localizable.strings:

2019-04-11  Zalan Bujtas  <zalan@apple.com>

        Add @page margin support
        https://bugs.webkit.org/show_bug.cgi?id=196680
        <rdar://problem/45217707>

        Reviewed by Tim Horton.

        This patch adds support for @page margin. This feature is currently behind a runtime flag and is off by default.
        We resolve the @page margin values in the WebProcess (currently no pseudo class is supported) and transfer them to the UIProcess through computedPagesCallback.
        UIProcess is responsible for applying these new values on the printer. We also re-compute the available width/height for the current printing context
        in the WebProcess if needed (see PrintInfo for current printer margins).

        Tests: printing/page-with-10mm-left-margin.html
               printing/page-with-zero-margin.html

        * page/PrintContext.cpp:
        (WebCore::PrintContext::computedPageMargin):
        (WebCore::PrintContext::computedPageSize):
        * page/PrintContext.h:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::pageAtRuleSupportEnabled const):
        (WebCore::RuntimeEnabledFeatures::setPageAtRuleSupportEnabled):

2019-04-11  Dean Jackson  <dino@apple.com>

        Extract UTI mapping and allow for additions
        https://bugs.webkit.org/show_bug.cgi?id=196822
        <rdar://problem/49822339>

        Reviewed by Tim Horton.

        Add an ADDITIONAL_SYSTEM_PREVIEW_TYPES macro to the list
        of accepted MIME types. And add a new helper to map
        MIME types to UTI types when the system was unable to
        find an existing type.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::systemPreviewMIMETypes):
        * platform/network/mac/UTIUtilities.mm:
        (WebCore::UTIFromUnknownMIMEType):
        (WebCore::UTIFromMIMETypeCachePolicy::createValueForKey):

2019-04-09  Ryosuke Niwa  <rniwa@webkit.org>

        [iOS] Moving backwards by word granularity does not work if the previous line was inside another block element
        https://bugs.webkit.org/show_bug.cgi?id=196670

        Reviewed by Wenson Hsieh.

        The bug was ultimately caused by two reasons:
         1. On iOS, previousWordPositionBoundary would identify a blank line as a word boundary.
         2. SimplifiedBackwardsTextIterator generates a new line character (\n) between two block elements.

        When moving backwards by word granularity, therefore, previousBoundary would encounter a new line created by (2)
        and then previousWordPositionBoundary would identify it as a word boundary.

        Fixed the bug (2) by adding the same check as TextIterator::exitNode has to avoid generating an extra new line
        character following an exiting new line character. Also added internals.rangeAsTextUsingBackwardsTextIterator
        to make SimplifiedBackwardsTextIterator directly testable in layout tests.

        This fix unveiled an unrelated bug when moving backwards with sentence granularity at the beginning of a line.
        In this case, WebKit was previously feeding ICU with the previous line's content followed by two new lines,
        which constituted a new sentence. However after the fix, ICU no longer detects a new sentence after the end
        of the prevous line. This patch, therefore, introduces a new optional argument to previousBoundary which forces
        the succeeding paragraph's content (i.e. the content of the line from which we're moving backwards with sentence
        granularity) to be fed to ICU. This fixes the bug that we were previously not being able to move backwards
        with sentence granularity at the beginning of a line as indicated by the new tests.

        Tests: editing/selection/extend-selection-backward-at-beginning-of-line-by-sentence-granularity.html
               editing/selection/extend-selection-backward-at-beginning-of-line-by-word-granularity.html
               editing/selection/move-selection-backward-at-beginning-of-line-by-sentence-granularity.html
               editing/selection/move-selection-backward-at-beginning-of-line-by-word-granularity.html
               editing/text-iterator/backwards-text-iterator-basic.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::previousBoundary): Fixed the bug that moving backwards with sentence granularity at
        the beginning of a line does not work like we did in VisibleUnits. See the description below. It's tested by
        an existing layout test accessibility/mac/text-marker-sentence-nav.html, which would fail without this fix.
        (WebCore::AXObjectCache::startCharacterOffsetOfSentence):
        * accessibility/AXObjectCache.h:
        (WebCore::CharacterOffset::isEqual const):
        * editing/TextIterator.cpp:
        (WebCore::SimplifiedBackwardsTextIterator::handleNonTextNode): Fixed the bug that we were generating two line
        lines between block elements. This fixes the bug that moving backwards with word granularity at the beginning
        of a line fails on iOS.
        (WebCore::plainTextUsingBackwardsTextIteratorForTesting): Added.
        * editing/TextIterator.h:
        * editing/VisibleUnits.cpp:
        (WebCore::previousBoundary): Added the code to extract the succeeding paragraph's content as context for ICU.
        This fixes the bug that moving backwards with sentence granularity at the beginning of a line fails.
        Limit the length of backwards iteration at the current position to avoid traversing backwards beyond
        the current position, and fixed a bug that an early return for the text node was not taking the suffix length
        into account when deciding whether next position resides in the starting container node or not.
        (WebCore::startSentenceBoundary):
        (WebCore::startOfSentence):
        * testing/Internals.cpp:
        (WebCore::Internals::rangeAsTextUsingBackwardsTextIterator): Added.
        * testing/Internals.h:
        * testing/Internals.idl:

2019-04-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Allow the MediaSource API to be enabled via website policy
        https://bugs.webkit.org/show_bug.cgi?id=196429
        <rdar://problem/48774333>

        Reviewed by Tim Horton.

        Add support in DocumentLoader for adjusting page settings using its per-site policies. See WebKit ChangeLog for
        more detail (in particular, the implementation of applyToDocumentLoader).

        Test: fast/media/ios/ipad/enable-MediaSource-API-in-modern-compatibility-mode.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::applyPoliciesToSettings const):
        (WebCore::DocumentLoader::attachToFrame):
        * loader/DocumentLoader.h:

        Add an enum class for MediaSource policies; while we're at it, make all of these enum values 8 bits wide.

        (WebCore::DocumentLoader::mediaSourcePolicy const):
        (WebCore::DocumentLoader::setMediaSourcePolicy):

2019-04-11  Youenn Fablet  <youenn@apple.com>

        Support RTCDataChannel blob binaryType
        https://bugs.webkit.org/show_bug.cgi?id=196821

        Reviewed by Eric Carlson.

        Add support for receiving blobs.
        Default value is still left to 'arraybuffer' which is not spec compliant.
        Covered by rebased test.

        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::setBinaryType):
        (WebCore::RTCDataChannel::didReceiveRawData):

2019-04-11  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: can't reliably stop/start a recording
        https://bugs.webkit.org/show_bug.cgi?id=196778
        <rdar://problem/47606798>

        Reviewed by Timothy Hatcher.

        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::startProgrammaticCapture):
        (WebCore::InspectorTimelineAgent::stopProgrammaticCapture):
        It is possible to determine when programmatic capturing starts/stops in the frontend based
        on the state when the backend causes the state to change, such as if the state is "inactive"
        when the frontend is told that the backend has started capturing.

        * inspector/agents/InspectorCPUProfilerAgent.cpp:
        (WebCore::InspectorCPUProfilerAgent::stopTracking):
        * inspector/agents/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::stopTracking):
        Send an end timestamp to match other instruments.

2019-04-11  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r244158.

        Casued 8 inspector/timeline/ test failures.

        Reverted changeset:

        "Web Inspector: Timelines: can't reliably stop/start a
        recording"
        https://bugs.webkit.org/show_bug.cgi?id=196778
        https://trac.webkit.org/changeset/244158

2019-04-11  Pablo Saavedra  <psaavedra@igalia.com>

        [WPE] Build error with ENABLE_VIDEO=OFF after r244078
        https://bugs.webkit.org/show_bug.cgi?id=196811

        createGenericCue() is only defined when VIDEO_TRACK is enabled.

        Reviewed by Eric Carlson.

        * testing/Internals.cpp:
        (WebCore::Internals::createGenericCue):
        * testing/Internals.h:

2019-04-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Layout test accessibility/aria-hidden-false-works-in-subtrees.html fails after r184890
        https://bugs.webkit.org/show_bug.cgi?id=146718
        <rdar://problem/21722487>

        Reviewed by Joanmarie Diggs.

        Allow to get the text under element for nodes hidden in DOM but explicitly exposed to accessibility with
        aria-hidden="false".

        Fixes: accessibility/aria-hidden-false-works-in-subtrees.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::textUnderElement const):
        * accessibility/atk/WebKitAccessible.cpp:
        (roleIsTextType): Also consider ApplicationGroup role as text elements, so that <div>text</div> is equivalent to
        <div role="roup">test</div>.

2019-04-10  Said Abou-Hallawa  <sabouhallawa@apple.com>

        requestAnimationFrame should execute before the next frame
        https://bugs.webkit.org/show_bug.cgi?id=177484

        Reviewed by Simon Fraser.

        This change fixes these issues with animation timing:

        1. Calling the requestAnimationFrame callbacks would have happened when
           the DisplayLink fires. This may have happened even if the frame is
           missed and no display is committed.

        2. Style changes and layout triggered by script could trigger painting
           at more than 60fps. CoreAnimation commits could happen at more than
           60fps, although WindowServer will throttle those, and only some will
           be shown on the screen.

        This change introduces a new paint scheduling model where painting is
        driven by a "RenderingUpdateScheduler", which only triggers paints once
        per 16.7ms frame.

        Code that previously scheduled a compositing layer flush now schedules a
        "RenderingUpdate", and that update is driven by a DisplayRefreshMonitor
        callback. When the render happens, we service requestAnimationFrame callbacks,
        Web Animations, intersection observations and resize observations per the
        "Update the rendering" step of the HTML Event Loop specification:
        <https://html.spec.whatwg.org/multipage/webappapis.html#update-the-rendering>.

        In the future, more rendering steps will be added to this code.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::platformHandleFocusedUIElementChanged):
        Fix layout tests by adding null check.

        * animation/DocumentAnimationScheduler.cpp: Removed.
        * animation/DocumentAnimationScheduler.h: Removed.
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::DocumentTimeline):
        (WebCore::DocumentTimeline::updateThrottlingState):
        (WebCore::DocumentTimeline::suspendAnimations):
        (WebCore::DocumentTimeline::resumeAnimations):
        (WebCore::DocumentTimeline::liveCurrentTime const):
        (WebCore::DocumentTimeline::currentTime):
        (WebCore::DocumentTimeline::cacheCurrentTime):
        (WebCore::DocumentTimeline::animationTimingDidChange):
        (WebCore::DocumentTimeline::scheduleAnimationResolution):
        (WebCore::DocumentTimeline::unscheduleAnimationResolution):
        (WebCore::DocumentTimeline::updateAnimationsAndSendEvents):
        (WebCore::DocumentTimeline::internalUpdateAnimationsAndSendEvents):
        (WebCore::DocumentTimeline::scheduleNextTick):
        (WebCore::DocumentTimeline::updateListOfElementsWithRunningAcceleratedAnimationsForElement):
        Simplify this function by handling the case of no-animations separately.

        (WebCore::DocumentTimeline::resolveAnimationsForElement):
        Simplify the loop and delete hasPendingAcceleratedAnimations because it
        is initialized to true and is not changed inside the loop.

        (WebCore::DocumentTimeline::scheduleAnimationResolutionIfNeeded): Deleted.
        (WebCore::DocumentTimeline::animationResolutionTimerFired): Deleted.
        * animation/DocumentTimeline.h:
        * dom/Document.cpp:
        (WebCore::Document::resolveStyle):
        There is no need to force update in resolveStyle(). notifyFlushRequired()
        will be called eventually which will scheduleRenderingUpdate().

        (WebCore::Document::prepareForDestruction):
        (WebCore::Document::updateAnimationsAndSendEvents):
        (WebCore::Document::serviceRequestAnimationFrameCallbacks):
        (WebCore::Document::windowScreenDidChange):
        (WebCore::Document::scheduleRenderingUpdate):
        (WebCore::Document::updateIntersectionObservations):
        (WebCore::Document::addResizeObserver):
        (WebCore::Document::updateResizeObservations):
        (WebCore::Document::scheduleForcedIntersectionObservationUpdate): Deleted.
        (WebCore::Document::scheduleResizeObservations): Deleted.
        (WebCore::Document::animationScheduler): Deleted.
        No need to schedule web-animations, intersection observations and resize
        observations updates separately. All of them will be updated through the
        "Update the rendering" step, i.e. Page::updateRendering().        

        * dom/Document.h:
        (WebCore::Document::numberOfIntersectionObservers const):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::serviceRequestAnimationFrameCallbacks):
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        (WebCore::ScriptedAnimationController::animationTimerFired):
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations): Deleted.
        (WebCore::ScriptedAnimationController::documentAnimationSchedulerDidFire): Deleted.
        * dom/ScriptedAnimationController.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::didLayout):
        (WebCore::FrameView::viewportContentsChanged):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::FrameViewLayoutContext::layoutTimerFired):
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::observe):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::layoutIfNeeded):
        (WebCore::Page::updateRendering):
        (WebCore::Page::renderingUpdateScheduler):
        (WebCore::Page::willDisplayPage): Deleted.
        (WebCore::Page::addDocumentNeedingIntersectionObservationUpdate): Deleted.
        (WebCore::Page::updateIntersectionObservations): Deleted.
        (WebCore::Page::scheduleForcedIntersectionObservationUpdate): Deleted.
        (WebCore::Page::hasResizeObservers const): Deleted.
        (WebCore::Page::gatherDocumentsNeedingResizeObservationCheck): Deleted.
        (WebCore::Page::checkResizeObservations): Deleted.
        (WebCore::Page::scheduleResizeObservations): Deleted.
        (WebCore::Page::notifyResizeObservers): Deleted.
        * page/Page.h:
        (WebCore::Page::setNeedsCheckResizeObservations): Deleted.
        (WebCore::Page::needsCheckResizeObservations const): Deleted.
        The IntersectionObserver and the ResizeObserver do not need to schedule
        their own timers. The RenderingUpdateScheduler will schedule the "Update
        the rendering" step in which these obverses will be served.

        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::didChangeViewExposedRect):
        (WebCore::PageOverlayController::notifyFlushRequired):
        Force committing the layers to be 60 fps at maximum.

        * page/RenderingUpdateScheduler.cpp: Added.
        (WebCore::RenderingUpdateScheduler::RenderingUpdateScheduler):
        (WebCore::RenderingUpdateScheduler::scheduleRenderingUpdate):
        (WebCore::RenderingUpdateScheduler::isScheduled const):
        (WebCore::RenderingUpdateScheduler::startTimer):
        (WebCore::RenderingUpdateScheduler::clearScheduled):
        (WebCore::RenderingUpdateScheduler::createDisplayRefreshMonitor const):
        (WebCore::RenderingUpdateScheduler::windowScreenDidChange):
        (WebCore::RenderingUpdateScheduler::displayRefreshFired):
        (WebCore::RenderingUpdateScheduler::scheduleCompositingLayerFlush):
        * page/RenderingUpdateScheduler.h: Added.
        (WebCore::RenderingUpdateScheduler::create):
        * page/ResizeObserver.cpp:
        (WebCore::ResizeObserver::observe):
        (WebCore::ResizeObserver::scheduleObservations): Deleted.
        * page/ResizeObserver.h:
        (WebCore::ResizeObserver::hasActiveObservations const):
        * page/ios/ContentChangeObserver.h:
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::notifyFlushRequired):
        * page/scrolling/ScrollingStateTree.cpp:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::scheduleLayerFlushNow):
        (WebCore::RenderLayerCompositor::layerTreeAsText):

2019-04-10  Ryosuke Niwa  <rniwa@webkit.org>

        Nullptr crash in CompositeEditCommand::moveParagraphs when root editable element goes away
        https://bugs.webkit.org/show_bug.cgi?id=193027

        Reviewed by Wenson Hsieh.

        Added an early exit when the root editable element (editing host in HTML5 spec terminology) is null
        during CompositeEditCommand::moveParagraphs. This could happen when the website does something crazy
        like removing contenteditable content attribute during DOM mutations or when the destination becomes
        disconnected (orphaned) from the document due to bugs elsewhere in the codebase.

        Test: editing/deleting/merge-paragraphs-null-root-editable-element-crash.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Added an early exit.

2019-04-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: save sheet should be anchored underneath the tab bar when detached
        https://bugs.webkit.org/show_bug.cgi?id=196722
        <rdar://problem/49613280>

        Reviewed by Timothy Hatcher.

        No web observable change.

        * inspector/InspectorFrontendClient.h:
        (WebCore::InspectorFrontendClient::changeSheetRect): Added.

        * inspector/InspectorFrontendClientLocal.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::changeSheetRect): Added.

        * inspector/InspectorFrontendHost.idl:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::setSheetRect): Added.

        * testing/Internals.cpp:
        (WebCore::InspectorStubFrontend::setSheetRect): Added.

2019-04-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: Inspector: lazily create the agent
        https://bugs.webkit.org/show_bug.cgi?id=195971
        <rdar://problem/49039645>

        Reviewed by Joseph Pecoraro.

        No change in functionality.

        * inspector/InspectorController.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::createLazyAgents):
        (WebCore::InspectorController::evaluateForTestInFrontend):
        (WebCore::InspectorController::ensureInspectorAgent):

2019-04-10  Megan Gardner  <megan_gardner@apple.com>

        Remove unneeded extern C
        https://bugs.webkit.org/show_bug.cgi?id=196786

        Reviewed by Tim Horton.

        No tests needed, just needs to compile.

        Removing staging hack for Reveal framework.

        * editing/cocoa/DictionaryLookup.mm:

2019-04-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION: lazy agents used outside of frontend/instrumentation can be accessed before being created
        https://bugs.webkit.org/show_bug.cgi?id=196725
        <rdar://problem/49669810>

        Reviewed by Timothy Hatcher.

        Move the logic for creating the `InspectorPageAgent` and `InspectorDOMAgent` into separate
        functions so that callers into `InspectorController` can be guaranteed to have a valid
        instance of the agent.

        This doesn't interfere with the `Page.enable` command, as it doesn't clear any saved state.
        There is no `DOM.enable` command, so there's no issue there either.

        * inspector/InspectorController.h:
        (WebCore::InspectorController::pageAgent): Deleted.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::createLazyAgents):
        (WebCore::InspectorController::inspect):
        (WebCore::InspectorController::hideHighlight):
        (WebCore::InspectorController::ensureDOMAgent): Added.
        (WebCore::InspectorController::ensurePageAgent): Added.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::showMainResourceForFrame):

2019-04-10  Alex Christensen  <achristensen@webkit.org>

        Add SPI WKNavigationResponse._downloadAttribute
        https://bugs.webkit.org/show_bug.cgi?id=196755
        <rdar://49587365>

        Reviewed by Brady Eidson.

        Covered by an API test that validates the attribute is correctly sent through the FrameLoader to the API.
        When a user clicks on a link with a download attribute, the download attribute should be used as the suggested filename sometimes.
        The application needs this information after it has received the response in order to make fully informed decisions about downloads.
        In order to get this attribute to the decidePolicyForNavigationResponse, we need to store the attribute on the DocumentLoader
        from the FrameLoadRequest then send it from the DocumentLoader when the response is received.

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setDownloadAttribute):
        (WebCore::DocumentLoader::downloadAttribute const):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkContentPolicy):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::loadPostRequest):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::loadWithNavigationAction):
        * loader/FrameLoaderClient.h:

2019-04-10  Youenn Fablet  <youenn@apple.com>

        SWClientConnection should not double hop to fire some events
        https://bugs.webkit.org/show_bug.cgi?id=196735

        Reviewed by Alex Christensen.

        Some events, like postMessage in service workers is hopping from main thread to service worker thread to dispatch events.
        Some other events, like service worker state update, are hopping from main thread to service worker thread, then posting a task to dispatch events.
        This may create ordering problems.

        To fix the issue, we now hop to the service worker thread and dispatch the events.
        In addition, for documents, we post a task and do the whole service worker processing in it.
        This ensures that some tests, like whether there is a service worker container,
        or creation of a service worker are done consistently.

        Covered by unflaked test.

        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::updateRegistrationState):
        (WebCore::SWClientConnection::updateWorkerState):
        (WebCore::SWClientConnection::fireUpdateFoundEvent):
        (WebCore::SWClientConnection::notifyClientsOfControllerChange):
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::updateState):
        * workers/service/ServiceWorker.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::updateRegistrationState):
        (WebCore::ServiceWorkerContainer::fireUpdateFoundEvent):
        (WebCore::ServiceWorkerContainer::fireControllerChangeEvent):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::notifyFinished):
        Notify of the script URL in the error message.
        This will help diagnose flakiness issues.
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::fireUpdateFoundEvent):
        * workers/service/ServiceWorkerRegistration.h:

2019-04-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: can't reliably stop/start a recording
        https://bugs.webkit.org/show_bug.cgi?id=196778
        <rdar://problem/47606798>

        Reviewed by Timothy Hatcher.

        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::startProgrammaticCapture):
        (WebCore::InspectorTimelineAgent::stopProgrammaticCapture):
        It is possible to determine when programmatic capturing starts/stops in the frontend based
        on the state when the backend causes the state to change, such as if the state is "inactive"
        when the frontend is told that the backend has started capturing.

        * inspector/agents/InspectorCPUProfilerAgent.cpp:
        (WebCore::InspectorCPUProfilerAgent::stopTracking):
        * inspector/agents/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::stopTracking):
        Send an end timestamp to match other instruments.

2019-04-10  Tim Horton  <timothy_horton@apple.com>

        Add modern API for overriding the page's specified viewport configuration
        https://bugs.webkit.org/show_bug.cgi?id=167734
        <rdar://problem/30331795>

        Reviewed by Simon Fraser.

        New API test: WebKit.OverrideViewportArguments

        * dom/Document.cpp:
        (WebCore::Document::updateViewportArguments):
        * dom/Document.h:
        (WebCore::Document::viewportArguments const):
        Make the viewportArguments() getter respect the overridden arguments.

        * dom/ViewportArguments.cpp:
        (WebCore::numericPrefix):
        (WebCore::findSizeValue):
        (WebCore::findScaleValue):
        (WebCore::findBooleanValue):
        (WebCore::parseViewportFitValue):
        (WebCore::viewportErrorMessage):
        (WebCore::reportViewportWarning):
        (WebCore::setViewportFeature):
        * dom/ViewportArguments.h:
        Make it possible to parse ViewportArguments without a Document, so
        that it can be used in the UI process. We only used the Document for
        two things: error reporting, and getting the state of one setting.
        Refactor error handling to use a passed-arund function, and add a
        variant of setViewportFeature() that doesn't take a Document.

2019-04-10  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Indexed drawing and GPUCommandEncoder crash prevention
        https://bugs.webkit.org/show_bug.cgi?id=196758

        Reviewed by Dean Jackson.

        Test: webgpu/draw-indexed-triangles.html

        Implement GPURenderPassEncoder::setIndexBuffer and GPURenderPassEncoder::drawIndexed to enable indexed drawing.
        Disable GPUCommandEncoders with active pass encoders from being submitted or encoding blits. 

        Prevent active GPUCommandEncoders from being submitted or encoding blit commands:
        * Modules/webgpu/WebGPUCommandEncoder.cpp:
        (WebCore::WebGPUCommandEncoder::finish):
        * platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm:
        (WebCore::GPUCommandBuffer::copyBufferToBuffer):
        (WebCore::GPUCommandBuffer::copyBufferToTexture):
        (WebCore::GPUCommandBuffer::copyTextureToBuffer):
        (WebCore::GPUCommandBuffer::copyTextureToTexture):

        Implement GPURenderPassEncoder::setIndexBuffer and GPURenderPassEncoder::drawIndexed:
        * Modules/webgpu/WebGPURenderPassEncoder.cpp:
        (WebCore::WebGPURenderPassEncoder::setIndexBuffer):
        (WebCore::WebGPURenderPassEncoder::setVertexBuffers): Remove unnecessary move operations.
        (WebCore::WebGPURenderPassEncoder::drawIndexed): Added.
        * Modules/webgpu/WebGPURenderPassEncoder.h:
        * Modules/webgpu/WebGPURenderPassEncoder.idl:
        * platform/graphics/gpu/GPUBuffer.h:
        (WebCore::GPUBuffer::isIndex const):
        * platform/graphics/gpu/GPUInputStateDescriptor.h:
        * platform/graphics/gpu/GPURenderPassEncoder.h: Cache the index buffer, as Metal does not set the index buffer separate from the draw call.
        * platform/graphics/gpu/GPURenderPipeline.h:
        (WebCore::GPURenderPipeline::indexFormat const):
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::GPURenderPassEncoder::setIndexBuffer):
        (WebCore::GPURenderPassEncoder::setVertexBuffers):
        (WebCore::mtlPrimitiveTypeForGPUPrimitiveTopology):
        (WebCore::GPURenderPassEncoder::draw):
        (WebCore::mtlIndexTypeForGPUIndexFormat): Added.
        (WebCore::GPURenderPassEncoder::drawIndexed): Added.
        (WebCore::primitiveTypeForGPUPrimitiveTopology): Deleted.
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::GPURenderPipeline::tryCreate):
        (WebCore::GPURenderPipeline::GPURenderPipeline):

2019-04-09  Ryosuke Niwa  <rniwa@webkit.org>

        OfflineAudioDestinationNode::startRendering leaks OfflineAudioDestinationNode if offlineRender exists early
        https://bugs.webkit.org/show_bug.cgi?id=196759

        Reviewed by Eric Carlson.

        OfflineAudioDestinationNode::startRendering unconditionally ref's itself before invoking offlineRender() in a new thread.
        But offlineRender can early exit without ever calling deref() in the main thread, leading to the leak of
        OfflineAudioDestinationNode. Fixed the leak by always calling deref in the main thread after calling offlineRender().

        Also removed the debug assertion in offlineRender which always hits when we run the relevant test.

        Test: imported/w3c/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/current-time-block-size.html

        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::startRendering):
        (WebCore::OfflineAudioDestinationNode::offlineRender):
        (WebCore::OfflineAudioDestinationNode::notifyComplete): Merged into startRendering.
        * Modules/webaudio/OfflineAudioDestinationNode.h:

2019-04-10  Megan Gardner  <megan_gardner@apple.com>

        Fix text autoscrolling when typing in modern webkit
        https://bugs.webkit.org/show_bug.cgi?id=196718
        <rdar://problem/49225507>

        Reviewed by Tim Horton.

        Tests: fast/events/autoscroll-when-input-is-offscreen.html
               fast/events/autoscroll-with-software-keyboard.html

        We have been relying on UIKit to scroll editable text, but
        since we cannot give them enough information for them to always
        do the right thing, we should just do all the work in WebKit.
        This has the added benifit of fixing some tricky autoscrolling
        bugs that have cropped up recently.

        * editing/Editor.cpp:
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::revealSelectionAfterEditingOperation):
        We should be scrolling the main frame in WebKit. We have been relying on UIKit,
        but we cannot give them enough information to guarantee a correct scroll, so just
        do all the work in WebKit.
        * page/FrameView.cpp:
        (WebCore::FrameView::unobscuredContentRectExpandedByContentInsets const):
        Update to use the rect that is actually visible, accounting for the software keyboard.

2019-04-10  Ross Kirsling  <ross.kirsling@sony.com>

        WebCore should build successfully even with -DENABLE_UNIFIED_BUILDS=OFF
        https://bugs.webkit.org/show_bug.cgi?id=196762

        Reviewed by Ryosuke Niwa.

        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
        * Modules/websockets/WebSocketFrame.cpp:
        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::parentTable const):
        * accessibility/AccessibilityObject.cpp:
        * accessibility/AccessibilityRenderObject.cpp:
        * animation/CSSAnimation.cpp:
        * animation/DeclarativeAnimation.cpp:
        * bindings/js/DOMGCOutputConstraint.h:
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::root):
        (WebCore::JSCanvasRenderingContext2DOwner::isReachableFromOpaqueRoots):
        (WebCore::JSCanvasRenderingContext2D::visitAdditionalChildren):
        * bindings/js/JSDOMConvertNumbers.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSExtendableMessageEventCustom.cpp:
        * bindings/js/SerializedScriptValue.cpp:
        * css/CSSFontFaceSource.cpp:
        * css/CSSFontFaceSource.h:
        * css/MediaQueryMatcher.h:
        * css/parser/CSSPropertyParserHelpers.cpp:
        * dom/DocumentParser.cpp:
        * dom/EventPath.cpp:
        * dom/MouseEvent.h:
        * dom/SpectreGadget.cpp:
        * dom/SpectreGadget.h:
        * editing/ChangeListTypeCommand.cpp:
        * editing/EditAction.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        * editing/TextGranularity.h:
        * html/HTMLFormControlsCollection.cpp:
        * html/HTMLImageElement.cpp:
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        * inspector/InspectorController.cpp:
        * inspector/agents/InspectorApplicationCacheAgent.cpp:
        * inspector/agents/InspectorCanvasAgent.cpp:
        * inspector/agents/WebHeapAgent.cpp:
        * inspector/agents/page/PageAuditAgent.cpp:
        * inspector/agents/page/PageConsoleAgent.cpp:
        * inspector/agents/page/PageNetworkAgent.cpp:
        * inspector/agents/worker/WorkerAuditAgent.cpp:
        * loader/CrossOriginAccessControl.h:
        * loader/CrossOriginPreflightResultCache.h:
        * loader/NavigationAction.cpp:
        * loader/ResourceLoadObserver.cpp:
        * page/FrameTree.cpp:
        * page/IntersectionObserver.cpp:
        * page/PageConfiguration.cpp:
        * page/PerformanceResourceTiming.cpp:
        * page/ResizeObservation.cpp:
        * page/UndoManager.cpp:
        * plugins/PluginData.cpp:
        * rendering/Grid.h:
        * rendering/GridBaselineAlignment.cpp:
        * rendering/GridBaselineAlignment.h:
        * rendering/GridLayoutFunctions.cpp:
        * rendering/GridLayoutFunctions.h:
        * rendering/GridTrackSizingAlgorithm.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        * rendering/RenderFlexibleBox.cpp:
        * rendering/RenderIFrame.cpp:
        * rendering/RenderLayerFilters.cpp:
        * rendering/TextDecorationPainter.cpp:
        * rendering/TextDecorationPainter.h:
        * rendering/TextPainter.cpp:
        * rendering/TextPainter.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        * rendering/style/StyleRareNonInheritedData.h:
        * rendering/svg/SVGRenderSupport.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        * rendering/updating/RenderTreeBuilderSVG.cpp:
        * style/InlineTextBoxStyle.cpp:
        * style/InlineTextBoxStyle.h:
        * style/StylePendingResources.cpp:
        * svg/SVGMatrix.h:
        * svg/SVGViewSpec.h:
        * svg/SVGZoomAndPan.h:
        * workers/WorkerScriptLoader.cpp:
        * workers/WorkerScriptLoader.h:
        * workers/service/ServiceWorker.cpp:
        * workers/service/ServiceWorkerClientData.cpp:
        * workers/service/ServiceWorkerClients.cpp:
        * workers/service/ServiceWorkerClients.h:
        * workers/service/ServiceWorkerGlobalScope.cpp:
        * workers/service/ServiceWorkerJob.cpp:
        * workers/service/ServiceWorkerProvider.cpp:
        * workers/service/context/ServiceWorkerFetch.cpp:
        * workers/service/context/ServiceWorkerInspectorProxy.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        * workers/service/server/SWServerJobQueue.cpp:
        * workers/service/server/SWServerToContextConnection.cpp:
        * workers/service/server/SWServerWorker.cpp:
        * workers/service/server/SWServerWorker.h:
        * worklets/Worklet.h:

2019-04-10  Antoine Quint  <graouts@apple.com>

        Enable Pointer Events on watchOS
        https://bugs.webkit.org/show_bug.cgi?id=196771
        <rdar://problem/49040909>

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:

2019-04-10  Youenn Fablet  <youenn@apple.com>

        Delay initialization of quota users until the first quota request
        https://bugs.webkit.org/show_bug.cgi?id=196467

        Reviewed by Chris Dumez.

        Instead of triggering initialization of each user when being added,
        delay initialization until the first call to requestSpace with a non zero task size.
        This will make sure we do not load Cache API information in memory or check for
        IDB space until actually necessary.

        To implement that, move from a HashSet of being initialized users to a HashMap where the key is user and
        the value is the user initialization state.

        When removing a user, delay the call to processPendingRequest so that a synchronous call to addUser
        can be taken into consideration.

        This unflakes some Cache API tests as these tests do clear the Cache API and check for the clearing result.
        Clearing the caches triggers a removeUser/addUser dance which then triggers initialization of the Caches structure.

        Covered by existing tests.

        * storage/StorageQuotaManager.cpp:
        (WebCore::StorageQuotaManager::initializeUsersIfNeeded):
        (WebCore::StorageQuotaManager::askUserToInitialize):
        (WebCore::StorageQuotaManager::addUser):
        (WebCore::StorageQuotaManager::requestSpace):
        * storage/StorageQuotaManager.h:

2019-04-10  Philippe Normand  <pnormand@igalia.com>

        there is no vp8 support in youtube.com/html5 page with libwebkit2gtk 2.24 (MSE enabled)
        https://bugs.webkit.org/show_bug.cgi?id=196615

        Reviewed by Xabier Rodriguez-Calvar.

        Add vp8.0 and vp9.0 in supported mime-types if the corresponding video decoders are found.

        No new tests, existing web-platform-tests cover this change.

        * platform/graphics/gstreamer/GStreamerRegistryScanner.cpp:
        (WebCore::GStreamerRegistryScanner::initialize):

2019-04-10  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Adaptive streaming playback broken with GStreamer < 1.12
        https://bugs.webkit.org/show_bug.cgi?id=196765

        Reviewed by Xabier Rodriguez-Calvar.

        Without the following patch in gst-plugins-bad, the uridownloader
        doesn't relay need-context messages to its parent, so in our case
        the player can't share its context with secondary webkitwebsrc
        elements and a RELEASE_ASSERT is hit in the WebProcess.

        So the workaround is to use again webkit+ protocol prefixes for
        GStreamer versions older than 1.12.

        https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/commit/8cf858fb27919e1d631223375f81b98055623733

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::convertToInternalProtocol):
        (WebCore::MediaPlayerPrivateGStreamer::setPlaybinURL):
        (WebCore::MediaPlayerPrivateGStreamer::loadFull):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::wouldTaintOrigin const):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStart):
        (webKitWebSrcGetProtocols):
        (convertPlaybinURI):
        (webKitWebSrcSetUri):
        (CachedResourceStreamingClient::responseReceived):
        (webKitSrcWouldTaintOrigin):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.h:

2019-04-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [ATK] Defer the emision of AtkObject::children-changed signal after layout is done
        https://bugs.webkit.org/show_bug.cgi?id=187948

        Reviewed by Michael Catanzaro.

        The signal AtkObject::children-changed is emitted from AXObjectCache::attachWrapper() and
        AXObjectCache::detachWrapper(). Both can be called in the middle of a layout, so we need to defer the emission
        of the signal after the layout is done, to avoid other atk entry points from being called at that point, since
        most of them update the backing store at the beginning.

        Fixes: accessibility/children-changed-sends-notification.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::performDeferredCacheUpdate): Call platformPerformDeferredCacheUpdate().
        * accessibility/AXObjectCache.h:
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::wrapperParent): Helper to get the AtkObject parent of a given WebKitAccessible.
        (WebCore::AXObjectCache::detachWrapper): Add wrapper to m_deferredDetachedWrapperList.
        (WebCore::AXObjectCache::attachWrapper): Add object to m_deferredAttachedWrapperObjectList.
        (WebCore::AXObjectCache::platformPerformDeferredCacheUpdate): Emit AtkObject::children-changed::add for objects
        in m_deferredAttachedWrapperObjectList and AtkObject::children-changed::remove for wrappers in m_deferredDetachedWrapperList.
        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::platformPerformDeferredCacheUpdate):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::platformPerformDeferredCacheUpdate):
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::platformPerformDeferredCacheUpdate):
        * accessibility/wpe/AXObjectCacheWPE.cpp:
        (WebCore::AXObjectCache::platformPerformDeferredCacheUpdate):

2019-04-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [ATK] Test accessibility/insert-children-assert.html is crashing since added in r216980
        https://bugs.webkit.org/show_bug.cgi?id=172281
        <rdar://problem/37030990>

        Reviewed by Joanmarie Diggs.

        The crash happens because at some point the test tries to get the anonymous block text, getting the RenderText as
        first child and RenderFullScreen as last child and the latter doesn't have a node. This is because in atk we do
        things differently, we don't include the static text elements individually, but parent element uses
        textUnderElement() to get all the pieces together. We can just turn the asserts into actual nullptr checks.

        Fixes: accessibility/insert-children-assert.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement const):

2019-04-09  Keith Rollin  <krollin@apple.com>

        Unreviewed build maintenance -- update .xcfilelists.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:

2019-04-09  Zalan Bujtas  <zalan@apple.com>

        [AutoSizing] Avoid making text paragraphs scroll horizontally when there is a wide table
        https://bugs.webkit.org/show_bug.cgi?id=196743
        <rdar://problem/43897551>

        Reviewed by Tim Horton.

        This patch changes the auto size behavior by using fixed constraint (instead of a min/max pair) to compute the content height.
        Now with the initial containing block width is firmly set to auto-sizing width, the overflow content will not stretch the ICB. Instead it overflows the ICB
        and triggers scrolling the same way the non-auto-sizing mode does.

        * page/FrameView.cpp:
        (WebCore::FrameView::autoSizeIfEnabled):
        (WebCore::FrameView::enableAutoSizeMode):
        * page/FrameView.h:
        * testing/Internals.cpp:
        (WebCore::Internals::enableAutoSizeMode):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-04-09  Youenn Fablet  <youenn@apple.com>

        Close service worker database on network process suspension
        https://bugs.webkit.org/show_bug.cgi?id=196623
        <rdar://problem/48930869>

        Reviewed by Alex Christensen.

        Add suspend/resume support to SWServer.
        On suspend, close the service worker database and stop pushing for changes.
        On resume, push changes if needed.

        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::close):
        * workers/service/server/RegistrationDatabase.h:
        (WebCore::RegistrationDatabase::isClosed const): Deleted.
        * workers/service/server/RegistrationStore.cpp:
        (WebCore::RegistrationStore::closeDatabase):
        * workers/service/server/RegistrationStore.cpp:
        (WebCore::RegistrationStore::pushChangesToDatabase):
        (WebCore::RegistrationStore::clearAll):
        (WebCore::RegistrationStore::startSuspension):
        (WebCore::RegistrationStore::endSuspension):
        * workers/service/server/RegistrationStore.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::startSuspension):
        (WebCore::SWServer::endSuspension):
        * workers/service/server/SWServer.h:

2019-04-09  Justin Fan  <justin_fan@apple.com>

        [Web GPU] GPURenderPassEncoder updates: setBlendColor, setViewport, setScissorRect
        https://bugs.webkit.org/show_bug.cgi?id=196719

        Reviewed by Myles C. Maxfield.

        Implement setBlendColor, setViewport, and setScissorRect for GPURenderPassEncoder.

        Tests: webgpu/viewport-scissor-rect-triangle-strip.html, webgpu/blend-color-triangle-strip.html

        * Modules/webgpu/WebGPURenderPassEncoder.cpp:
        (WebCore::WebGPURenderPassEncoder::setBlendColor):
        (WebCore::WebGPURenderPassEncoder::setViewport):
        (WebCore::WebGPURenderPassEncoder::setScissorRect):
        * Modules/webgpu/WebGPURenderPassEncoder.h:
        * Modules/webgpu/WebGPURenderPassEncoder.idl:
        * platform/graphics/gpu/GPURenderPassEncoder.h:
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::GPURenderPassEncoder::setBlendColor):
        (WebCore::GPURenderPassEncoder::setViewport):
        (WebCore::GPURenderPassEncoder::setScissorRect):

2019-04-09  Andy Estes  <aestes@apple.com>

        [Apple Pay] Add release logging to PaymentCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=196738

        Reviewed by Alex Christensen.

        When allowed, log interactions with PaymentCoordinator to os_log to help diagnose Apple Pay bugs.

        The following information might be logged: names of functions called, merchant API versions,
        boolean results of canMakePayments(), boolean results of beginPaymentSession(), whether
        completePaymentSession() was called with a final state result, boolean results of
        shouldAllowApplePay(), whether a document has evaluated user agent scripts or is running
        user scripts, and whether a client supports unrestricted Apple Pay.

        * 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::completePaymentSession):
        (WebCore::PaymentCoordinator::abortPaymentSession):
        (WebCore::PaymentCoordinator::cancelPaymentSession):
        (WebCore::PaymentCoordinator::validateMerchant):
        (WebCore::PaymentCoordinator::didAuthorizePayment):
        (WebCore::PaymentCoordinator::didSelectPaymentMethod):
        (WebCore::PaymentCoordinator::didSelectShippingMethod):
        (WebCore::PaymentCoordinator::didSelectShippingContact):
        (WebCore::PaymentCoordinator::didCancelPaymentSession):
        (WebCore::PaymentCoordinator::shouldAllowApplePay const):
        (WebCore::PaymentCoordinator::shouldAllowUserAgentScripts const):
        * Modules/applepay/PaymentCoordinatorClient.h:
        (WebCore::PaymentCoordinatorClient::isAlwaysOnLoggingAllowed const):
        * platform/Logging.h:
        * testing/MockPaymentCoordinator.h:

2019-04-09  John Wilander  <wilander@apple.com>

        Pick up Ad Click Attribution conversions in NetworkResourceLoader::willSendRedirectedRequest()
        https://bugs.webkit.org/show_bug.cgi?id=196558
        <rdar://problem/47650245>

        Reviewed by Youenn Fablet.

        Tests: http/tests/adClickAttribution/attribution-conversion-through-cross-site-image-redirect.html
               http/tests/adClickAttribution/attribution-conversion-through-image-redirect-with-priority.html
               http/tests/adClickAttribution/attribution-conversion-through-image-redirect-without-priority.html

        The existing API tests were expanded too.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAdClickAttribution const):
           Enhanced the use of AdClickAttribution::MaxEntropy.
        * loader/AdClickAttribution.cpp:
        (WebCore::AdClickAttribution::parseConversionRequest):
            New function to parse and validate URLs with a path starting with
            /.well-known/ad-click-attribution/.
        (WebCore::AdClickAttribution::toString const):
            Added output for the conversion priority for testing purposes.
        * loader/AdClickAttribution.h:
        (WebCore::AdClickAttribution::Campaign::isValid const):
        (WebCore::AdClickAttribution::Conversion::isValid const):
           Enhanced the use of AdClickAttribution::MaxEntropy.

2019-04-09  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Apple builds should use ICU_INCLUDE_DIRS
        https://bugs.webkit.org/show_bug.cgi?id=196720

        Reviewed by Konstantin Tokarev.

        * PlatformMac.cmake:

2019-04-09  Jer Noble  <jer.noble@apple.com>

        Test for: 196095 Inband Text Track cues interspersed with Data cues can display out of order.
        https://bugs.webkit.org/show_bug.cgi?id=196097

        Reviewed by Eric Carlson.

        Test: media/track/track-in-band-metadata-display-order.html

        Add a method in Internals to create a TextTrackCueGeneric (which can normally only be created
        by parsing an in-band media track). This requires adding IDL for TextTrackCueGeneric, and exporting
        TextTrackCueGeneric for testing.

        Drive-by fixes:

        Add runtime logging to MediaControlTextTrackContainerElement. This necessitates modifying the
        parentMediaElement() method to take a const Node*, and const_cast that constness away in order to return
        a HTMLMediaElement*

        TextTrackCue, VTTCue, TextTrackCueGeneric, and DataCue should all use the WTF TypeCasts macros to
        enable use of is<> and downcast<>.

        * Source/WebCore/CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::parentMediaElement):
        * html/shadow/MediaControlElementTypes.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
        (WebCore::MediaControlTextTrackContainerElement::logger const):
        (WebCore::MediaControlTextTrackContainerElement::logIdentifier const):
        (WebCore::MediaControlTextTrackContainerElement::logChannel const):
        * html/shadow/MediaControlElements.h:
        * html/track/DataCue.h:
        (isType):
        * html/track/TextTrackCueGeneric.h:
        (isType):
        * html/track/TextTrackCueGeneric.idl: Added.
        * html/track/VTTCue.h:
        (isType):
        * testing/Internals.cpp:
        (WebCore::Internals::createGenericCue):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-04-09  Sihui Liu  <sihui_liu@apple.com>

        Remove unnecessary network process assertion for IDB close
        https://bugs.webkit.org/show_bug.cgi?id=196693

        Reviewed by Geoffrey Garen.

        We already took assertion at WebCore::SQLiteDatabase::close.

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::create):
        (WebCore::IDBServer::IDBServer::IDBServer):
        (WebCore::IDBServer::m_quotaManagerGetter): Deleted.
        (WebCore::IDBServer::IDBServer::closeDatabase): Deleted.
        (WebCore::IDBServer::IDBServer::didCloseDatabase): Deleted.
        * Modules/indexeddb/server/IDBServer.h:
        (WebCore::IDBServer::IDBServer::create): Deleted.
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::performCurrentDeleteOperation):
        (WebCore::IDBServer::UniqueIDBDatabase::scheduleShutdownForClose):
        (WebCore::IDBServer::UniqueIDBDatabase::didShutdownForClose):
        (WebCore::IDBServer::UniqueIDBDatabase::didDeleteBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::immediateCloseForUserDelete):
        (WebCore::IDBServer::UniqueIDBDatabase::notifyServerAboutClose): Deleted.
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

2019-04-09  Eike Rathke  <erack@redhat.com>

        Initialize trackTypeAsString for call to GST_INFO_OBJECT() in TrackType::Text
        https://bugs.webkit.org/show_bug.cgi?id=196350

        Reviewed by Xabier Rodriguez-Calvar.

        trackTypeAsString was uninitialized in the
        TrackPrivateBaseGStreamer::TrackType::Text case when calling
        GST_INFO_OBJECT().

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::enableTrack):

2019-04-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [ATK] Cleanup WebKitAccessibleHyperlink
        https://bugs.webkit.org/show_bug.cgi?id=196602

        Reviewed by Michael Catanzaro.

        Cleanups:

         - Rename webkitAccessibleHyperlinkNew() as webkitAccessibleHyperlinkGetOrCreate() and move the code to get/set
           the object data here.
         - Use WEBKIT_DEFINE_TYPE instead of custom type registration. This ensures that all CStrings used in private
           struct are no longer leaked.
         - Remove all confusing core() functions and simply use webkitAccessibleGetAccessibilityObject().
         - Use nullptr instead of 0 and other coding style issues.

        * accessibility/atk/WebKitAccessibleHyperlink.cpp:
        (webkitAccessibleHyperlinkActionDoAction):
        (webkitAccessibleHyperlinkActionGetNActions):
        (webkitAccessibleHyperlinkActionGetDescription):
        (webkitAccessibleHyperlinkActionGetKeybinding):
        (webkitAccessibleHyperlinkActionGetName):
        (atk_action_interface_init):
        (webkitAccessibleHyperlinkGetURI):
        (webkitAccessibleHyperlinkGetObject):
        (rangeLengthForObject):
        (webkitAccessibleHyperlinkGetStartIndex):
        (webkitAccessibleHyperlinkGetEndIndex):
        (webkitAccessibleHyperlinkIsValid):
        (webkitAccessibleHyperlinkGetNAnchors):
        (webkitAccessibleHyperlinkIsSelectedLink):
        (webkitAccessibleHyperlinkGetProperty):
        (webkitAccessibleHyperlinkSetProperty):
        (webkit_accessible_hyperlink_class_init):
        (webkitAccessibleHyperlinkGetOrCreate):
        (core): Deleted.
        (atkActionInterfaceInit): Deleted.
        (getRangeLengthForObject): Deleted.
        (webkitAccessibleHyperlinkFinalize): Deleted.
        (webkitAccessibleHyperlinkClassInit): Deleted.
        (webkitAccessibleHyperlinkInit): Deleted.
        (webkitAccessibleHyperlinkGetType): Deleted.
        (webkitAccessibleHyperlinkNew): Deleted.
        (webkitAccessibleHyperlinkGetAccessibilityObject): Deleted.
        * accessibility/atk/WebKitAccessibleHyperlink.h:
        * accessibility/atk/WebKitAccessibleInterfaceHyperlinkImpl.cpp:
        (webkitAccessibleHyperlinkImplGetHyperlink):
        (webkitAccessibleHyperlinkImplInterfaceInit):

2019-04-08  Simon Fraser  <simon.fraser@apple.com>

        Remove some iOS #ifdefs around sticky-related code
        https://bugs.webkit.org/show_bug.cgi?id=196726

        Reviewed by Zalan Bujtas.

        Now that async overflow scrolling can be enabled on macOS, RenderLayerCompositor::isAsyncScrollableStickyLayer()
        should not have iOS-only code.

        The answer to the FIXME in RenderLayerCompositor::computeStickyViewportConstraints is obvious: composited
        overflow:scroll can be the container for sticky. The assertion can be removed.

        * rendering/RenderLayer.cpp: Fix spacing in some logging.
        (WebCore::outputPaintOrderTreeRecursive):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::isAsyncScrollableStickyLayer const):
        (WebCore::RenderLayerCompositor::computeStickyViewportConstraints const):

2019-04-08  Don Olmstead  <don.olmstead@sony.com>

        [CMake][WinCairo] Separate copied headers into different directories
        https://bugs.webkit.org/show_bug.cgi?id=196655

        Reviewed by Michael Catanzaro.

        * CMakeLists.txt:
        * PlatformWin.cmake:

2019-04-08  Chris Fleizach  <cfleizach@apple.com>

        AX: Automatically compute accessibility labels for Apple Pay buttons
        https://bugs.webkit.org/show_bug.cgi?id=196661

        Reviewed by Joanmarie Diggs.

        Detect Apple Pay buttons and return a standard role and label for them based on their type.

        Test: accessibility/mac/apple-pay-labels.html
              accessibility/mac/apple-pay-session-v4.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isControl const):
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::applePayButtonDescription const):
        (WebCore::AccessibilityRenderObject::titleElementText const):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::isApplePayButton const):
        (WebCore::AccessibilityRenderObject::applePayButtonType const):
        * accessibility/AccessibilityRenderObject.h:
        * en.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::AXApplePayPlainLabel):
        (WebCore::AXApplePayBuyLabel):
        (WebCore::AXApplePaySetupLabel):
        (WebCore::AXApplePayDonateLabel):
        (WebCore::AXApplePayCheckOutLabel):
        (WebCore::AXApplePayBookLabel):
        (WebCore::AXApplePaySubscribeLabel):
        * platform/LocalizedStrings.h:

2019-04-08  Chris Fleizach  <cfleizach@apple.com>

        AX: Support API: accessibilityReplaceRange:withText
        https://bugs.webkit.org/show_bug.cgi?id=196636

        Reviewed by Daniel Bates.

        Support this platform API on mac to provide a way to replace a range of editable text.

        Test: accessibility/mac/replace-text-with-range.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::replaceTextInRange):
        * accessibility/AccessibilityObject.h:
        * accessibility/mac/AccessibilityObjectBase.mm:
        (WebCore::PlainTextRange::PlainTextRange):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityReplaceRange:withText:]):

2019-04-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Do not allow starting selection drags when selection views are not visible
        https://bugs.webkit.org/show_bug.cgi?id=196686
        <rdar://problem/49399192>

        Reviewed by Tim Horton.

        See WebKit ChangeLog for more details.

        Tests:  DragAndDropTests.CanDragImageWhenNotFirstResponder
                DragAndDropTests.DoNotPerformSelectionDragWhenNotFirstResponder

        * page/DragController.cpp:
        (WebCore::DragController::draggableElement const):

        Make this respect the case where m_dragSourceAction does not include DragSourceActionSelection. All the other
        drag source types are currently consulted in this method, with the exception of DragSourceActionSelection.

2019-04-08  Youenn Fablet  <youenn@apple.com>

        Add a test to check for the service worker process name
        https://bugs.webkit.org/show_bug.cgi?id=196621

        Reviewed by Chris Dumez.

        Add a service worker internal API to get process name.
        Covered by updated test.

        * WebCore.xcodeproj/project.pbxproj:
        * testing/ServiceWorkerInternals.cpp:
        (WebCore::ServiceWorkerInternals::processName const):
        * testing/ServiceWorkerInternals.h:
        * testing/ServiceWorkerInternals.idl:
        * testing/ServiceWorkerInternals.mm: Added.

2019-04-08  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, speculative fix for build failure in old macOS after r243887
        https://bugs.webkit.org/show_bug.cgi?id=196475

        * dom/NodeList.h:

2019-04-08  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Fix Web GPU experimental feature on iOS
        https://bugs.webkit.org/show_bug.cgi?id=196632

        Reviewed by Myles C. Maxfield.

        Add feature conditionals for iOS 11.
        Properly make Web GPU available on iOS 11+.

        * Configurations/FeatureDefines.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

2019-04-08  Timothy Hatcher  <timothy@apple.com>

        Unreviewed build fix for iOSMac after r243893.
        https://bugs.webkit.org/show_bug.cgi?id=196707

        * dom/Element.cpp:
        (WebCore::parentCrossingFrameBoundaries): Remove ENABLE(POINTER_EVENTS) since computedTouchActions()
        no longer uses parentCrossingFrameBoundaries().

2019-04-08  Youenn Fablet  <youenn@apple.com>

        Lazily construct Navigator serviceWorker
        https://bugs.webkit.org/show_bug.cgi?id=196692

        Reviewed by Chris Dumez.

        Make NavigatorBase a ContextDestructionObserver.
        This allows to get the navigator script execution context.
        Use it when creating the navigator ServiceWorkerContainer object.
        For GC, introduce serviceWorkerIfAny which returns the container if created.
        No JS observable change of behavior.
        Covered by existing tests.

        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::visitAdditionalChildren):
        * bindings/js/JSWorkerNavigatorCustom.cpp:
        (WebCore::JSWorkerNavigator::visitAdditionalChildren):
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::NavigatorBase):
        (WebCore::NavigatorBase::serviceWorkerIfAny):
        (WebCore::NavigatorBase::serviceWorker):
        * page/NavigatorBase.h:

2019-04-08  Antti Koivisto  <antti@apple.com>

        Update touch-action region on property changes
        https://bugs.webkit.org/show_bug.cgi?id=196608

        Reviewed by Simon Fraser.

        Test: pointerevents/ios/touch-action-region-dynamic.html

        * rendering/EventRegion.cpp:
        (WebCore::EventRegion::touchActionsForPoint const):

        Correctly return 'auto' when nothing is found from the regions (this code is not used yet).

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):

        React to 'touch-action' property changes, similarly to 'pointer-events'.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::invalidateEventRegion):

        Test if need to invalidate.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setContentsNeedDisplay):
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):

        Call invalidateEventRegion explicitly instead of relying on compositing update. This ensures
        that we update the top level event region correctly when we have touch-actions.

2019-04-08  Javier Fernandez  <jfernandez@igalia.com>

        Implement white-space:break-spaces value
        https://bugs.webkit.org/show_bug.cgi?id=177327

        Reviewed by Myles Maxfield and Zalan Bujtas.

        Finally the CSS WG decided [1] to move back the 'break-spaces' value to
        the 'white-space' property. This makes the parsing logic easier than
        the previous approach of using the 'overflow-wrap' property.

        This new value prevents the white-space sequence to collapse and gives
        breaking opportunities after every preserved white-space.

        https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces

        Additionally, unlike 'pre-wrap', non-collapsible spaces or tabs at the
        end of a line cannot be hung or visually collapsed, since we want them
        to be preserved and broken.

        [1] https://github.com/w3c/csswg-drafts/pull/2841

        Tests: imported/w3c/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-008.html
               imported/w3c/web-platform-tests/css/css-text/white-space/break-spaces-003.html
               imported/w3c/web-platform-tests/css/css-text/white-space/break-spaces-009.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): New mapping for CSSVaueBreakSpaces.
        (WebCore::CSSPrimitiveValue::operator WhiteSpace const): New value BreakSpaces for the Whitespace enum.
        * css/CSSProperties.json: new 'break-spaces' value for the 'white-space' property.
        * css/CSSValueKeywords.in: new break-spaces keyword
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        * rendering/SimpleLineLayout.cpp:  The SimpleLineLayut codepath must handle properly the new behavior of preserved whitespaces.
        (WebCore::SimpleLineLayout::LineState::hasTrailingWhitespace const): Require that m_trailingWhitespaceWidth being greater than zero.
        (WebCore::SimpleLineLayout::LineState::hasWhitespaceFragments const): New function to detect former whitespae fragments that could be breaking opportunities.
        (WebCore::SimpleLineLayout::removeTrailingWhitespace): The 'break-spaces' feature forbids to remove any trailing whitespace.
        (WebCore::SimpleLineLayout::firstFragment): We have now leading whitespace sequences comming from the previous line.
        (WebCore::SimpleLineLayout::createLineRuns): We should revert some breaking opportunities if others were formerly found in the line.
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::Style::Style): New style fields to determine whether the break-space feature is being used. Also split out the break-all and breal-all values.
        * rendering/SimpleLineLayoutTextFragmentIterator.h:
        * rendering/line/BreakingContext.h: Different codepath but similar changes to properly handle the new behavior of preserved whitespace.
        (WebCore::BreakingContext::BreakingContext): New class field to determine whether there are some whitespace that may prevent the word ot be broken.
        (WebCore::BreakingContext::handleText): New line-breaking logic to implement the break-spaces behavior.
        (WebCore::BreakingContext::trailingSpacesHang): Cases where the preserved breakspaces should hand or overflow.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::collapseWhiteSpace): With break-spaces collapsing whitespaces is not allowed.
        (WebCore::RenderStyle::breakOnlyAfterWhiteSpace const): Add the WhiteSpace::BreakSpaces to this group.
        * rendering/style/RenderStyleConstants.h: A new constan added.

2019-04-08  Youenn Fablet  <youenn@apple.com>

        LibWebRTCMediaEndpoint does not need to hop to the signaling thread to gather stats
        https://bugs.webkit.org/show_bug.cgi?id=196697
        <rdar://problem/47477113>

        Reviewed by Eric Carlson.

        It is not thread safe to use m_backend in another thread than the main thread.
        It is not useful anymore to hop to the signaling thread to gather stats.
        No change of behavior.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::getStats):
        (WebCore::LibWebRTCMediaEndpoint::gatherStatsForLogging):

2019-04-08  Antoine Quint  <graouts@apple.com>

        [ Mac WK2 iOS Debug ] REGRESSION(r233667) Layout Test imported/w3c/web-platform-tests/web-animations/interfaces/DocumentTimeline/constructor.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=195233
        <rdar://problem/48527231>

        Reviewed by Dean Jackson.

        We need to create the "main" document timeline (document.timeline) if it doesn't already exist and use its current time as a basis for any other DocumentTimeline instance.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::currentTime):

2019-04-08  Antoine Quint  <graouts@apple.com>

        [Web Animations] JS wrapper may be deleted while animation is yet to dispatch its finish event
        https://bugs.webkit.org/show_bug.cgi?id=196118
        <rdar://problem/46614137>

        Reviewed by Chris Dumez.

        Test: webanimations/js-wrapper-kept-alive.html

        We need to teach WebAnimation to keep its JS wrapper alive if it's relevant or could become relevant again by virtue of having a timeline.
        We also need to ensure that the new implementation of hasPendingActivity() does not interfere with the ability of pages to enter the page
        cache when running animations.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::canSuspendForDocumentSuspension const):
        (WebCore::WebAnimation::stop):
        (WebCore::WebAnimation::hasPendingActivity const):
        * animation/WebAnimation.h:

2019-04-08  Eric Liang  <ericliang@apple.com>

        AX: <svg> elements with labels and no accessible contents are exposed as empty AXGroups
        https://bugs.webkit.org/show_bug.cgi?id=156774

        Reviewed by Chris Fleizach.

        Labelled SVGs without accessible descendants are exposed as AXImage rather than groups.

        Unlabelled equivalents are not exposed. Otherwise, SVGs with accessible descendants are exposed as AXGroup. 
        Also added back functionalities from last patch of determining whether a SVG element should be ignored.
        
        Test: accessibility/svg-shape-labelled.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::updateRoleAfterChildrenCreation):
        * accessibility/AccessibilitySVGElement.cpp:
        (WebCore::AccessibilitySVGElement::computeAccessibilityIsIgnored const):

2019-04-08  Youenn Fablet  <youenn@apple.com>

        Make sure UniqueIDBDatabaseConnection unregisters itself even if its database is gone
        https://bugs.webkit.org/show_bug.cgi?id=196651

        Reviewed by Brady Eidson.

        In UniqueIDBDatabase methods, many operations are refing the transaction
        so that it stays alive until a quota check decision is made.
        This extends the lifetime of the transaction which may be lasting
        longer than its database that may be cleared without waiting for the quota check decisions.

        We therefore need to make sure that the transaction is cleaning itself correctly at destruction time.

        Make sure that the transaction is unregistering itself from its IDBServer.
        To do so, the transaction keeps a weak ref to the IDBServer.

        This is timing sensitive hence difficult to test.

        * Modules/indexeddb/server/IDBServer.h:
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didAbortTransaction):
        Like done below for UniqueIDBDatabaseConnection::didCommitTransaction,
        add a check to ensure that either the database is we are in an error case.
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::UniqueIDBDatabaseTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::~UniqueIDBDatabaseTransaction):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:

2019-04-08  Christopher Reid  <chris.reid@sony.com>

        Undefined Behavior: m_experimentalImageMenuEnabled isn't initialized in HTMLImageElement when SERVICE_CONTROLS is disabled
        https://bugs.webkit.org/show_bug.cgi?id=196664

        Reviewed by Ross Kirsling.

        No observable change in behavior.

        Initialize m_experimentalImageMenuEnabled regardless of ENABLE(SERVICE_CONTROLS)

        * html/HTMLImageElement.cpp:

2019-04-08  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r243943.

        Caused test262 failures.

        Reverted changeset:

        "[JSC] Filter DontEnum properties in
        ProxyObject::getOwnPropertyNames()"
        https://bugs.webkit.org/show_bug.cgi?id=176810
        https://trac.webkit.org/changeset/243943

2019-04-05  Sergio Villar Senin  <svillar@igalia.com>

        [GTK][WPE] outlook.live.com displays old-fashioned UI
        https://bugs.webkit.org/show_bug.cgi?id=196642

        Reviewed by Carlos Garcia Campos.

        The new good looking UI is shown as long as pretend we're a Mac in the UA.

        * platform/UserAgentQuirks.cpp:
        (WebCore::urlRequiresChromeBrowser):

2019-04-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [ATK] Cleanup accessible wrapper base class
        https://bugs.webkit.org/show_bug.cgi?id=196601

        Reviewed by Mario Sanchez Prada.

        Cleanups:

         - Rename WebKitAccessibleWrapperAtk cpp and header as WebKitAccessible for consistency with the class name.
         - Use WEBKIT_DEFINE_TYPE instead of custom type registration. This ensures that all CStrings used in private
           struct are no longer leaked.
         - Move core object pointer to the private struct.
         - Remove confusing core() function and simply get the core object from the private struct.
         - Use nullptr instead of 0 and other coding style issues.
         - Rename cacheAndReturnAtkProperty as webkitAccessibleCacheAndReturnAtkProperty and use WebKitAccessible as
           instance parameter.
         - Make webkitAccessibleGetAccessibilityObject() return a reference, since we use a fallback object on detach it
           never returns nullptr.
         - Move objectFocusedAndCaretOffsetUnignored() to WebKitAccessibleUtil.

        * SourcesGTK.txt:
        * accessibility/atk/AXObjectCacheAtk.cpp:
        * accessibility/atk/WebKitAccessible.cpp: Renamed from Source/WebCore/accessibility/atk/WebKitAccessibleWrapperAtk.cpp.
        (webkitAccessibleGetName):
        (webkitAccessibleGetDescription):
        (setAtkRelationSetFromCoreObject):
        (isRootObject):
        (webkitAccessibleGetParent):
        (webkitAccessibleGetNChildren):
        (webkitAccessibleRefChild):
        (webkitAccessibleGetIndexInParent):
        (webkitAccessibleGetAttributes):
        (atkRole):
        (webkitAccessibleGetRole):
        (webkitAccessibleRefStateSet):
        (webkitAccessibleRefRelationSet):
        (webkitAccessibleInit):
        (webkitAccessibleGetObjectLocale):
        (webkit_accessible_class_init):
        (interfaceMaskFromObject):
        (uniqueAccessibilityTypeName):
        (accessibilityTypeFromObject):
        (webkitAccessibleNew):
        (webkitAccessibleGetAccessibilityObject):
        (webkitAccessibleDetach):
        (webkitAccessibleIsDetached):
        (webkitAccessibleCacheAndReturnAtkProperty):
        * accessibility/atk/WebKitAccessible.h: Renamed from Source/WebCore/accessibility/atk/WebKitAccessibleWrapperAtk.h.
        * accessibility/atk/WebKitAccessibleHyperlink.cpp:
        (core):
        * accessibility/atk/WebKitAccessibleInterfaceAction.cpp:
        (core):
        (webkitAccessibleActionGetKeybinding):
        (webkitAccessibleActionGetName):
        * accessibility/atk/WebKitAccessibleInterfaceComponent.cpp:
        (core):
        * accessibility/atk/WebKitAccessibleInterfaceDocument.cpp:
        (core):
        (documentAttributeValue):
        * accessibility/atk/WebKitAccessibleInterfaceEditableText.cpp:
        (core):
        * accessibility/atk/WebKitAccessibleInterfaceHypertext.cpp:
        (core):
        * accessibility/atk/WebKitAccessibleInterfaceImage.cpp:
        (core):
        (webkitAccessibleImageGetImageDescription):
        * accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:
        (core):
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (core):
        * accessibility/atk/WebKitAccessibleInterfaceTableCell.cpp:
        (core):
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (core):
        * accessibility/atk/WebKitAccessibleInterfaceValue.cpp:
        (core):
        * accessibility/atk/WebKitAccessibleUtil.cpp:
        (objectFocusedAndCaretOffsetUnignored):
        * accessibility/atk/WebKitAccessibleUtil.h:
        * editing/atk/FrameSelectionAtk.cpp:

2019-04-06  Antti Koivisto  <antti@apple.com>

        Combine event and touch action regions into a single class
        https://bugs.webkit.org/show_bug.cgi?id=196644
        <rdar://problem/49643614>

        Reviewed by Darin Adler.

        This patch replaces the existing TouchActionRegion class with the more general EventRegion class.
        It collects both the overall event region and the touch action regions. This avoids duplication
        and simplifies the code.

        The patch also adds serialization support for EventRegion, so touch-action regions gets passed
        to the UI process too.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::setEventRegion):
        (WebCore::GraphicsLayer::dumpProperties const):
        (WebCore::GraphicsLayer::setTouchActionRegion): Deleted.
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::eventRegion const):
        (WebCore::GraphicsLayer::touchActionRegion const): Deleted.
        * platform/graphics/Region.cpp:
        (WebCore::operator<<):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setEventRegion):
        (WebCore::GraphicsLayerCA::setTouchActionRegion): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * rendering/EventRegion.cpp: Copied from Source/WebCore/rendering/TouchActionRegion.cpp.
        (WebCore::EventRegion::operator== const):
        (WebCore::EventRegion::unite):
        (WebCore::EventRegion::translate):
        (WebCore::EventRegion::uniteTouchActions):
        (WebCore::EventRegion::touchActionsForPoint const):
        (WebCore::operator<<):
        (WebCore::TouchActionRegion::unite): Deleted.
        (WebCore::TouchActionRegion::actionsForPoint const): Deleted.
        (WebCore::TouchActionRegion::translate): Deleted.
        * rendering/EventRegion.h: Copied from Source/WebCore/rendering/TouchActionRegion.h.
        (WebCore::EventRegion::isEmpty const):
        (WebCore::EventRegion::contains const):
        (WebCore::EventRegion::hasTouchActions const):
        (WebCore::EventRegion::encode const):
        (WebCore::EventRegion::decode):
        (WebCore::TouchActionRegion::isEmpty const): Deleted.
        (WebCore::TouchActionRegion::operator== const): Deleted.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/PaintInfo.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::collectEventRegionForFragments):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateEventRegion):
        * rendering/RenderLayerModelObject.cpp:
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        * rendering/TouchActionRegion.cpp: Removed.
        * rendering/TouchActionRegion.h: Removed.

2019-04-05  Yongjun Zhang  <yongjun_zhang@apple.com>

        We should pass minimumEffectiveDeviceWidth to web process on new page creation.
        https://bugs.webkit.org/show_bug.cgi?id=196077
        <rdar://problem/49108202>

        Reviewed by Chris Dumez.

        If the page doesn't specify it requires to use the device width in viewport tag, we should try to scale down
        the page to fit the window width.

        Test: fast/viewport/ios/shrink-to-fit-for-page-without-viewport-meta.html

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::updateDefaultConfiguration): Also update the minimum layout size
            when the default configuration is changed.
        (WebCore::ViewportConfiguration::nativeWebpageParametersWithShrinkToFit): Make sure we fit the content
            to window width.

2019-04-05  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Deactivate the audio session before the WebProcess suspends.
        https://bugs.webkit.org/show_bug.cgi?id=196658

        Reviewed by Eric Carlson.

        Test: platform/mac/media/audio-session-deactivated-when-suspended.html

        Deactivate the audio session when we are notified that the session will suspend.

        Drive-by fix: don't try to begin playback when the process is suspended.

        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::sessionWillBeginPlayback):
        (WebCore::PlatformMediaSessionManager::processWillSuspend):
        (WebCore::PlatformMediaSessionManager::processDidResume):
        * platform/audio/PlatformMediaSessionManager.h:
        (WebCore::PlatformMediaSessionManager::processIsSuspended const):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setShouldDeactivateAudioSession):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::processWillSuspend):
        (WebCore::Internals::processDidResume):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-04-05  Sihui Liu  <sihui_liu@apple.com>

        [iOS] Web process gets suspended while holding locked database files
        https://bugs.webkit.org/show_bug.cgi?id=196519
        <rdar://problem/49531797>

        Reviewed by Chris Dumez.

        Don't use DatabaseTracker singleton before it is initialized.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::isInitialized):
        * Modules/webdatabase/DatabaseTracker.h:

2019-04-05  Ryosuke Niwa  <rniwa@webkit.org>

        Make WeakPtr<Element> possible and deploy it in form associated elements code
        https://bugs.webkit.org/show_bug.cgi?id=196626

        Reviewed by Antti Koivisto.

        Make Element inherit from CanMakeWeakPtr and deploy WeakPtr<*Element> in FormAssociatedElement and HTMLFormElement.

        No new tests sine there should be no behavioral change.

        * dom/Element.h:
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::FormAssociatedElement):
        (WebCore::FormAssociatedElement::insertedIntoAncestor):
        (WebCore::FormAssociatedElement::setForm):
        (WebCore::FormAssociatedElement::resetFormOwner):
        (WebCore::FormAssociatedElement::formAttributeChanged):
        * html/FormAssociatedElement.h:
        (WebCore::FormAssociatedElement::form const):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::asFormNamedItem):
        (WebCore::HTMLElement::asFormAssociatedElement):
        * html/HTMLElement.h:
        (WebCore::HTMLElement::asFormNamedItem): Deleted.
        * html/HTMLFormControlElement.h:
        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::formImageElements const): Inlined into updateNamedElementCache.
        (WebCore::HTMLFormControlsCollection::updateNamedElementCache const):
        * html/HTMLFormControlsCollection.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::registerInvalidAssociatedFormControl):
        (WebCore::HTMLFormElement::removeInvalidAssociatedFormControlIfNeeded):
        (WebCore::HTMLFormElement::registerImgElement):
        (WebCore::HTMLFormElement::defaultButton const):
        (WebCore::HTMLFormElement::resetDefaultButton):
        (WebCore::HTMLFormElement::matchesValidPseudoClass const):
        (WebCore::HTMLFormElement::matchesInvalidPseudoClass const):
        * html/HTMLFormElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::HTMLImageElement):
        (WebCore::HTMLImageElement::insertedIntoAncestor):
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.h:
        * html/HTMLMediaElement.h:
        * html/HTMLObjectElement.h:
        * html/HTMLPictureElement.h:
        * html/HTMLSlotElement.h:
        * svg/SVGElement.h:

2019-04-05  Caitlin Potter  <caitp@igalia.com>

        [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames()
        https://bugs.webkit.org/show_bug.cgi?id=176810

        Reviewed by Saam Barati.

        Previously, there was a comment here indicating uncertainty of whether it
        was necessary to filter DontEnum properties explicitly or not. It turns
        out that it was necessary in the case of JSC ProxyObjects.

        This patch adds DontEnum filtering for ProxyObjects, however we continue
        to explicitly filter them in JSDOMConvertRecord, which needs to use the
        property descriptor after filtering. This change prevents observably
        fetching the property descriptor twice per property.

        * bindings/js/JSDOMConvertRecord.h:

2019-04-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed manual rollout of r243929
        https://bugs.webkit.org/show_bug.cgi?id=196626

        * dom/Element.h:
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::FormAssociatedElement):
        (WebCore::FormAssociatedElement::insertedIntoAncestor):
        (WebCore::FormAssociatedElement::setForm):
        (WebCore::FormAssociatedElement::resetFormOwner):
        (WebCore::FormAssociatedElement::formAttributeChanged):
        * html/FormAssociatedElement.h:
        (WebCore::FormAssociatedElement::form const):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::asFormNamedItem): Deleted.
        (WebCore::HTMLElement::asFormAssociatedElement): Deleted.
        * html/HTMLElement.h:
        (WebCore::HTMLElement::asFormNamedItem):
        * html/HTMLFormControlElement.h:
        * html/HTMLFormControlsCollection.cpp:
        (WebCore:: const):
        (WebCore::HTMLFormControlsCollection::updateNamedElementCache const):
        * html/HTMLFormControlsCollection.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::registerInvalidAssociatedFormControl):
        (WebCore::HTMLFormElement::removeInvalidAssociatedFormControlIfNeeded):
        (WebCore::HTMLFormElement::registerImgElement):
        (WebCore::HTMLFormElement::defaultButton const):
        (WebCore::HTMLFormElement::resetDefaultButton):
        (WebCore::HTMLFormElement::matchesValidPseudoClass const):
        (WebCore::HTMLFormElement::matchesInvalidPseudoClass const):
        * html/HTMLFormElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::HTMLImageElement):
        (WebCore::HTMLImageElement::insertedIntoAncestor):
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.h:
        * html/HTMLMediaElement.h:
        * html/HTMLObjectElement.h:
        * html/HTMLPictureElement.h:
        * html/HTMLSlotElement.h:
        * svg/SVGElement.h:

2019-04-05  Sihui Liu  <sihui_liu@apple.com>

        [iOS] Web process gets suspended while holding locked database files
        https://bugs.webkit.org/show_bug.cgi?id=196519
        <rdar://problem/49531797>

        Reviewed by Chris Dumez.

        We should close all databases and make sure not open new databases when web process is ready to suspend.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::setIsDatabaseOpeningForbidden):
        (WebCore::SQLiteDatabase::open):
        * platform/sql/SQLiteDatabase.h:
        * platform/sql/SQLiteDatabaseTracker.cpp:
        (WebCore::SQLiteDatabaseTracker::setClient):
        (WebCore::SQLiteDatabaseTracker::incrementTransactionInProgressCount):
        (WebCore::SQLiteDatabaseTracker::decrementTransactionInProgressCount):
        (WebCore::SQLiteDatabaseTracker::hasTransactionInProgress):

2019-04-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r243833.
        https://bugs.webkit.org/show_bug.cgi?id=196645

        This change breaks build of WPE and GTK ports (Requested by
        annulen on #webkit).

        Reverted changeset:

        "[CMake][WTF] Mirror XCode header directories"
        https://bugs.webkit.org/show_bug.cgi?id=191662
        https://trac.webkit.org/changeset/243833

2019-04-05  David Kilzer  <ddkilzer@apple.com>

        REGRESSION(r243887): Try to fix Windows builds by including <wtf/IsoMalloc.h>

        Caused by:
            [WebCore] Put most of derived classes of ScriptWrappable into IsoHeap
            https://bugs.webkit.org/show_bug.cgi?id=196475

        * css/CSSComputedStyleDeclaration.h:
        * dom/DOMRectReadOnly.h:
        * dom/LiveNodeList.h:
        * dom/NodeIterator.h:
        * dom/TreeWalker.h:
        * fileapi/Blob.h:
        * fileapi/File.h:
        * fileapi/FileList.h:
        * html/CachedHTMLCollection.h:
        * html/HTMLFormElement.h:
        * html/HTMLNameCollection.h:
        * html/canvas/GPUBasedCanvasRenderingContext.h:
        * page/RemoteDOMWindow.h:

2019-04-05  Ryosuke Niwa  <rniwa@webkit.org>

        Make WeakPtr<Element> possible and deploy it in form associated elements code
        https://bugs.webkit.org/show_bug.cgi?id=196626

        Reviewed by Antti Koivisto.

        Make Element inherit from CanMakeWeakPtr and deploy WeakPtr<*Element> in FormAssociatedElement and HTMLFormElement.

        No new tests sine there should be no behavioral change.

        * dom/Element.h:
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::FormAssociatedElement):
        (WebCore::FormAssociatedElement::insertedIntoAncestor):
        (WebCore::FormAssociatedElement::setForm):
        (WebCore::FormAssociatedElement::resetFormOwner):
        (WebCore::FormAssociatedElement::formAttributeChanged):
        * html/FormAssociatedElement.h:
        (WebCore::FormAssociatedElement::form const):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::asFormNamedItem):
        (WebCore::HTMLElement::asFormAssociatedElement):
        * html/HTMLElement.h:
        (WebCore::HTMLElement::asFormNamedItem): Deleted.
        * html/HTMLFormControlElement.h:
        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::formImageElements const): Inlined into updateNamedElementCache.
        (WebCore::HTMLFormControlsCollection::updateNamedElementCache const):
        * html/HTMLFormControlsCollection.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::registerInvalidAssociatedFormControl):
        (WebCore::HTMLFormElement::removeInvalidAssociatedFormControlIfNeeded):
        (WebCore::HTMLFormElement::registerImgElement):
        (WebCore::HTMLFormElement::defaultButton const):
        (WebCore::HTMLFormElement::resetDefaultButton):
        (WebCore::HTMLFormElement::matchesValidPseudoClass const):
        (WebCore::HTMLFormElement::matchesInvalidPseudoClass const):
        * html/HTMLFormElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::HTMLImageElement):
        (WebCore::HTMLImageElement::insertedIntoAncestor):
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.h:
        * html/HTMLMediaElement.h:
        * html/HTMLObjectElement.h:
        * html/HTMLPictureElement.h:
        * html/HTMLSlotElement.h:
        * svg/SVGElement.h:

2019-04-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [ATK] Use a smart pointer for AccessibilityObject wrapper and remove GTK specific code
        https://bugs.webkit.org/show_bug.cgi?id=196593
        <rdar://problem/49599153>

        Reviewed by Michael Catanzaro.

        We have specific code for GTK to get/set the wrapper only because we don't use smart pointers. Also use
        WebKitAccessible as AccessibilityObjectWrapper instead of generic AtkObject, to enforce wrappers to be
        WebKitAccessible instances. This requires a few casts to AtkObject.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::setWrapper):
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::detachWrapper):
        (WebCore::AXObjectCache::attachWrapper):
        (WebCore::notifyChildrenSelectionChange):
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification):
        (WebCore::AXObjectCache::frameLoadingEventPlatformNotification):
        (WebCore::AXObjectCache::platformHandleFocusedUIElementChanged):
        * accessibility/atk/AccessibilityObjectAtk.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceComponent.cpp:
        (webkitAccessibleComponentRefAccessibleAtPoint):
        * accessibility/atk/WebKitAccessibleInterfaceHypertext.cpp:
        (webkitAccessibleHypertextGetLink):
        (webkitAccessibleHypertextGetNLinks):
        * accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:
        (webkitAccessibleSelectionRefSelection):
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (webkitAccessibleTableRefAt):
        (webkitAccessibleTableGetColumnHeader):
        (webkitAccessibleTableGetRowHeader):
        (webkitAccessibleTableGetCaption):
        * accessibility/atk/WebKitAccessibleInterfaceTableCell.cpp:
        (convertToGPtrArray):
        (webkitAccessibleTableCellGetTable):
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (accessibilityObjectLength):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkRelationSetFromCoreObject):
        (atkParentOfRootObject):
        (webkitAccessibleGetParent):
        (webkitAccessibleRefChild):
        (isTextWithCaret):
        * editing/atk/FrameSelectionAtk.cpp:
        (WebCore::emitTextSelectionChange):
        (WebCore::maybeEmitTextFocusChange):

2019-04-04  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] REGRESSION (r242687): Programmatic scroll of overflow scroll results in bad rendering
        https://bugs.webkit.org/show_bug.cgi?id=195584

        Reviewed by Zalan Bujtas.

        Push data to the scrolling tree about whether an overflow:scroll scroll was programmatic, by having
        RenderLayer::scrollToOffset() call into AsyncScrollingCoordinator::requestScrollPositionUpdate(),
        just as we do for frames.

        AsyncScrollingCoordinator::requestScrollPositionUpdate() is generalized to take any ScrollableArea.

        Fix an assumption in the ScrollingTree that we only care about programmatic scrolls on the root node.
        ScrollingTree::commitTreeState() no longer sets isHandlingProgrammaticScroll; instead,
        callers of ScrollingTreeScrollingNode::scrollTo() pass a ScrollType. Commit functions pass
        ScrollType::Programmatic when handling RequestedScrollPosition changes as necessary.

        Programmatic scrolls need to get to the scrolling tree in the UI process so that we update
        the tree's notion of scroll position, and trigger actual UIScrollView scrolls (layers may have
        already been put in the right locations, but the UI process needs to know that a scroll happened).
        However, we need to prevent notifications from programmatic scrolls getting back to the
        web process, because this causes jumpiness. This is done via an early return in
        RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll().

        Tests: scrollingcoordinator/ios/programmatic-overflow-scroll.html
               scrollingcoordinator/ios/programmatic-page-scroll.html

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::requestScrollPositionUpdate):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        (WebCore::ScrollingTree::isHandlingProgrammaticScroll): Deleted.
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::isHandlingProgrammaticScroll const):
        (WebCore::ScrollingTree::setIsHandlingProgrammaticScroll):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::scrollBy):
        (WebCore::ScrollingTreeScrollingNode::scrollTo):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateAfterChildren):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::scrollingNodeID const):
        * rendering/RenderLayer.h:
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::timerFired):

2019-04-04  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, speculative fix for build failure
        https://bugs.webkit.org/show_bug.cgi?id=196475

        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.h:

2019-04-04  Ryosuke Niwa  <rniwa@webkit.org>

        Element::isFocusable() debug asserts too frequently
        https://bugs.webkit.org/show_bug.cgi?id=196634

        Reviewed by Geoffrey Garen.

        Remove the debug assertion for now.

        * dom/Element.cpp:
        (WebCore::Element::isFocusable const):

2019-04-04  Simon Fraser  <simon.fraser@apple.com>

        Have ScrollableArea store a ScrollType for the current scroll
        https://bugs.webkit.org/show_bug.cgi?id=196627

        Reviewed by Zalan Bujtas.

        RenderLayer had isInUserScroll() which is the opposite of ScrollableArea::inProgrammaticScroll(),
        so just have ScrollableArea store a ScrollType.

        RenderLayer's scrolling bottleneck, scrollToOffset(), now takes a ScrollType, and pushes
        it onto the base class.

        AsyncScrollingCoordinator::requestScrollPositionUpdate() can use the incoming scrollType (currently
        incorrect for iOS WK2 overflow) rather than deducing a user scroll from ScrollingLayerPositionAction.

        No behavior change.

        * page/FrameView.cpp:
        (WebCore::FrameView::setFrameRect):
        (WebCore::FrameView::topContentInsetDidChange):
        (WebCore::FrameView::updateLayoutViewport):
        (WebCore::FrameView::setScrollPosition):
        (WebCore::FrameView::shouldUpdateCompositingLayersAfterScrolling const):
        (WebCore::FrameView::setWasScrolledByUser):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::LayoutScope::LayoutScope):
        (WebCore::LayoutScope::~LayoutScope):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::overflowScrollPositionChangedForNode):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::reconcileScrollingState):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setScrollPosition):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::ScrollableArea):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::currentScrollType const):
        (WebCore::ScrollableArea::setCurrentScrollType):
        (WebCore::ScrollableArea::setIsUserScroll): Deleted.
        (WebCore::ScrollableArea::inProgrammaticScroll const): Deleted.
        (WebCore::ScrollableArea::setInProgrammaticScroll): Deleted.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::scrollToXPosition):
        (WebCore::RenderLayer::scrollToYPosition):
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::scrollTo):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateScrollOffset):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::start):

2019-04-04  Shawn Roberts  <sroberts@apple.com>

        Unreviewed, rolling out r243868.

        Causing timeouts failures on several queues

        Reverted changeset:

        "[Web Animations] JS wrapper may be deleted while animation is
        yet to dispatch its finish event"
        https://bugs.webkit.org/show_bug.cgi?id=196118
        https://trac.webkit.org/changeset/243868

2019-04-04  Youenn Fablet  <youenn@apple.com>

        Pass storage quota parameters from UIProcess to NetworkProcess as part of WebsiteDataStore parameters
        https://bugs.webkit.org/show_bug.cgi?id=196543

        Reviewed by Alex Christensen.

        Add a default routine to compute a third party quota from a per origin quota.
        No change of behavior.

        * storage/StorageQuotaManager.h:
        (WebCore::StorageQuotaManager::defaultThirdPartyQuotaFromPerOriginQuota):
        (WebCore::StorageQuotaManager::defaultThirdPartyQuota):

2019-04-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r243807 and r243824.
        https://bugs.webkit.org/show_bug.cgi?id=196611

        Test added is a flaky timeout on iOS Simulator, 3 tests
        unskipped are flaky failures (Requested by ShawnRoberts on
        #webkit).

        Reverted changesets:

        "Blob type cannot be stored correctly in IDB when
        IDBObjectStore has autoIncrement and keyPath options"
        https://bugs.webkit.org/show_bug.cgi?id=196128
        https://trac.webkit.org/changeset/243807

        "Follow up fix for r243807: Use MarkedArgumentBuffer instead
        of Vector for JSValue"
        https://bugs.webkit.org/show_bug.cgi?id=196547
        https://trac.webkit.org/changeset/243824

2019-04-04  Simon Fraser  <simon.fraser@apple.com>

        Fix rare crash under collectRelatedCoordinatedScrollingNodes()
        https://bugs.webkit.org/show_bug.cgi?id=196610
        rdar://problem/49595426

        Reviewed by Zalan Bujtas.

        hasCompositedScrollableOverflow() doesn't check whether a layer is composited (it has
        to report the right status before layers have been created), so collectRelatedCoordinatedScrollingNodes()
        needs to check whether there's backing.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::collectRelatedCoordinatedScrollingNodes):

2019-04-04  Simon Fraser  <simon.fraser@apple.com>

        Move "inProgrammaticScroll" down to ScrollableArea
        https://bugs.webkit.org/show_bug.cgi?id=196614

        Reviewed by Zalan Bujtas.

        A future patch will need to update "inProgrammaticScroll" on RenderLayers, so push
        inProgrammaticScroll() down to ScrollableArea.

        ScrollableArea already has "isScrolledProgrammatically", which I rename to "scrollShouldClearLatchedState"
        to reduce confusion. It might be possible to remove this in future with some refactoring.

        Sadly we can no longer use SetForScope<> in FrameView after this change so add some manual save/restore code.

        * dom/Element.cpp:
        (WebCore::Element::setScrollLeft):
        (WebCore::Element::setScrollTop):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::completeWidgetWheelEvent):
        (WebCore::EventHandler::handleWheelEvent):
        * page/FrameView.cpp:
        (WebCore::FrameView::setFrameRect):
        (WebCore::FrameView::topContentInsetDidChange):
        (WebCore::FrameView::updateLayoutViewport):
        (WebCore::FrameView::setScrollPosition):
        (WebCore::FrameView::setWasScrolledByUser):
        * page/FrameView.h:
        * platform/ScrollView.h:
        (WebCore::ScrollView::inProgrammaticScroll const): Deleted.
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::ScrollableArea):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::inProgrammaticScroll const):
        (WebCore::ScrollableArea::setInProgrammaticScroll):
        (WebCore::ScrollableArea::scrollShouldClearLatchedState const):
        (WebCore::ScrollableArea::setScrollShouldClearLatchedState):
        (WebCore::ScrollableArea::isScrolledProgrammatically const): Deleted.
        (WebCore::ScrollableArea::setScrolledProgrammatically): Deleted.

2019-04-04  Sihui Liu  <sihui_liu@apple.com>

        Leak of UniqueIDBDatabase in network process running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=196565
        <rdar://problem/49346139>

        Reviewed by Geoffrey Garen.

        UniqueIDBDatabase will null itself after it receives confirmation about connecton close from its clients, but it
        is possible that the web process to network process connection closes before servers gets the 
        confirmDidCloseFromServer. Therefore, we should let UniqueIDBDatabase forget connection when it receives a 
        conenctionClosedFromClient.

        No new test because this bug is caused by race between network receiving conenctionClosedFromClient and 
        receiving confirmDidCloseFromServer. This is testable by running some existing layout tests in a row with leak 
        option.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::connectionClosedFromClient):
        (WebCore::IDBServer::UniqueIDBDatabase::confirmDidCloseFromServer):

2019-04-04  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix iOS build with recent SDKs.

        * platform/gamepad/cocoa/GameControllerGamepad.mm:
        (WebCore::GameControllerGamepad::GameControllerGamepad):

2019-04-04  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Host should be able to mute screen capture and camera/microphone independently
        https://bugs.webkit.org/show_bug.cgi?id=196555
        <rdar://problem/47303865>

        Reviewed by Youenn Fablet.

        Test: fast/mediastream/media-stream-page-muted.html

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream): Call setCaptureTracksMuted to pass page muted 
        state to tracks.
        (WebCore::MediaStream::startProducingData): Ditto.
        (WebCore::MediaStream::setCaptureTracksMuted): New.
        * Modules/mediastream/MediaStream.h:

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack): Call setMuted with page muted state.
        (WebCore::MediaStreamTrack::setMuted): Set muted according to page state and source type.
        (WebCore::MediaStreamTrack::pageMutedStateDidChange): Call setMuted.
        (WebCore::MediaStreamTrack::mediaState const): Update for new page state.
        * Modules/mediastream/MediaStreamTrack.h:

        * page/MediaProducer.h: Split capture muted state into two: camera/microphone and screen.

        * page/Page.h:
        (WebCore::Page::isMediaCaptureMuted const): Update for state changes.

        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::setCaptureTracksMuted): Deleted.
        (WebCore::MediaStreamPrivate::hasCaptureVideoSource const): Deleted.
        * platform/mediastream/MediaStreamPrivate.h:

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::setMuted): Log state.
        (WebCore::RealtimeMediaSource::notifyMutedChange): Call notifyMutedObservers on the
        next runloop so events aren't dispatched synchronously.

        * testing/Internals.cpp:
        (WebCore::Internals::setPageMuted): Add new state.

2019-04-04  Chris Dumez  <cdumez@apple.com>

        Unreviewed, update r243884 to use macros in Compiler.h instead.

        * platform/ios/LegacyTileGrid.mm:
        (WebCore::LegacyTileGrid::dropDistantTiles):

2019-04-04  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash under WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored()
        https://bugs.webkit.org/show_bug.cgi?id=196600
        <rdar://problem/49572996>

        Reviewed by Joanmarie Diggs.

        Audit AX code to not dereference renderer before checking if it's null.
        Not clear how to reproduce at this time.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::webAreaIsPresentational):
        (WebCore::AccessibilityRenderObject::layoutCount const):
        (WebCore::AccessibilityRenderObject::widget const):

2019-04-04  Antti Koivisto  <antti@apple.com>

        Compute accurate regions for touch-action
        https://bugs.webkit.org/show_bug.cgi?id=196536
        <rdar://problem/49516022>

        Reviewed by Simon Fraser.

        Tests: pointerevents/ios/touch-action-region-basic.html
               pointerevents/ios/touch-action-region-layers.html
               pointerevents/ios/touch-action-region-pan-x-y.html

        - Use style system to compute effective touch-action without additional tree walks.
        - Compute touch-action region in a fake paint, at the same time with the event region.

        This patch doesn't yet use the computed region for anything except test output.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/StyleResolver.cpp:
        (WebCore::computeEffectiveTouchActions):
        (WebCore::StyleResolver::adjustRenderStyle):

        Update RenderStyle::effectiveTouchAction.

        * dom/Element.cpp:
        (WebCore::Element::computedTouchActions const):

        Just get it from the style.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::setEventRegion):
        (WebCore::GraphicsLayer::setTouchActionRegion):
        (WebCore::GraphicsLayer::dumpProperties const):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::touchActionRegion const):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setTouchActionRegion):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/PaintInfo.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::collectEventRegionForFragments):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):

        Need to do this for the top compositing layer too.

        (WebCore::RenderLayerBacking::updateEventRegion):

        Compute touch-action region too.
        As a basic optimization avoid doing any extra work if there are no elements with non-default touch-action property.

        * rendering/TouchActionRegion.cpp: Added.
        (WebCore::toIndex):
        (WebCore::toTouchAction):
        (WebCore::toString):
        (WebCore::TouchActionRegion::unite):
        (WebCore::TouchActionRegion::actionsForPoint const):
        (WebCore::TouchActionRegion::translate):
        (WebCore::operator<<):
        * rendering/TouchActionRegion.h: Added.

        Class for collecting and maintaining touch-action region.

        (WebCore::TouchActionRegion::isEmpty const):
        (WebCore::TouchActionRegion::operator== const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::effectiveTouchActions const):
        (WebCore::RenderStyle::setEffectiveTouchActions):

        Implement as inherited property for efficiency (touch-action itself is non-inherited).

        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        * rendering/style/StyleRareInheritedData.h:

2019-04-04  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix linking error because the build of RTCIceTransport.cpp is handled in Xcode project side accidentally
        https://bugs.webkit.org/show_bug.cgi?id=196475

        We did not have RTCIceTransport.cpp in Sources.txt.

        * WebCore.xcodeproj/project.pbxproj:

2019-04-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [WebCore] Put most of derived classes of ScriptWrappable into IsoHeap
        https://bugs.webkit.org/show_bug.cgi?id=196475

        Reviewed by Saam Barati.

        This patch puts most of derived classes of ScriptWrappable into IsoHeap. We do not include derived classes of Event simply
        because Internal repository code also inherits it. After watching the result of this patch, we will try Event and its derived
        classes into IsoHeap too.

        This patch makes the following things IsoHeap-allocated. These classes are listed by using lldb python script.

            1. DOM collections (HTMLCollection etc.)
            2. WebAudio nodes
            3. IDB classes
            4. FileSystem API classes
            5. Canvas contexts
            6. WebRTC classses
            7. XMLHttpRequest related classes
            8. WebSocket related classes
            9. Worker and Worklet related classes
            10. Other misc classes

        * Modules/applepay/ApplePaySession.cpp:
        * Modules/applepay/ApplePaySession.h:
        * Modules/encryptedmedia/MediaKeySession.cpp:
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.cpp:
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.h:
        * Modules/entriesapi/DOMFileSystem.cpp:
        * Modules/entriesapi/DOMFileSystem.h:
        (WebCore::DOMFileSystem::createEntryForFile): Deleted.
        (WebCore::DOMFileSystem::name const): Deleted.
        * Modules/entriesapi/FileSystemDirectoryEntry.h:
        * Modules/entriesapi/FileSystemDirectoryReader.cpp:
        * Modules/entriesapi/FileSystemDirectoryReader.h:
        * Modules/entriesapi/FileSystemEntry.cpp:
        * Modules/entriesapi/FileSystemEntry.h:
        * Modules/entriesapi/FileSystemFileEntry.h:
        * Modules/geolocation/Geolocation.cpp:
        * Modules/geolocation/Geolocation.h:
        (WebCore::Geolocation::document const): Deleted.
        (WebCore::Geolocation::frame const): Deleted.
        (WebCore::Geolocation::resetIsAllowed): Deleted.
        (WebCore::Geolocation::isAllowed const): Deleted.
        (WebCore::Geolocation::isDenied const): Deleted.
        (WebCore::Geolocation::hasListeners const): Deleted.
        * Modules/indexeddb/IDBCursor.cpp:
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBCursorWithValue.cpp:
        * Modules/indexeddb/IDBCursorWithValue.h:
        * Modules/indexeddb/IDBDatabase.cpp:
        * Modules/indexeddb/IDBDatabase.h:
        (WebCore::IDBDatabase::info const): Deleted.
        (WebCore::IDBDatabase::databaseConnectionIdentifier const): Deleted.
        (WebCore::IDBDatabase::connectionProxy): Deleted.
        (WebCore::IDBDatabase::isClosingOrClosed const): Deleted.
        * Modules/indexeddb/IDBKeyRange.cpp:
        * Modules/indexeddb/IDBKeyRange.h:
        (WebCore::IDBKeyRange::lower const): Deleted.
        (WebCore::IDBKeyRange::upper const): Deleted.
        (WebCore::IDBKeyRange::lowerOpen const): Deleted.
        (WebCore::IDBKeyRange::upperOpen const): Deleted.
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        * Modules/indexeddb/IDBOpenDBRequest.h:
        * Modules/indexeddb/IDBRequest.cpp:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.cpp:
        * Modules/indexeddb/IDBTransaction.h:
        (WebCore::IDBTransaction::mode const): Deleted.
        (WebCore::IDBTransaction::info const): Deleted.
        (WebCore::IDBTransaction::database): Deleted.
        (WebCore::IDBTransaction::database const): Deleted.
        (WebCore::IDBTransaction::originalDatabaseInfo const): Deleted.
        (WebCore::IDBTransaction::isVersionChange const): Deleted.
        (WebCore::IDBTransaction::isReadOnly const): Deleted.
        (WebCore::IDBTransaction::isFinished const): Deleted.
        * Modules/mediarecorder/MediaRecorder.cpp:
        * Modules/mediarecorder/MediaRecorder.h:
        * Modules/mediasession/MediaRemoteControls.cpp:
        * Modules/mediasession/MediaRemoteControls.h:
        (WebCore::MediaRemoteControls::create): Deleted.
        (WebCore::MediaRemoteControls::previousTrackEnabled const): Deleted.
        (WebCore::MediaRemoteControls::nextTrackEnabled const): Deleted.
        * Modules/mediasource/MediaSource.cpp:
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.cpp:
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBufferList.cpp:
        * Modules/mediasource/SourceBufferList.h:
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.h:
        * Modules/mediastream/MediaDeviceInfo.cpp:
        * Modules/mediastream/MediaDeviceInfo.h:
        (WebCore::MediaDeviceInfo::label const): Deleted.
        (WebCore::MediaDeviceInfo::deviceId const): Deleted.
        (WebCore::MediaDeviceInfo::groupId const): Deleted.
        (WebCore::MediaDeviceInfo::kind const): Deleted.
        * Modules/mediastream/MediaDevices.cpp:
        * Modules/mediastream/MediaDevices.h:
        * Modules/mediastream/MediaStream.cpp:
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/RTCDTMFSender.cpp:
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCDataChannel.cpp:
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCIceCandidate.cpp:
        * Modules/mediastream/RTCIceCandidate.h:
        (WebCore::RTCIceCandidate::candidate const): Deleted.
        (WebCore::RTCIceCandidate::sdpMid const): Deleted.
        (WebCore::RTCIceCandidate::sdpMLineIndex const): Deleted.
        (WebCore::RTCIceCandidate::setCandidate): Deleted.
        * Modules/mediastream/RTCIceTransport.cpp:
        * Modules/mediastream/RTCIceTransport.h:
        (WebCore::RTCIceTransport::create): Deleted.
        (WebCore::RTCIceTransport::state const): Deleted.
        (WebCore::RTCIceTransport::setState): Deleted.
        (WebCore::RTCIceTransport::gatheringState const): Deleted.
        (WebCore::RTCIceTransport::setGatheringState): Deleted.
        (WebCore::RTCIceTransport::RTCIceTransport): Deleted.
        * Modules/mediastream/RTCPeerConnection.cpp:
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCRtpReceiver.cpp:
        * Modules/mediastream/RTCRtpReceiver.h:
        (WebCore::RTCRtpReceiver::create): Deleted.
        (WebCore::RTCRtpReceiver::setBackend): Deleted.
        (WebCore::RTCRtpReceiver::getParameters): Deleted.
        (WebCore::RTCRtpReceiver::getContributingSources const): Deleted.
        (WebCore::RTCRtpReceiver::getSynchronizationSources const): Deleted.
        (WebCore::RTCRtpReceiver::track): Deleted.
        (WebCore::RTCRtpReceiver::backend): Deleted.
        * Modules/mediastream/RTCRtpSender.cpp:
        * Modules/mediastream/RTCRtpSender.h:
        (WebCore::RTCRtpSender::track): Deleted.
        (WebCore::RTCRtpSender::trackId const): Deleted.
        (WebCore::RTCRtpSender::trackKind const): Deleted.
        (WebCore::RTCRtpSender::mediaStreamIds const): Deleted.
        (WebCore::RTCRtpSender::setMediaStreamIds): Deleted.
        (WebCore::RTCRtpSender::isStopped const): Deleted.
        (WebCore::RTCRtpSender::backend): Deleted.
        * Modules/mediastream/RTCRtpTransceiver.cpp:
        * Modules/mediastream/RTCRtpTransceiver.h:
        (WebCore::RTCRtpTransceiver::create): Deleted.
        (WebCore::RTCRtpTransceiver::sender): Deleted.
        (WebCore::RTCRtpTransceiver::receiver): Deleted.
        (WebCore::RTCRtpTransceiver::iceTransport): Deleted.
        (WebCore::RTCRtpTransceiver::backend): Deleted.
        * Modules/mediastream/RTCSessionDescription.cpp:
        * Modules/mediastream/RTCSessionDescription.h:
        (WebCore::RTCSessionDescription::type const): Deleted.
        (WebCore::RTCSessionDescription::sdp const): Deleted.
        (WebCore::RTCSessionDescription::setSdp): Deleted.
        * Modules/notifications/Notification.cpp:
        * Modules/notifications/Notification.h:
        * Modules/paymentrequest/PaymentRequest.cpp:
        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/paymentrequest/PaymentResponse.cpp:
        * Modules/paymentrequest/PaymentResponse.h:
        * Modules/speech/SpeechSynthesisUtterance.cpp:
        * Modules/speech/SpeechSynthesisUtterance.h:
        * Modules/webaudio/AnalyserNode.cpp:
        * Modules/webaudio/AnalyserNode.h:
        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        * Modules/webaudio/AudioBasicInspectorNode.h:
        * Modules/webaudio/AudioBasicProcessorNode.cpp:
        * Modules/webaudio/AudioBasicProcessorNode.h:
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        * Modules/webaudio/AudioBufferSourceNode.h:
        * Modules/webaudio/AudioContext.cpp:
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioDestinationNode.cpp:
        * Modules/webaudio/AudioDestinationNode.h:
        * Modules/webaudio/AudioNode.cpp:
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        * Modules/webaudio/AudioScheduledSourceNode.h:
        * Modules/webaudio/BiquadFilterNode.cpp:
        * Modules/webaudio/BiquadFilterNode.h:
        * Modules/webaudio/ChannelMergerNode.cpp:
        * Modules/webaudio/ChannelMergerNode.h:
        * Modules/webaudio/ChannelSplitterNode.cpp:
        * Modules/webaudio/ChannelSplitterNode.h:
        * Modules/webaudio/ConvolverNode.cpp:
        * Modules/webaudio/ConvolverNode.h:
        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        * Modules/webaudio/DelayNode.cpp:
        * Modules/webaudio/DelayNode.h:
        * Modules/webaudio/DynamicsCompressorNode.cpp:
        * Modules/webaudio/DynamicsCompressorNode.h:
        * Modules/webaudio/GainNode.cpp:
        * Modules/webaudio/GainNode.h:
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        * Modules/webaudio/MediaElementAudioSourceNode.h:
        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        * Modules/webaudio/MediaStreamAudioDestinationNode.h:
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        * Modules/webaudio/MediaStreamAudioSourceNode.h:
        * Modules/webaudio/OfflineAudioContext.cpp:
        * Modules/webaudio/OfflineAudioContext.h:
        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        * Modules/webaudio/OfflineAudioDestinationNode.h:
        * Modules/webaudio/OscillatorNode.cpp:
        * Modules/webaudio/OscillatorNode.h:
        * Modules/webaudio/PannerNode.cpp:
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/ScriptProcessorNode.cpp:
        * Modules/webaudio/ScriptProcessorNode.h:
        * Modules/webaudio/WaveShaperNode.cpp:
        * Modules/webaudio/WaveShaperNode.h:
        * Modules/webgpu/GPUCanvasContext.cpp:
        * Modules/webgpu/GPUCanvasContext.h:
        * Modules/websockets/WebSocket.cpp:
        * Modules/websockets/WebSocket.h:
        * Modules/webvr/VRDisplay.cpp:
        * Modules/webvr/VRDisplay.h:
        (WebCore::VRDisplay::isPresenting const): Deleted.
        (WebCore::VRDisplay::displayName const): Deleted.
        (WebCore::VRDisplay::displayId const): Deleted.
        (WebCore::VRDisplay::depthNear const): Deleted.
        (WebCore::VRDisplay::setDepthNear): Deleted.
        (WebCore::VRDisplay::depthFar const): Deleted.
        (WebCore::VRDisplay::setDepthFar): Deleted.
        (WebCore::VRDisplay::document): Deleted.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/CSSAnimation.cpp:
        * animation/CSSAnimation.h:
        * animation/CSSTransition.cpp:
        * animation/CSSTransition.h:
        * animation/DeclarativeAnimation.cpp:
        * animation/DeclarativeAnimation.h:
        * animation/WebAnimation.cpp:
        * animation/WebAnimation.h:
        * bindings/js/ScriptWrappable.h:
        * css/CSSComputedStyleDeclaration.cpp:
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSStyleDeclaration.cpp:
        (): Deleted.
        * css/CSSStyleDeclaration.h:
        * css/DOMMatrix.h:
        * css/DOMMatrixReadOnly.cpp:
        * css/DOMMatrixReadOnly.h:
        * css/FontFaceSet.cpp:
        * css/FontFaceSet.h:
        * css/PropertySetCSSStyleDeclaration.cpp:
        * css/PropertySetCSSStyleDeclaration.h:
        * css/WebKitCSSMatrix.cpp:
        * css/WebKitCSSMatrix.h:
        * css/typedom/TypedOMCSSImageValue.cpp: Added.
        * css/typedom/TypedOMCSSImageValue.h:
        * css/typedom/TypedOMCSSNumericValue.cpp: Added.
        * css/typedom/TypedOMCSSNumericValue.h:
        * css/typedom/TypedOMCSSStyleValue.cpp: Added.
        * css/typedom/TypedOMCSSStyleValue.h:
        * css/typedom/TypedOMCSSUnitValue.cpp: Added.
        * css/typedom/TypedOMCSSUnitValue.h:
        * css/typedom/TypedOMCSSUnparsedValue.cpp: Added.
        * css/typedom/TypedOMCSSUnparsedValue.h:
        * dom/AbortController.cpp:
        * dom/AbortController.h:
        * dom/AbortSignal.cpp:
        * dom/AbortSignal.h:
        * dom/AllDescendantsCollection.cpp: Copied from Source/WebCore/xml/XMLHttpRequestEventTarget.h.
        * dom/AllDescendantsCollection.h:
        * dom/ChildNodeList.cpp:
        * dom/ChildNodeList.h:
        * dom/ClassCollection.cpp:
        * dom/ClassCollection.h:
        * dom/DOMImplementation.cpp:
        * dom/DOMImplementation.h:
        (WebCore::DOMImplementation::ref): Deleted.
        (WebCore::DOMImplementation::deref): Deleted.
        (WebCore::DOMImplementation::document): Deleted.
        (WebCore::DOMImplementation::hasFeature): Deleted.
        * dom/DOMPoint.h:
        * dom/DOMPointReadOnly.cpp:
        * dom/DOMPointReadOnly.h:
        * dom/DOMQuad.cpp:
        * dom/DOMQuad.h:
        * dom/DOMRect.h:
        * dom/DOMRectReadOnly.cpp: Copied from Source/WebCore/dom/DOMPointReadOnly.cpp.
        * dom/DOMRectReadOnly.h:
        * dom/DataTransferItemList.cpp:
        * dom/DataTransferItemList.h:
        (WebCore::DataTransferItemList::ref): Deleted.
        (WebCore::DataTransferItemList::deref): Deleted.
        (WebCore::DataTransferItemList::dataTransfer): Deleted.
        (WebCore::DataTransferItemList::hasItems const): Deleted.
        (WebCore::DataTransferItemList::items const): Deleted.
        * dom/DatasetDOMStringMap.cpp:
        * dom/DatasetDOMStringMap.h:
        * dom/DocumentParser.h:
        * dom/EventTarget.cpp:
        * dom/EventTarget.h:
        * dom/LiveNodeList.cpp:
        * dom/LiveNodeList.h:
        * dom/MessageChannel.cpp:
        * dom/MessagePort.cpp:
        * dom/MessagePort.h:
        * dom/NameNodeList.cpp:
        * dom/NameNodeList.h:
        * dom/NamedNodeMap.cpp:
        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::NamedNodeMap): Deleted.
        (WebCore::NamedNodeMap::element): Deleted.
        * dom/NodeIterator.cpp:
        * dom/NodeIterator.h:
        (WebCore::NodeIterator::detach): Deleted.
        (WebCore::NodeIterator::referenceNode const): Deleted.
        (WebCore::NodeIterator::pointerBeforeReferenceNode const): Deleted.
        * dom/NodeList.cpp: Copied from Source/WebCore/xml/XMLHttpRequestEventTarget.h.
        * dom/NodeList.h:
        * dom/NodeRareData.cpp:
        * dom/ScriptExecutionContext.cpp:
        * dom/SimulatedClick.cpp:
        * dom/StaticNodeList.cpp:
        * dom/StaticNodeList.h:
        * dom/TagCollection.cpp:
        * dom/TagCollection.h:
        * dom/TreeWalker.cpp:
        * dom/TreeWalker.h:
        (WebCore::TreeWalker::create): Deleted.
        (WebCore::TreeWalker::currentNode): Deleted.
        (WebCore::TreeWalker::currentNode const): Deleted.
        * fileapi/Blob.cpp:
        * fileapi/Blob.h:
        * fileapi/File.cpp:
        * fileapi/File.h:
        * fileapi/FileList.cpp:
        * fileapi/FileList.h:
        (WebCore::FileList::create): Deleted.
        (WebCore::FileList::length const): Deleted.
        (WebCore::FileList::isEmpty const): Deleted.
        (WebCore::FileList::files const): Deleted.
        (WebCore::FileList::file const): Deleted.
        (WebCore::FileList::FileList): Deleted.
        (WebCore::FileList::append): Deleted.
        (WebCore::FileList::clear): Deleted.
        * fileapi/FileReader.cpp:
        * fileapi/FileReader.h:
        * html/CachedHTMLCollection.h:
        * html/GenericCachedHTMLCollection.cpp:
        * html/GenericCachedHTMLCollection.h:
        * html/HTMLAllCollection.cpp:
        * html/HTMLAllCollection.h:
        * html/HTMLCollection.cpp:
        * html/HTMLCollection.h:
        * html/HTMLFormControlsCollection.cpp:
        * html/HTMLFormControlsCollection.h:
        * html/HTMLNameCollection.cpp:
        * html/HTMLNameCollection.h:
        * html/HTMLOptionsCollection.cpp:
        * html/HTMLOptionsCollection.h:
        * html/HTMLTableRowsCollection.cpp:
        * html/HTMLTableRowsCollection.h:
        * html/ImageBitmap.cpp:
        * html/ImageBitmap.h:
        (WebCore::ImageBitmap::isDetached const): Deleted.
        (WebCore::ImageBitmap::buffer): Deleted.
        (WebCore::ImageBitmap::originClean const): Deleted.
        * html/LabelsNodeList.cpp:
        * html/LabelsNodeList.h:
        * html/MediaController.cpp:
        * html/MediaController.h:
        * html/OffscreenCanvas.cpp:
        * html/OffscreenCanvas.h:
        * html/RadioNodeList.cpp:
        * html/RadioNodeList.h:
        * html/canvas/CanvasRenderingContext.cpp:
        * html/canvas/CanvasRenderingContext.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        * html/canvas/CanvasRenderingContext2DBase.h:
        * html/canvas/GPUBasedCanvasRenderingContext.h:
        * html/canvas/ImageBitmapRenderingContext.cpp:
        * html/canvas/ImageBitmapRenderingContext.h:
        * html/canvas/OffscreenCanvasRenderingContext2D.cpp:
        * html/canvas/OffscreenCanvasRenderingContext2D.h:
        * html/canvas/PaintRenderingContext2D.cpp:
        * html/canvas/PaintRenderingContext2D.h:
        * html/canvas/PlaceholderRenderingContext.cpp:
        * html/canvas/PlaceholderRenderingContext.h:
        * html/canvas/WebGL2RenderingContext.cpp:
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLRenderingContext.cpp:
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        * html/canvas/WebGLRenderingContextBase.h:
        * html/track/AudioTrackList.h:
        * html/track/DataCue.cpp:
        * html/track/DataCue.h:
        * html/track/InbandDataTextTrack.cpp:
        * html/track/InbandDataTextTrack.h:
        * html/track/InbandGenericTextTrack.cpp:
        * html/track/InbandGenericTextTrack.h:
        * html/track/InbandTextTrack.cpp:
        * html/track/InbandTextTrack.h:
        * html/track/InbandWebVTTTextTrack.cpp:
        * html/track/InbandWebVTTTextTrack.h:
        * html/track/LoadableTextTrack.cpp:
        * html/track/LoadableTextTrack.h:
        * html/track/TextTrack.cpp:
        * html/track/TextTrack.h:
        * html/track/TextTrackCue.cpp:
        * html/track/TextTrackCue.h:
        * html/track/TextTrackCueGeneric.cpp:
        * html/track/TextTrackCueGeneric.h:
        * html/track/TextTrackList.cpp:
        * html/track/TextTrackList.h:
        * html/track/TrackListBase.cpp:
        * html/track/TrackListBase.h:
        * html/track/VTTCue.cpp:
        * html/track/VTTCue.h:
        * html/track/VideoTrackList.h:
        * loader/appcache/DOMApplicationCache.cpp:
        * loader/appcache/DOMApplicationCache.h:
        * page/AbstractDOMWindow.cpp:
        * page/AbstractDOMWindow.h:
        * page/BarProp.cpp:
        * page/BarProp.h:
        (WebCore::BarProp::create): Deleted.
        * page/DOMWindow.cpp:
        * page/DOMWindow.h:
        * page/EventSource.cpp:
        * page/EventSource.h:
        * page/History.cpp:
        * page/History.h:
        * page/Location.cpp:
        * page/Location.h:
        (WebCore::Location::create): Deleted.
        (WebCore::Location::toString const): Deleted.
        * page/Navigator.cpp:
        * page/Navigator.h:
        * page/Performance.cpp:
        * page/Performance.h:
        * page/RemoteDOMWindow.cpp:
        * page/RemoteDOMWindow.h:
        * page/Screen.cpp:
        * page/Screen.h:
        * page/VisualViewport.cpp:
        * page/VisualViewport.h:
        * plugins/DOMMimeTypeArray.cpp:
        * plugins/DOMMimeTypeArray.h:
        (WebCore::DOMMimeTypeArray::create): Deleted.
        * plugins/DOMPlugin.cpp:
        * plugins/DOMPlugin.h:
        (WebCore::DOMPlugin::create): Deleted.
        * plugins/DOMPluginArray.cpp:
        * plugins/DOMPluginArray.h:
        (WebCore::DOMPluginArray::create): Deleted.
        * storage/Storage.cpp:
        * storage/Storage.h:
        (WebCore::Storage::area const): Deleted.
        * workers/AbstractWorker.cpp:
        * workers/AbstractWorker.h:
        * workers/DedicatedWorkerGlobalScope.cpp:
        * workers/DedicatedWorkerGlobalScope.h:
        * workers/Worker.cpp:
        * workers/Worker.h:
        * workers/WorkerGlobalScope.cpp:
        * workers/WorkerGlobalScope.h:
        * workers/service/ServiceWorker.cpp:
        * workers/service/ServiceWorker.h:
        * workers/service/ServiceWorkerContainer.cpp:
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerGlobalScope.cpp:
        * workers/service/ServiceWorkerGlobalScope.h:
        * workers/service/ServiceWorkerRegistration.cpp:
        * workers/service/ServiceWorkerRegistration.h:
        * worklets/PaintWorkletGlobalScope.cpp:
        * worklets/PaintWorkletGlobalScope.h:
        * worklets/Worklet.cpp:
        * worklets/Worklet.h:
        * worklets/WorkletGlobalScope.cpp:
        * worklets/WorkletGlobalScope.h:
        * xml/XMLHttpRequest.cpp:
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestEventTarget.h:
        * xml/XMLHttpRequestUpload.cpp:
        * xml/XMLHttpRequestUpload.h:
        * xml/XPathParser.cpp:

2019-04-04  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix iOS build with recent SDKs.

        std::ptr_fun() is deprecated.

        * platform/ios/LegacyTileGrid.mm:
        (WebCore::LegacyTileGrid::dropDistantTiles):

2019-04-04  Antoine Quint  <graouts@apple.com>

        [Web Animations] JS wrapper may be deleted while animation is yet to dispatch its finish event
        https://bugs.webkit.org/show_bug.cgi?id=196118
        <rdar://problem/46614137>

        Reviewed by Ryosuke Niwa.

        Test: webanimations/js-wrapper-kept-alive.html

        We need to teach WebAnimation to keep its JS wrapper alive if it's relevant or could become relevant again by virtue of having a timeline.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::stop): Drive-by fix for the missing superclass method call.
        (WebCore::WebAnimation::hasPendingActivity const):
        * animation/WebAnimation.h:

2019-04-04  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Use a timer to request the creation of pending tiles
        https://bugs.webkit.org/show_bug.cgi?id=196594

        Reviewed by Žan Doberšek.

        Use a timer to request pending tile creation, as calls to notifyFlushRequired() are discarded
        while inside a layer flush.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):
        (WebCore::CoordinatedGraphicsLayer::requestPendingTileCreationTimerFired):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

2019-04-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [ATK] Wrong index passed to AtkObject::children-changed::add signal in AXObjectCache::attachWrapper()
        https://bugs.webkit.org/show_bug.cgi?id=196538

        Reviewed by Michael Catanzaro.

        In most of the cases the parent is not found, probably because the child is not a direct descendant of the
        parent returned by parentObjectUnignored(). We need to handle the case of find() returning notFound.

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::attachWrapper): Use -1 as the index when find() returns notFound.

2019-04-03  Timothy Hatcher  <timothy@apple.com>

        Update AutoFill field icons to be SVG instead of PNG images.
        https://bugs.webkit.org/show_bug.cgi?id=196557
        rdar://problem/48292514

        Reviewed by Tim Horton.

        * css/html.css:
        (input::-webkit-credentials-auto-fill-button):
        (input::-webkit-contacts-auto-fill-button):
        (input::-webkit-credit-card-auto-fill-button):

2019-04-03  Simon Fraser  <simon.fraser@apple.com>

        Simplify some "programmaticScroll" code paths
        https://bugs.webkit.org/show_bug.cgi?id=196589

        Reviewed by Zalan Bujtas.

        AsyncScrollingCoordinator::scheduleUpdateScrollPositionAfterAsyncScroll() just returned early if programmaticScroll
        was true, so instead, just never call it. This means we can remove the "programmaticScroll" argument from 
        scheduleUpdateScrollPositionAfterAsyncScroll(). Also change some callers to use the ScrollType enum
        instead of a bool.

        Now, ThreadedScrollingTree::scrollingTreeNodeDidScroll() just returns early. Programmatic scrolls
        update state on the main thread before updating the scrolling tree, so this makes sense.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::scheduleUpdateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScrollTimerFired):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::reconcileScrollingState):
        * page/scrolling/AsyncScrollingCoordinator.h:
        (WebCore::AsyncScrollingCoordinator::ScheduledScrollUpdate::ScheduledScrollUpdate):
        (WebCore::AsyncScrollingCoordinator::ScheduledScrollUpdate::matchesUpdateType const):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::operator<<):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::reconcileScrollingState):
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):

2019-04-03  Youenn Fablet  <youenn@apple.com>

        Add logging and ASSERTs to investigate issue with VPModuleInitialize
        https://bugs.webkit.org/show_bug.cgi?id=196573

        Reviewed by Eric Carlson.

        Add some ASSERTs.
        No change of behavior.

        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:
        (WebCore::LibWebRTCProviderCocoa::createDecoderFactory):
        (WebCore::LibWebRTCProviderCocoa::createEncoderFactory):

2019-04-03  Simon Fraser  <simon.fraser@apple.com>

        Remove some redundant memebers from ScrollingStateFrameScrollingNode
        https://bugs.webkit.org/show_bug.cgi?id=196571

        Reviewed by Zalan Bujtas.

        m_requestedScrollPosition and m_requestedScrollPositionRepresentsProgrammaticScroll were
        duplicated on ScrollingStateFrameScrollingNode and ScrollingStateScrollingNode, so
        remove them from the derived class.

        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
        (WebCore::ScrollingStateFrameScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingStateFrameScrollingNode.h:

2019-04-03  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION (r220717): Assertion fires when animating an SVG rounded corner rect till it collapses
        https://bugs.webkit.org/show_bug.cgi?id=196518

        Reviewed by Simon Fraser.

        r220717 made RenderSVGRect clear its m_path in updateShapeFromElement().

        RenderSVGRect tries to optimize its layout and drawing if the rectangle
        is not rounded. So it uses the flag m_usePathFallback to know whether to
        use m_path or m_innerStrokeRect and m_outerStrokeRect. If the rectangle
        is rounded but its boundingSize is empty, m_path will be cleared,
        m_innerStrokeRect and m_outerStrokeRect will be recalculated but
        m_usePathFallback will not be reset to false. Therefore when calling 
        RenderSVGRect::isEmpty(), it will call RenderSVGShape::isEmpty() which
        will assert since m_path is null.

        Test: svg/animations/animate-rounded-corner-rect-zero-height.svg

        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::updateShapeFromElement):
        Reset m_usePathFallback to false once clearPath() is called.

2019-04-03  Ryosuke Niwa  <rniwa@webkit.org>

        Nullptr crash in InlineTextBox::selectionState via TextIndicator::createWithRange
        https://bugs.webkit.org/show_bug.cgi?id=196579

        Reviewed by Simon Fraser.

        Avoid crashing accessing the unengated optional's value in relese builds for now.

        Unfortunately, fixing the underlying cause of the selection states of RenderView & RenderObject
        getting out out of sync would require a significant re-architecturing of the whole selection
        repainting / state managing mechanism.

        * rendering/SelectionRangeData.h:
        (WebCore::SelectionRangeData::startPosition const):
        (WebCore::SelectionRangeData::endPosition const):

2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>

        -apple-trailing-word is needed for browser detection
        https://bugs.webkit.org/show_bug.cgi?id=196575

        Unreviewed.

        This is an unreviewed partial revert of r243819. Turns out there are some websites
        which use this property to do browser detection. So, we need to continue to parse
        the property, but we don't need the property to do anything.

        Test: fast/text/trailing-word-detection.html

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TrailingWord const):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::trailingWord const):
        (WebCore::RenderStyle::setTrailingWord):
        (WebCore::RenderStyle::initialTrailingWord):
        * rendering/style/RenderStyleConstants.h:

2019-04-03  Don Olmstead  <don.olmstead@sony.com>

        [CMake][WTF] Mirror XCode header directories
        https://bugs.webkit.org/show_bug.cgi?id=191662

        Reviewed by Konstantin Tokarev.

        Use WTFFramework as a dependency and include frameworks/WTF.cmake for AppleWin internal
        builds.

        * CMakeLists.txt:
        * PlatformWin.cmake:

2019-04-03  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Remove SVG properties tear-off objects
        https://bugs.webkit.org/show_bug.cgi?id=191237

        Reviewed by Simon Fraser.

        This patch cleans the code from unused SVG sources and get rid off the
        remaining SVG properties tear-off objects. Here are more details:

        -- Remove the SVGAttributeAnimationController and move its code to the
           SVGAnimateElementBase. SVGAttributeAnimationController was introduced
           to allow animating the SVG properties whether they are backed by tear
           off objects or not. Since there will be no tear off objects anymore,
           one animation controller will be needed. But in this case, it will be
           better if we make SVGAnimateElementBase is the animation controller
           and make it manage the animator directly.

        -- Remove SVGAttributeRegistry, SVGAttributeOwnerProxy and the virtual
           function SVGElement::attributeOwnerProxy(). Remove also all the
           overriding functions attributeOwnerProxy() from all the SVGElements.

        -- Remove isKnownAttribute() from all the SVG header files except from 
           four classes: SVGURIReference, SVGFitToViewBox, SVGLangSpace
           and SVGExternalResourcesRequired.

        -- Remove all the SVG animated properties classifying functions from
           SVGElement. This is now handled by SVGPropertyRegistry.

        -- There is no need for the enum AnimatedPropertyType anymore. The SVG
           property accessor knows its type, knows how to access it and know what
           animator it should be created for it.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Element.cpp:
        (WebCore::Element::synchronizeAllAttributes const):
        (WebCore::Element::synchronizeAttribute const):
        (WebCore::Element::fastAttributeLookupAllowed const):
        These functions are surprisingly marked 'const'. They were calling 'const'
        functions in SVGElement and SVGElement was casting 'this' as non 'const'
        before calling the non 'const' functions through the non 'const' 'this'
        pointer. Change this by moving the casting to the Element functions.

        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource):
        * svg/SVGAElement.h:
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::SVGAnimateElementBase):
        (WebCore::SVGAnimateElementBase::animator const):
        (WebCore::SVGAnimateElementBase::hasInvalidCSSAttributeType const):
        (WebCore::SVGAnimateElementBase::isDiscreteAnimator const):
        (WebCore::SVGAnimateElementBase::setTargetElement):
        (WebCore::SVGAnimateElementBase::setAttributeName):
        (WebCore::SVGAnimateElementBase::resetAnimation):
        (WebCore::SVGAnimateElementBase::calculateFromAndToValues):
        (WebCore::SVGAnimateElementBase::calculateFromAndByValues):
        (WebCore::SVGAnimateElementBase::calculateToAtEndOfDurationValue):
        (WebCore::SVGAnimateElementBase::resetAnimatedType):
        (WebCore::SVGAnimateElementBase::calculateAnimatedValue):
        (WebCore::SVGAnimateElementBase::applyResultsToTarget):
        (WebCore::SVGAnimateElementBase::clearAnimatedType):
        (WebCore::SVGAnimateElementBase::calculateDistance):
        (WebCore::SVGAnimateElementBase::attributeAnimationController): Deleted.
        (WebCore::SVGAnimateElementBase::determineAnimatedPropertyType const): Deleted.
        (WebCore::SVGAnimateElementBase::isAdditive const): Deleted.
        * svg/SVGAnimateElementBase.h:
        (WebCore::SVGAnimateElementBase::animatorIfExists const):
        (WebCore::SVGAnimateElementBase::attributeAnimationControllerIfExists const): Deleted.
        The order of the functions was changed to resemble the order of running
        the animation:
          -- Setting the animation range
          -- Starting the animation
          -- Progressing the animation
          -- Applying the the progressed animaVal() to the target element
          -- Stopping the animation

        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::calculateDistance):
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::calculateKeyTimesForCalcModePaced):
        (WebCore::SVGAnimationElement::shouldApplyAnimation): Deleted.
        * svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::attributeRegistry): Deleted.
        (WebCore::SVGAnimationElement::calculateDistance): Deleted.
        * svg/SVGAttributeAnimationController.cpp: Removed.
        * svg/SVGAttributeAnimationController.h: Removed.
        * svg/SVGAttributeAnimationControllerBase.cpp: Removed.
        * svg/SVGAttributeAnimationControllerBase.h: Removed.
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.h:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::synchronizeAttribute):
        (WebCore::SVGElement::synchronizeAllAttributes):
        (WebCore::SVGElement::synchronizeAllAnimatedSVGAttribute):
        (WebCore::createAttributeNameToAnimatedPropertyTypeMap): Deleted.
        (WebCore::attributeNameToAnimatedPropertyTypeMap): Deleted.
        (WebCore::createCSSPropertyWithSVGDOMNameToAnimatedPropertyTypeMap): Deleted.
        (WebCore::cssPropertyWithSVGDOMNameToAnimatedPropertyTypeMap): Deleted.
        (WebCore::SVGElement::animatedPropertyTypesForAttribute): Deleted.
        (WebCore::SVGElement::synchronizeAnimatedSVGAttribute const): Deleted.
        (WebCore::SVGElement::isAnimatableCSSProperty): Deleted.
        (WebCore::SVGElement::isPresentationAttributeWithSVGDOM): Deleted.
        * svg/SVGElement.h:
        (WebCore::SVGElement::attributeOwnerProxy const): Deleted.
        (WebCore::SVGElement::attributeRegistry): Deleted.
        (WebCore::SVGElement::synchronizeAttribute): Deleted.
        (WebCore::SVGElement::synchronizeAttributes): Deleted.
        (WebCore::SVGElement::animatedTypes const): Deleted.
        (WebCore::SVGElement::lookupAnimatedProperty const): Deleted.
        (WebCore::SVGElement::lookupOrCreateAnimatedProperty): Deleted.
        (WebCore::SVGElement::lookupOrCreateAnimatedProperties): Deleted.
        (WebCore::SVGElement::isKnownAttribute): Deleted.
        * svg/SVGEllipseElement.h:
        * svg/SVGExternalResourcesRequired.h:
        (WebCore::SVGExternalResourcesRequired::attributeRegistry): Deleted.
        (WebCore::SVGExternalResourcesRequired::attributeOwnerProxy): Deleted.
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::attributeRegistry): Deleted.
        * svg/SVGFitToViewBox.h:
        (WebCore::SVGFitToViewBox::attributeRegistry): Deleted.
        * svg/SVGFontElement.h:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.h:
        * svg/SVGGeometryElement.h:
        * svg/SVGGlyphRefElement.h:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::svgAttributeChanged):
        * svg/SVGGradientElement.h:
        (WebCore::SVGGradientElement::attributeRegistry): Deleted.
        (WebCore::SVGGradientElement::isKnownAttribute): Deleted.
        * svg/SVGGraphicsElement.h:
        (WebCore::SVGGraphicsElement::attributeRegistry): Deleted.
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.cpp:
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.h:
        * svg/SVGPathElement.h:
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.h:
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.h:
        * svg/SVGStopElement.h:
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.h:
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::svgAttributeChanged):
        (WebCore::SVGTests::attributeRegistry): Deleted.
        (WebCore::SVGTests::isKnownAttribute): Deleted.
        * svg/SVGTests.h:
        * svg/SVGTextContentElement.cpp:
        * svg/SVGTextContentElement.h:
        (WebCore::SVGTextContentElement::attributeRegistry): Deleted.
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.h:
        (WebCore::SVGTextPositioningElement::attributeRegistry): Deleted.
        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::SVGURIReference):
        (WebCore::SVGURIReference::attributeRegistry): Deleted.
        * svg/SVGURIReference.h:
        * svg/SVGUseElement.h:
        * svg/SVGViewElement.h:
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::SVGViewSpec):
        * svg/SVGViewSpec.h:
        * svg/SVGZoomAndPanType.h:
        * svg/properties/SVGAnimatedListPropertyTearOff.h: Removed.
        * svg/properties/SVGAnimatedPropertyAnimator.h:
        * svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
        * svg/properties/SVGAnimatedPropertyPairAnimator.h:
        * svg/properties/SVGAnimatedPropertyPairAnimatorImpl.h:
        * svg/properties/SVGAnimatedPropertyTearOff.h: Removed.
        * svg/properties/SVGAnimatedPropertyType.h: Removed.

        * svg/properties/SVGAnimationAdditiveFunction.h:
        (WebCore::SVGAnimationAdditiveFunction::animate):
        (WebCore::SVGAnimationAdditiveFunction::progress): Deleted.
        * svg/properties/SVGAnimationAdditiveListFunctionImpl.h:
        (WebCore::SVGAnimationLengthListFunction::animate):
        (WebCore::SVGAnimationNumberListFunction::animate):
        (WebCore::SVGAnimationPointListFunction::animate):
        (WebCore::SVGAnimationTransformListFunction::animate):
        (WebCore::SVGAnimationLengthListFunction::progress): Deleted.
        (WebCore::SVGAnimationNumberListFunction::progress): Deleted.
        (WebCore::SVGAnimationPointListFunction::progress): Deleted.
        (WebCore::SVGAnimationTransformListFunction::progress): Deleted.
        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
        (WebCore::SVGAnimationAngleFunction::animate):
        (WebCore::SVGAnimationColorFunction::animate):
        (WebCore::SVGAnimationIntegerFunction::animate):
        (WebCore::SVGAnimationLengthFunction::animate):
        (WebCore::SVGAnimationNumberFunction::animate):
        (WebCore::SVGAnimationPathSegListFunction::animate):
        (WebCore::SVGAnimationRectFunction::animate):
        (WebCore::SVGAnimationAngleFunction::progress): Deleted.
        (WebCore::SVGAnimationColorFunction::progress): Deleted.
        (WebCore::SVGAnimationIntegerFunction::progress): Deleted.
        (WebCore::SVGAnimationLengthFunction::progress): Deleted.
        (WebCore::SVGAnimationNumberFunction::progress): Deleted.
        (WebCore::SVGAnimationPathSegListFunction::progress): Deleted.
        (WebCore::SVGAnimationRectFunction::progress): Deleted.
        * svg/properties/SVGAnimationDiscreteFunction.h:
        (WebCore::SVGAnimationDiscreteFunction::animate):
        (WebCore::SVGAnimationDiscreteFunction::progress): Deleted.
        * svg/properties/SVGAnimationFunction.h:
        (WebCore::SVGAnimationFunction::calculateDistance const):
        -- Rename the 'progress()' functions of SVGAttributeAnimator and SVGAnimationFunction
           to 'animate()'.
        -- Rename the argument 'percentage' of these function to 'progress'
        -- Make calculateDistance return Optional<float> so it does not have to
           return -1 in case of error.

        * svg/properties/SVGAttribute.h: Removed.
        * svg/properties/SVGAttributeAccessor.h: Removed.
        * svg/properties/SVGAttributeAnimator.h:
        (WebCore::SVGAttributeAnimator::calculateDistance const):
        * svg/properties/SVGAttributeOwnerProxy.cpp: Removed.
        * svg/properties/SVGAttributeOwnerProxy.h: Removed.
        * svg/properties/SVGAttributeOwnerProxyImpl.h: Removed.
        * svg/properties/SVGAttributeRegistry.h: Removed.
        * svg/properties/SVGLegacyAnimatedProperty.cpp: Removed.
        * svg/properties/SVGLegacyAnimatedProperty.h: Removed.
        * svg/properties/SVGLegacyProperty.h: Removed.
        * svg/properties/SVGListProperty.h: Removed.
        * svg/properties/SVGListPropertyTearOff.h: Removed.
        * svg/properties/SVGPrimitivePropertyAnimator.h:
        * svg/properties/SVGProperty.h:
        * svg/properties/SVGPropertyAnimator.h:
        * svg/properties/SVGPropertyTearOff.h: Removed.
        * svg/properties/SVGValuePropertyAnimator.h:
        * svg/properties/SVGValuePropertyListAnimator.h:

2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Documents can be destroyed before their CSSFontFaceSet is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=195830

        Reviewed by Darin Adler.

        CSSFontFaceSet has a raw pointer to its owning document. JS can keep the CSSFontFaceSet alive (by using FontFaceSet)
        and can destroy the document at any time. When the document is destroyed, the link between the two objects needs to
        be severed.

        Test: fast/text/font-face-set-destroy-document.html

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::CSSFontFace):
        * css/CSSFontFace.h:
        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::CSSFontFaceSet):
        (WebCore::CSSFontFaceSet::ensureLocalFontFacesForFamilyRegistered):
        * css/CSSFontFaceSet.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::CSSFontSelector):
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSFontSelector.h:
        * css/FontFace.cpp:
        (WebCore::FontFace::FontFace):

2019-04-03  Sihui Liu  <sihui_liu@apple.com>

        Follow up fix for r243807: Use MarkedArgumentBuffer instead of Vector for JSValue
        https://bugs.webkit.org/show_bug.cgi?id=196547

        Reviewed by Geoffrey Garen.

        JSValue in Vector could be garbage collected because GC doesn't know Vector memory on C++ heap.

        * bindings/js/JSIDBRequestCustom.cpp:
        (WebCore::JSIDBRequest::result const):

2019-04-03  Chris Dumez  <cdumez@apple.com>

        HTML fragment serialization should not strip whitespace from URL attribute values
        https://bugs.webkit.org/show_bug.cgi?id=196551

        Reviewed by Ryosuke Niwa.

        HTML fragment serialization should not strip whitespace from URL attribute values as per:
        - https://html.spec.whatwg.org/multipage/parsing.html#html-fragment-serialisation-algorithm

        WebKit was stripping such whitespace, Gecko and Blink are not. Align WebKit with other
        browser engines and the specification.

        No new tests, rebaselined existing test.

        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendQuotedURLAttributeValue):

2019-04-02  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in HTMLCanvasElement::createContext2d after the element got adopted to a new document
        https://bugs.webkit.org/show_bug.cgi?id=196527

        Reviewed by Antti Koivisto.

        We need to update CanvasBase::m_scriptExecutionContext when HTMLCanvasElement moves from
        one document to another. Fixed the bug by making CanvasBase::scriptExecutionContext make
        a virtual function call instead of directly storing a raw pointer. In HTMLCanvasElement,
        we use Node::scriptExecutionContext(). Use ContextDestructionObserver in CustomPaintCanvas
        and OffscreenCanvas instead of a raw pointer.

        Unfortunately, no new tests since there is no reproducible test case.

        * html/CanvasBase.cpp:
        (WebCore::CanvasBase::CanvasBase):
        * html/CanvasBase.h:
        (WebCore::CanvasBase::scriptExecutionContext const):
        * html/CustomPaintCanvas.cpp:
        (WebCore::CustomPaintCanvas::CustomPaintCanvas):
        * html/CustomPaintCanvas.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        * html/HTMLCanvasElement.h:
        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::OffscreenCanvas):
        * html/OffscreenCanvas.h:

2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove support for -apple-trailing-word
        https://bugs.webkit.org/show_bug.cgi?id=196525

        Reviewed by Zalan Bujtas.

        This CSS property is nonstandard and not used.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator TrailingWord const): Deleted.
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForStyle):
        * rendering/SimpleLineLayoutCoverage.cpp:
        (WebCore::SimpleLineLayout::printReason):
        * rendering/SimpleLineLayoutCoverage.h:
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::BreakingContext):
        (WebCore::BreakingContext::lineBreak):
        (WebCore::BreakingContext::clearLineBreakIfFitsOnLine):
        (WebCore::BreakingContext::commitLineBreakClear):
        (WebCore::BreakingContext::commitLineBreakAtCurrentWidth):
        (WebCore::BreakingContext::handleBR):
        (WebCore::BreakingContext::handleFloat):
        (WebCore::BreakingContext::handleText):
        (WebCore::BreakingContext::handleEndOfLine):
        (WebCore::BreakingContext::InlineIteratorHistory::InlineIteratorHistory): Deleted.
        (WebCore::BreakingContext::InlineIteratorHistory::push): Deleted.
        (WebCore::BreakingContext::InlineIteratorHistory::update): Deleted.
        (WebCore::BreakingContext::InlineIteratorHistory::renderer const): Deleted.
        (WebCore::BreakingContext::InlineIteratorHistory::offset const): Deleted.
        (WebCore::BreakingContext::InlineIteratorHistory::nextBreakablePosition const): Deleted.
        (WebCore::BreakingContext::InlineIteratorHistory::atTextParagraphSeparator const): Deleted.
        (WebCore::BreakingContext::InlineIteratorHistory::previousInSameNode const): Deleted.
        (WebCore::BreakingContext::InlineIteratorHistory::get const): Deleted.
        (WebCore::BreakingContext::InlineIteratorHistory::current const): Deleted.
        (WebCore::BreakingContext::InlineIteratorHistory::historyLength const): Deleted.
        (WebCore::BreakingContext::InlineIteratorHistory::moveTo): Deleted.
        (WebCore::BreakingContext::InlineIteratorHistory::increment): Deleted.
        (WebCore::BreakingContext::InlineIteratorHistory::clear): Deleted.
        (WebCore::BreakingContext::optimalLineBreakLocationForTrailingWord): Deleted.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::trailingWord const): Deleted.
        (WebCore::RenderStyle::setTrailingWord): Deleted.
        (WebCore::RenderStyle::initialTrailingWord): Deleted.
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        * rendering/style/StyleRareInheritedData.h:

2019-04-03  Youenn Fablet  <youenn@apple.com>

        Use makePendingActivity in DOMCache
        https://bugs.webkit.org/show_bug.cgi?id=196515

        Reviewed by Geoffrey Garen.

        No change of behavior, just modernizing the code.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::retrieveRecords):
        (WebCore::DOMCache::batchDeleteOperation):
        (WebCore::DOMCache::batchPutOperation):
        * Modules/cache/DOMCacheStorage.cpp:
        (WebCore::DOMCacheStorage::match):

2019-04-03  Chris Dumez  <cdumez@apple.com>

        [XML Parser] Insert the error message block when stopping parsing and an error occurred
        https://bugs.webkit.org/show_bug.cgi?id=196546

        Reviewed by Alexey Proskuryakov.

        Insert the error message block when stopping parsing and an error occurred. This is based
        on the following Blink commit:
        - https://chromium.googlesource.com/chromium/src.git/+/565958bc22e2d49fed7af144482c2bf4d416fec5

        No new tests, rebaselined existing test.

        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::end):
        Avoid showing the error message block twice in some cases. No need to ever call
        insertErrorMessageBlock() if we're already stopped since stopParsing() already
        takes care of doing this.

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::stopParsing):
        When XMLDocumentParser::stopParsing() is called to stop parsing, call
        insertErrorMessageBlock() to insert the <parsererror> element if an error
        occurred.

2019-04-03  Youenn Fablet  <youenn@apple.com>

        Clear WorkerCacheStorageConnection callbacks on WorkerGlobalScope termination
        https://bugs.webkit.org/show_bug.cgi?id=196521

        Reviewed by Alex Christensen.

        When the worker global scope is preparing for termination,
        all ActiveDOMObjects are stopped.
        At that time, the completion handlers related to
        WorkerCacheStorageConnection should be cleared to be able to free
        memory, and as they are now no-op anyway.

        We clear the completion handlers once the active DOM objects are stopped
        to limit the processing triggered by clearing them.

        Introducing a new Stopped error code to handle this case.
        Add an assertion so that this error does not surface to JS.

        Covered by existing tests.

        * Modules/cache/CacheStorageConnection.cpp:
        (WebCore::CacheStorageConnection::clearPendingRequests):
        * Modules/cache/CacheStorageConnection.h:
        * Modules/cache/DOMCacheEngine.cpp:
        (WebCore::DOMCacheEngine::errorToException):
        * Modules/cache/DOMCacheEngine.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::prepareForTermination):
        (WebCore::WorkerGlobalScope::stopIndexedDatabase):

2019-04-03  Youenn Fablet  <youenn@apple.com>

        Adopt new VCP SPI
        https://bugs.webkit.org/show_bug.cgi?id=193357
        <rdar://problem/43656651>

        Reviewed by Eric Carlson.

        Covered by existing tests.

        * testing/Internals.cpp:
        (WebCore::Internals::supportsVCPEncoder):

2019-04-03  Chris Dumez  <cdumez@apple.com>

        Remove legacy webkitRequestAnimationFrame time quirk
        https://bugs.webkit.org/show_bug.cgi?id=196458
        <rdar://problem/49490207>

        Reviewed by Simon Fraser.

        Remove legacy webkitRequestAnimationFrame time quirk and log a deprecation
        warning whenever webkitRequestAnimationFrame is called.

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::requestAnimationFrame):
        (WebCore::DOMWindow::webkitRequestAnimationFrame):

2019-04-03  Sihui Liu  <sihui_liu@apple.com>

        Blob type cannot be stored correctly in IDB when IDBObjectStore has autoIncrement and keyPath options
        https://bugs.webkit.org/show_bug.cgi?id=196128

        Reviewed by Geoffrey Garen.

        If a key is auto-generated, it should become a property of the value object. Network process would perform the 
        key injection by deserializing IDBValue into script value, setting the property, serializing the result and 
        storing it in a database record. But network process does not have a JSDOMGlobalObject, so it would fail to 
        deserialize types including Blob and File.

        To solve this issue, we move the key injection to web process and let network process store the original value 
        it gets. In this case, when web process asks for some value, network process should return key, value and key 
        path so that web process can decide whether it should perform a key injection before returning the result. Note
        that the auto-generated key would always be stored as the key in a ObjectStore record.

        Test: storage/indexeddb/modern/objectstore-autoincrement-types.html

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::setGetResult):
        * Modules/indexeddb/IDBCursor.h:
        (WebCore::IDBCursor::primaryKeyPath):
        * Modules/indexeddb/IDBGetAllResult.cpp:
        (WebCore::IDBGetAllResult::isolatedCopy):
        (WebCore::IDBGetAllResult::addKey):
        (WebCore::IDBGetAllResult::addValue):
        (WebCore::IDBGetAllResult::keys const):
        (WebCore::IDBGetAllResult::values const):
        (WebCore::IDBGetAllResult::allBlobFilePaths const):
        (WebCore::isolatedCopyOfVariant): Deleted.

        * Modules/indexeddb/IDBGetAllResult.h: Introduce an IDBKeyPath parameter. Also replace Variant with two Vectors,
        because we only needed to store either key or value before, and now the stored value could be incomplete.
        (WebCore::IDBGetAllResult::IDBGetAllResult):
        (WebCore::IDBGetAllResult::keyPath const):
        (WebCore::IDBGetAllResult::encode const):
        (WebCore::IDBGetAllResult::decode):

        * Modules/indexeddb/IDBGetResult.cpp:
        (WebCore::IDBGetResult::setValue):
        * Modules/indexeddb/IDBGetResult.h:
        (WebCore::IDBGetResult::IDBGetResult):
        (WebCore::IDBGetResult::keyPath const):
        * Modules/indexeddb/IDBObjectStore.cpp:
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::setResult):
        (WebCore::IDBRequest::setResultToStructuredClone):
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::didGetAllRecordsOnServer):
        (WebCore::IDBTransaction::didGetRecordOnServer):
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::getRecord):
        * Modules/indexeddb/server/MemoryIndex.cpp:
        (WebCore::IDBServer::MemoryIndex::getResultForKeyRange const):
        (WebCore::IDBServer::MemoryIndex::getAllRecords const):
        * Modules/indexeddb/server/MemoryIndexCursor.cpp:
        (WebCore::IDBServer::MemoryIndexCursor::currentData):
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::updateIndexesForPutRecord):
        (WebCore::IDBServer::MemoryObjectStore::populateIndexWithExistingRecords):
        (WebCore::IDBServer::MemoryObjectStore::getAllRecords const):
        * Modules/indexeddb/server/MemoryObjectStoreCursor.cpp:
        (WebCore::IDBServer::MemoryObjectStoreCursor::currentData):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::updateOneIndexForAddRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::updateAllIndexesForAddRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::cachedStatementForGetAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllIndexRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetIndexRecordForOneKey):
        (WebCore::IDBServer::SQLiteIDBBackingStore::openCursor):
        (WebCore::IDBServer::SQLiteIDBBackingStore::iterateCursor):
        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::currentData):
        * Modules/indexeddb/server/SQLiteIDBCursor.h:

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::performPutOrAdd): Remove the key injection from network process. 
        UniqueIDBDatabase stores any value it gets from IDBClient.

        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::getResultRef):
        * Modules/indexeddb/shared/IDBResultData.h:

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::injectIDBKeyIntoScriptValue): If property is read-only, set would fail and injectKeyIntoResult would
        return null, but we expect it to return result as long as the property value is the same as target. Therefore, 
        we can add an early return here.
        (WebCore::createKeyPathArray):

        (WebCore::generateIndexKeyForValue): We used to generate IndexKey from value stored in database but now the
        value gets stored does not include auto-generated key, as we remove the key injection from network process. In 
        this case if the IDBIndex has the same key path as the auto-generated key, IndexKey would be failed to create
        for it cannot extract auto-generated key from value. Since the auto-generated key would always be the key in 
        database record, we could use value of that key when we find a match in key path.

        (WebCore::deserializeIDBValueWithKeyInjection): If the key path in the result is single entry, the key is 
        probably auto-generated, so we could inject the result key into the result value unconditionally.

        * bindings/js/IDBBindingUtilities.h:
        * bindings/js/JSIDBCursorWithValueCustom.cpp:
        (WebCore::JSIDBCursorWithValue::value const):
        * bindings/js/JSIDBRequestCustom.cpp:
        (WebCore::JSIDBRequest::result const):

2019-04-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        Get rid of HTMLInputElement::setEditingValue
        https://bugs.webkit.org/show_bug.cgi?id=196402

        Reviewed by Darin Adler.

        HTMLInputElement::setEditingValue is only used for Epiphany password autofill. We did it
        this way because that's what Chrome uses for autofill, but Apple uses
        HTMLInputElement::setValueForUser. Let's switch to that instead, then we can get rid of
        setEditingValue.

        This fixes logging into ting.com after username and password are autofilled by Epiphany.
        Before this change, the login would fail unless you first manually edit either the username
        or the password field.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setEditingValue): Deleted.
        * html/HTMLInputElement.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setEditingValue): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2019-04-03  Pablo Saavedra  <psaavedra@igalia.com>

        Missing includes that were previously provided via UnifiedSources
        https://bugs.webkit.org/show_bug.cgi?id=196434

        Unreviewed build fix.

        * html/InputType.h:

2019-04-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce and add plumbing for a website policy for meta viewport tag handling
        https://bugs.webkit.org/show_bug.cgi?id=196285

        Reviewed by Tim Horton.

        Add MetaViewportPolicy to DocumentLoader. See WebKit ChangeLog for more detail.

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::metaViewportPolicy const):
        (WebCore::DocumentLoader::setMetaViewportPolicy):

2019-04-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remote Inspector indicate callback should always happen on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=196513
        <rdar://problem/49498284>

        Reviewed by Devin Rousso.

        * platform/ios/wak/WebCoreThreadSystemInterface.cpp:
        (InitWebCoreThreadSystemInterface):

2019-04-02  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r238266): Exchange 2013 Outlook Web Access displays partially blank page when creating new e-mail
        https://bugs.webkit.org/show_bug.cgi?id=196522
        rdar://problem/49472941

        Reviewed by Zalan Bujtas.

        In this content a layer is composited to clip descendants, and has negative z-order children,
        so we compute that it "paints into ancestor", and has a foreground layer. This combination doesn't
        make sense, and when the layer becomes scrollable, we end up with bad paint phases on layers, and
        fail to paint the contents.

        Fix by ensuring that a layer has its own backing store if it requires a foreground layer
        by virtue of having negative z-order children.

        Test: compositing/backing/foreground-layer-no-paints-into-ancestor.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore const):

2019-04-02  Timothy Hatcher  <timothy@apple.com>

        Cursor count badge reverts to Zero during Drag & Drop of multiple items.
        https://bugs.webkit.org/show_bug.cgi?id=196511

        Reviewed by Daniel Bates.

        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag): Don't set m_numberOfItemsToBeAccepted to
        zero when dragging to a non-file input element.

2019-04-02  Chris Dumez  <cdumez@apple.com>

        HTML Parser: Remove conditional parsing of <noembed> content
        https://bugs.webkit.org/show_bug.cgi?id=196514

        Reviewed by Geoffrey Garen.

        Our HTML Parser has raw text handling for <noembed> content only if plugins are runnable.
        However, the HTML specification doesn't ask such behavior [1], and it doesn't match to
        our HTML serializer. We should always handle it as raw text.

        Blink already made this change in https://chromium-review.googlesource.com/c/1477556.

        [1] https://html.spec.whatwg.org/multipage/parsing.html#parsing-html-fragments:noembed

        No new tests, updated existing test.

        * html/parser/HTMLParserOptions.cpp:
        (WebCore::HTMLParserOptions::HTMLParserOptions):
        * html/parser/HTMLParserOptions.h:
        * html/parser/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::updateStateFor):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):

2019-04-02  Chris Dumez  <cdumez@apple.com>

        XMLHttpRequestUpload's loadstart event not correct initialized
        https://bugs.webkit.org/show_bug.cgi?id=196174
        <rdar://problem/49191412>

        Reviewed by Alex Christensen.

        Align progress event firing with the XHR specification.

        No new tests, rebaselined existing tests.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):
        As per [1], the loadstart event fired on the XMLHttpRequestUpload object should use
        loaded=0 and total=`req’s body’s total bytes`.
        [1] https://xhr.spec.whatwg.org/#the-send()-method (step 11.2.)

        (WebCore::XMLHttpRequest::didSendData):
        As per [2], the progress / load / loadend should use loaded=transmitted and total=length.
        [2] https://xhr.spec.whatwg.org/#ref-for-process-request-end-of-body (steps 5, 6 and 7)

        (WebCore::XMLHttpRequest::didReceiveData):
        As per [3], we should fire the readystatechange event *before* the progress event.
        This is covered by web-platform-tests/xhr/send-response-event-order.htm which was failing
        differently after the other changes in this patch.
        [3] https://xhr.spec.whatwg.org/#ref-for-process-response (steps 9.4 and 9.5)

        (WebCore::XMLHttpRequest::dispatchErrorEvents):
        As per [4], in case of an error, we should fire the provided 'event' and 'loadend' with
        loaded=0 and total=0.
        [4] https://xhr.spec.whatwg.org/#request-error-steps (steps 7 and 8)

        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::dispatchProgressEvent):
        * xml/XMLHttpRequestUpload.h:
        Simplify XMLHttpRequestUpload. It no longer needs to store loaded / total as data
        members now that they are always passed by the call site. lengthComputable is set
        to !!total as [5] says to set it to true if length/total is not 0. 
        [5] https://xhr.spec.whatwg.org/#concept-event-fire-progress

2019-04-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: add support for showing WebGPU contexts
        https://bugs.webkit.org/show_bug.cgi?id=196413
        <rdar://problem/49438898>

        Reviewed by Timothy Hatcher.

        Tests: inspector/canvas/create-context-webgpu.html
               inspector/canvas/resolveCanvasContext-webgpu.html

        * Modules/webgpu/GPUCanvasContext.idl:
        * Modules/webgpu/GPUCanvasContext.h:
        (WebCore::GPUCanvasContext::canvas const): Added.
        * Modules/webgpu/GPUCanvasContext.cpp:
        (WebCore::GPUCanvasContext::create):

        * testing/InternalSettings.idl:
        * testing/InternalSettings.h:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setWebGPUEnabled): Added.

2019-04-02  Chris Dumez  <cdumez@apple.com>

        [WK2] Add support for Window's beforeprint / afterprint events
        https://bugs.webkit.org/show_bug.cgi?id=196478

        Reviewed by Alex Christensen.

        Add support for Window's beforeprint / afterprint events as per:
        - https://html.spec.whatwg.org/#dom-print

        Blink and Gecko already support this.

        Test: printing/printing-events.html

        * dom/EventNames.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::createWindowEventHandlerNameMap):
        * page/Page.cpp:
        (WebCore::dispatchPrintEvent):
        (WebCore::Page::dispatchBeforePrintEvent):
        (WebCore::Page::dispatchAfterPrintEvent):
        * page/Page.h:
        * page/WindowEventHandlers.idl:

2019-04-02  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Hover menus do not function on fidelity.com
        https://bugs.webkit.org/show_bug.cgi?id=196507
        <rdar://problem/49496520>

        Reviewed by Simon Fraser.

        fidelity.com has 400ms hover intent timer to bring up the main menus.

        Test: fast/events/touch/ios/content-observation/400ms-hover-intent.html

        * page/ios/ContentChangeObserver.cpp:

2019-04-02  Timothy Hatcher  <timothy@apple.com>

        NSAttributedString crashes when encoding text attachment cell for missing image.
        https://bugs.webkit.org/show_bug.cgi?id=196504
        rdar://problem/49161281

        Reviewed by Tim Horton.

        Clean up and fix a couple of errors and crashes in the missing image path of our
        attributed string converter.

        Fixes include:
        * Removed manual call to release on a RetainPtr, leading to autorelease pool crash.
        * No longer try to load an image that is missing on disk and has long been renamed.
        * No longer use a NSTextAttachmentCell in the Mac code path which can't be encoded
          for sending to the UIProcess, so it was pretty useless in the web content process.
        * Stopped using NSFileWrapper for the missing image so the attachment can contain the
          retina versions of the missing image.
        * Simplified bundle finding code, since WebCore is assumed to be loaded.
        * Fix leak of attachment by adding missing adoptNS().

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_addAttachmentForElement): Unify and simplify missing image path.
        (_NSFirstPathForDirectoriesInDomains): Deleted.
        (_NSSystemLibraryPath): Deleted.
        (_webKitBundle): Deleted.

2019-04-02  Chris Dumez  <cdumez@apple.com>

        [Fetch API] Allow used body replacement in Request constructor
        https://bugs.webkit.org/show_bug.cgi?id=183703
        <rdar://problem/49425609>

        Reviewed by Youenn Fablet.

        Allow used body replacement in Request constructor as per:
        - https://github.com/whatwg/fetch/pull/675

        No new tests, rebaseline existing test.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::initializeWith):

2019-04-02  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r243551.

        Seems to have broken file uploads to SoundCloud

        Reverted changeset:

        "XMLHttpRequestUpload's loadstart event not correct
        initialized"
        https://bugs.webkit.org/show_bug.cgi?id=196174
        https://trac.webkit.org/changeset/243551

2019-04-02  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Implement blend states and color write mask for GPUColorStateDescriptor
        https://bugs.webkit.org/show_bug.cgi?id=196474

        Reviewed by Myles C. Maxfield.

        Blend states and color write masks must now be specified on GPUColorStateDescriptor instead of 
        relying on underlying MTLRenderPipelineColorAttachmentDescriptor defaults.

        Test: webgpu/blend-triangle-strip.html, webgpu/color-write-mask-triangle-strip.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webgpu/GPUBlendDescriptor.idl: 
        * Modules/webgpu/GPUColorStateDescriptor.idl:
        * Modules/webgpu/GPUColorWriteBits.idl: 
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * platform/graphics/gpu/GPUBlendDescriptor.h:
        * platform/graphics/gpu/GPUColorStateDescriptor.h:
        * platform/graphics/gpu/GPUColorWriteBits.h:
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::mtlColorWriteMaskForGPUColorWriteFlags):
        (WebCore::mtlBlendOperationForGPUBlendOperation):
        (WebCore::mtlBlendFactorForGPUBlendFactor):
        (WebCore::setColorStatesForColorAttachmentArray):
        (WebCore::tryCreateMtlRenderPipelineState):
        (WebCore::trySetColorStatesForColorAttachmentArray): Deleted.

2019-04-02  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Ignore reconstructed renderers when checking for visibility change
        https://bugs.webkit.org/show_bug.cgi?id=196483
        <rdar://problem/49288174>

        Reviewed by Simon Fraser.

        This patch fixes the cases when the content gets reconstructed in a way that existing and visible elements gain
        new renderers within one style recalc. We failed to recognize such cases and ended up detecting the newly constructed renderers
        as "visible change" thereby triggering hover.

        Test: fast/events/touch/ios/content-observation/visible-content-gains-new-renderer.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::renderTreeUpdateDidStart):
        (WebCore::ContentChangeObserver::renderTreeUpdateDidFinish):
        (WebCore::ContentChangeObserver::reset):
        (WebCore::ContentChangeObserver::willDestroyRenderer):
        (WebCore::ContentChangeObserver::StyleChangeScope::StyleChangeScope):
        (WebCore::ContentChangeObserver::RenderTreeUpdateScope::RenderTreeUpdateScope):
        (WebCore::ContentChangeObserver::RenderTreeUpdateScope::~RenderTreeUpdateScope):
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::visibleRendererWasDestroyed const):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateRenderTree):
        (WebCore::RenderTreeUpdater::tearDownRenderers):

2019-04-02  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] WEBKIT_MAKE_FORWARDING_HEADERS shouldn't use POST_BUILD to copy generated headers
        https://bugs.webkit.org/show_bug.cgi?id=182757

        Reviewed by Don Olmstead.

        No new tests because no behavior changes.

        * PlatformWin.cmake: Do not use DERIVED_SOURCE_DIRECTORIES of
        WEBKIT_MAKE_FORWARDING_HEADERS. Added
        WebCore_PRIVATE_FRAMEWORK_HEADERS.
        * WebCoreMacros.cmake (GENERATE_DOM_NAMES): Added
        ${_namespace}ElementTypeHelpers.h to _outputfiles.

2019-04-02  Cathie Chen  <cathiechen@igalia.com>

        Update the status of ResizeObserver in features.json.
        https://bugs.webkit.org/show_bug.cgi?id=196443

        Reviewed by Rob Buis.

        * features.json:

2019-04-01  Ryosuke Niwa  <rniwa@webkit.org>

        Nullptr crash in Document::open after calling policyChecker().stopCheck()
        https://bugs.webkit.org/show_bug.cgi?id=196479

        Reviewed by Antti Koivisto.

        Added a missing nullptr check in Document::open after calling m_frame->loader().policyChecker().stopCheck()
        since it invokes m_willSubmitFormCompletionHandlers in WebKit2, and that could clear m_frame.

        Unfortunately, we don't have any reproducible test case.

        * dom/Document.cpp:
        (WebCore::Document::open):

2019-04-01  Timothy Hatcher  <timothy@apple.com>

        Unreviewed build fix.

        * crypto/mac/SerializedCryptoKeyWrapMac.mm:
        (WebCore::createAndStoreMasterKey): Add ALLOW_DEPRECATED_DECLARATIONS_BEGIN/END
        around SecTrustedApplicationCreateFromPath call.

2019-04-01  Simon Fraser  <simon.fraser@apple.com>

        Remove some unused iOS scrolling-related code in Frame
        https://bugs.webkit.org/show_bug.cgi?id=196473

        Reviewed by Zalan Bujtas.

        This code has no callers.

        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::scrollOverflowLayer): Deleted.
        (WebCore::Frame::overflowAutoScrollTimerFired): Deleted.
        (WebCore::Frame::startOverflowAutoScroll): Deleted.
        (WebCore::Frame::checkOverflowScroll): Deleted.
        * page/Frame.h:

2019-04-01  Chris Dumez  <cdumez@apple.com>

        Attr nodes are not cloned properly
        https://bugs.webkit.org/show_bug.cgi?id=196466

        Reviewed by Ryosuke Niwa.

        Attr nodes are not cloned properly according to:
        - https://dom.spec.whatwg.org/#concept-node-clone

        A cloned Attr node should retain its prefix and namespace.

        Both Gecko and Blink agree with the DOM specification here.

        No new tests, rebaselined existing test.

        * dom/Document.cpp:
        (WebCore::Document::importNode):

2019-04-01  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Remove the SVG tear off objects for SVGMatrix, SVGTransfrom, SVGTransformList and SVGAnimatedTransformList
        https://bugs.webkit.org/show_bug.cgi?id=196086

        Reviewed by Simon Fraser.

        The IDL changes:

        SVGTransform.idl:
            Remove the NewObject qualifier from matrix attribute. This matches 
            the specs: https://www.w3.org/TR/SVG11/coords.html#InterfaceSVGTransform.
            SVGTransform will internally hold an SVGMatrix. A change in this
            SVGMatrix will affect the container SVGTransform.

        SVGTransformList.idl:
            Remove the NewObject qualifier from consolidate() method. This matches
            the specs:
            https://www.w3.org/TR/SVG11/coords.html#__svg__SVGTransformList__consolidate
            The method consolidate() should return a reference to the first item
            in the list after consolidating it.

        Code changes:

        -- SVGMatrix is now a superclass of SVGValueProperty<AffineTransform>.
           No need for SVGMatrixValue since it was wrapper of AffineTransform.

        -- SVGTransformValue now holds a Ref<SVGMatrix> member in addition to the
           angle and the rotationCenter. Ref<SVGMatrix> is what SVGTransform.matrix
           will return. So a change in this matrix will change the owner SVGTransform.

        -- SVGTransform is now the owner of SVGMatrix via its SVGTransformValue.

        -- SVGTransformList is now a superclass of SVGValuePropertyList<SVGTransform>.
           It is responsible for parsing a String to items of SVGTransform.

        -- SVGAnimatedTransformList is now defined as SVGAnimatedPropertyList<
           SVGTransformList>.

        Note the ownership chain of these objects is the following:

        -- SVGAnimatedTransformList owns the SVGTransformList via its baseVal 
           and animVal members.

        -- SVGTransformList owns SVGTransform via its list of items

        -- SVGTransform owns SVGMatrix via its SVGTransformValue.

           So a change in SVGMatrix will propagate to the owner SVGElement through
           the following ownership chain:

           SVGMatrix
             |_ SVGTransfrom
                  |_ SVGTransformList
                       |_ SVGAmimatedTransformList
                            |_ SVGElement

        To get the mechanics of this change right, a new accessor, a new animator
        and animation functions are added for the SVGAnimatedTransformList.

        -- SVGViewSpec used to hold an SVGAnimatedTransformListAttribute for the
        member m_transform although this member should not be animated. See the
        comment in the old SVGViewSpec::transform(). This has been changed in this
        patch. SVGViewSpec now holds Ref<SVGTransformList> which matches the specs:
        https://www.w3.org/TR/SVG11/types.html#InterfaceSVGViewSpec.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::attributeAnimationController):
        (WebCore::SVGAnimateElementBase::hasValidAttributeType const):
        (WebCore::SVGAnimateElementBase::calculateToAtEndOfDurationValue):
        (WebCore::SVGAnimateElementBase::calculateFromAndToValues):
        (WebCore::SVGAnimateElementBase::calculateFromAndByValues):
        * svg/SVGAnimateElementBase.h:
        (WebCore::SVGAnimateElementBase::animateRangeString const):
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::animateRangeString const):
        * svg/SVGAnimateTransformElement.h:
                This change is needed because animating the transform attribute can be
        written as
            <animate ... from="translate(100)" to="translate(200)"/>
        or
            <animateTransform type="translate" from="100" to="200"/>"
        So we need to surround the animation range string with the type qualifier
        for animateTransform.

        * svg/SVGAnimatedTransformList.cpp: Removed.
        * svg/SVGAnimatedTransformList.h: Removed.
        * svg/SVGAnimatedType.h: Removed.
        * svg/SVGAnimatedTypeAnimator.cpp: Removed.
        * svg/SVGAnimatedTypeAnimator.h: Removed.
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::adjustForInheritance): Deleted.
        * svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::adjustForInheritance): Deleted.
        (WebCore::SVGAnimationElement::adjustFromToListValues): Deleted.
        (WebCore::SVGAnimationElement::animateDiscreteType): Deleted.
        These functions were used by SVGLegacyAttributeAnimationController.

        * svg/SVGAnimatorFactory.h: Removed.
        * svg/SVGExternalResourcesRequired.h:
        (WebCore::SVGExternalResourcesRequired::isKnownAttribute):
        * svg/SVGFEImageElement.h:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFETileElement.h:
        * svg/SVGFitToViewBox.h:
        (WebCore::SVGFitToViewBox::isKnownAttribute):
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement):
        (WebCore::SVGGradientElement::parseAttribute):
        (WebCore::SVGGradientElement::registerAttributes): Deleted.
        * svg/SVGGradientElement.h:
        (WebCore::SVGGradientElement::gradientTransform const):
        (WebCore::SVGGradientElement::gradientTransformAnimated):
        (WebCore::SVGGradientElement::isKnownAttribute):
        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::SVGGraphicsElement):
        (WebCore::SVGGraphicsElement::animatedLocalTransform const):
        (WebCore::SVGGraphicsElement::parseAttribute):
        (WebCore::SVGGraphicsElement::svgAttributeChanged):
        There is one attribute for this element which is "SVGNames::transformAttr"
        So there is no need to check for it twice.

        (WebCore::SVGGraphicsElement::registerAttributes): Deleted.
        * svg/SVGGraphicsElement.h:
        (WebCore::SVGGraphicsElement::transform const):
        (WebCore::SVGGraphicsElement::transformAnimated):
        (WebCore::SVGGraphicsElement::isKnownAttribute): Deleted.
        * svg/SVGLangSpace.cpp:
        (WebCore::SVGLangSpace::SVGLangSpace):
        (WebCore::SVGLangSpace::xmlspace const):
        (WebCore::SVGLangSpace::isKnownAttribute):
        (WebCore::SVGLangSpace::svgAttributeChanged):
        (WebCore::SVGLangSpace::registerAttributes): Deleted.
        * svg/SVGLangSpace.h:
        (WebCore::SVGLangSpace::xmllang const):
        (WebCore::SVGLangSpace::setXmllang):
        (WebCore::SVGLangSpace::setXmlspace):
        (WebCore::SVGLangSpace::attributeRegistry): Deleted.
        (WebCore::SVGLangSpace::isKnownAttribute): Deleted.
        * svg/SVGLegacyAttributeAnimationController.cpp: Removed.
        * svg/SVGLegacyAttributeAnimationController.h: Removed.
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::setGradientAttributes):
        * svg/SVGMaskElement.h:
        * svg/SVGMatrix.h:
        (WebCore::SVGMatrix::create):
        (WebCore::SVGMatrix::a const):
        (WebCore::SVGMatrix::setA):
        (WebCore::SVGMatrix::b const):
        (WebCore::SVGMatrix::setB):
        (WebCore::SVGMatrix::c const):
        (WebCore::SVGMatrix::setC):
        (WebCore::SVGMatrix::d const):
        (WebCore::SVGMatrix::setD):
        (WebCore::SVGMatrix::e const):
        (WebCore::SVGMatrix::setE):
        (WebCore::SVGMatrix::f const):
        (WebCore::SVGMatrix::setF):
        (WebCore::SVGMatrix::multiply const):
        (WebCore::SVGMatrix::inverse const):
        (WebCore::SVGMatrix::translate const):
        (WebCore::SVGMatrix::scale const):
        (WebCore::SVGMatrix::scaleNonUniform const):
        (WebCore::SVGMatrix::rotate const):
        (WebCore::SVGMatrix::rotateFromVector const):
        (WebCore::SVGMatrix::flipX const):
        (WebCore::SVGMatrix::flipY const):
        (WebCore::SVGMatrix::skewX const):
        (WebCore::SVGMatrix::skewY const):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::parseAttribute):
        (WebCore::SVGPatternElement::svgAttributeChanged):
        (WebCore::SVGPatternElement::collectPatternAttributes const):
        (WebCore::SVGPatternElement::localCoordinateSpaceTransform const):
        (WebCore::SVGPatternElement::registerAttributes): Deleted.
        * svg/SVGPatternElement.h:
        * svg/SVGPoint.h:
        (WebCore::SVGPoint::matrixTransform const):
        * svg/SVGPolyElement.h:
        (WebCore::SVGPolyElement::isKnownAttribute): Deleted.
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::setGradientAttributes):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::createSVGTransform):
        (WebCore::SVGSVGElement::createSVGTransformFromMatrix):
        (WebCore::SVGSVGElement::viewBoxToViewTransform const):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::animatedLocalTransform const):
        * svg/SVGTransform.cpp: Removed.
        * svg/SVGTransform.h:
        (WebCore::SVGTransform::create):
        (WebCore::SVGTransform::~SVGTransform):
        (WebCore::SVGTransform::clone const):
        (WebCore::SVGTransform::type):
        (WebCore::SVGTransform::angle):
        (WebCore::SVGTransform::matrix):
        (WebCore::SVGTransform::setMatrix):
        (WebCore::SVGTransform::setTranslate):
        (WebCore::SVGTransform::setScale):
        (WebCore::SVGTransform::setRotate):
        (WebCore::SVGTransform::setSkewX):
        (WebCore::SVGTransform::setSkewY):
        (WebCore::SVGTransform::SVGTransform):
        * svg/SVGTransform.idl:
        * svg/SVGTransformList.h:
        * svg/SVGTransformList.idl:
        * svg/SVGTransformListValues.cpp: Removed.
        * svg/SVGTransformListValues.h: Removed.
        * svg/SVGTransformValue.cpp: Removed.
        * svg/SVGTransformValue.h:
        (WebCore::SVGTransformValue::SVGTransformValue):
        (WebCore::SVGTransformValue::operator=):
        (WebCore::SVGTransformValue::matrix const):
        (WebCore::SVGTransformValue::rotationCenter const):
        (WebCore::SVGTransformValue::isValid const):
        (WebCore::SVGTransformValue::setMatrix):
        (WebCore::SVGTransformValue::matrixDidChange):
        (WebCore::SVGTransformValue::translate const):
        (WebCore::SVGTransformValue::setTranslate):
        (WebCore::SVGTransformValue::scale const):
        (WebCore::SVGTransformValue::setScale):
        (WebCore::SVGTransformValue::setRotate):
        (WebCore::SVGTransformValue::setSkewX):
        (WebCore::SVGTransformValue::setSkewY):
        (WebCore::SVGTransformValue::valueAsString const):
        (WebCore::SVGTransformValue::prefixForTransfromType):
        (WebCore::SVGTransformValue::appendNumbers const):
        (WebCore::SVGTransformValue::appendMatrix const):
        (WebCore::SVGTransformValue::appendTranslate const):
        (WebCore::SVGTransformValue::appendScale const):
        (WebCore::SVGTransformValue::appendRotate const):
        (WebCore::SVGTransformValue::appendSkewX const):
        (WebCore::SVGTransformValue::appendSkewY const):
        (WebCore::SVGTransformValue::matrix): Deleted.
        * svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseAndSkipType):
        (WebCore::parseAndSkipType): Deleted.
        (WebCore::SVGTransformable::parseTransformAttribute): Deleted.
        The code of this function was moved to SVGTransformList::parse().

        * svg/SVGTransformable.h:
        There is no need for enum TransformParsingMode. It was used by 
        SVGViewSpec::parseViewSpec() to tell SVGTransformable::parseTransformAttribute()
        not to clear the list. SVGTransfromList now has two parse() functions:
        one public and the second is private. The public one clear the list
        before parsing the input String. The private one just does the parsing.
        SVGViewSpec::parseViewSpec() calls the private once since it is a friend
        of SVGTransfromList.

        * svg/SVGValue.h: Removed.
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::SVGViewSpec):
        (WebCore::SVGViewSpec::reset):
        (WebCore::SVGViewSpec::parseViewSpec):
        (WebCore::SVGViewSpec::registerAttributes): Deleted.
        (WebCore::SVGViewSpec::transform): Deleted.
        * svg/SVGViewSpec.h:
        * svg/properties/SVGAnimatedPropertyAccessorImpl.h:
        * svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
        * svg/properties/SVGAnimatedPropertyImpl.h:
        * svg/properties/SVGAnimatedTransformListPropertyTearOff.h: Removed.
        * svg/properties/SVGAnimationAdditiveListFunctionImpl.h:
        (WebCore::SVGAnimationTransformListFunction::progress):
        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
        * svg/properties/SVGAttributeRegistry.h:
        * svg/properties/SVGMatrixTearOff.h: Removed.
        * svg/properties/SVGPropertyAccessorImpl.h:
        * svg/properties/SVGPropertyOwnerRegistry.h:
        (WebCore::SVGPropertyOwnerRegistry::registerProperty):

2019-04-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: DOMDebugger: breakpoints for attribute modifications still fire when breakpoints are disabled
        https://bugs.webkit.org/show_bug.cgi?id=196456
        <rdar://problem/49489747>

        Reviewed by Joseph Pecoraro.

        Test: inspector/dom-debugger/dom-breakpoints.html

        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::didInvalidateStyleAttr):
        (WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent):

2019-04-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unable to copy and paste a PDF from Notes into Mail compose body
        https://bugs.webkit.org/show_bug.cgi?id=196442
        <rdar://problem/48573098>

        Reviewed by Tim Horton.

        Refactor some logic for inserting attachment elements upon paste or drop. Currently, we only prefer inserting
        content as attachment elements if the items are annotated with UIPreferredPresentationStyleAttachment. However,
        many data sources around the system (both first and third party) have not adopted this API, which makes it
        difficult to determine whether a given item provider should be treated as a file or not. In this bug in
        particular, no preferred presentation style is set, so we fail to handle the paste command by inserting an
        attachment element.

        However, most apps around the system that write file or attachment-like data to the pasteboard will at least
        offer a suggested name for the file, in the form of -[NSItemProvider suggestedName]. To address this, instead of
        relying solely on the preferredPresentationStyle, additionally take a suggested name as an indicator that the
        item is probably a file.

        In fact, Pasteboard::fileContentState already has similar logic to check for either a suggested file name or
        explicitly specified presentation style. We pull this out into a separate helper method on PasteboardItemInfo,
        and use it for both Pasteboard::fileContentState and prefersAttachmentRepresentation.

        Tests:  WKAttachmentTestsIOS.InsertPastedContactAsAttachment
                WKAttachmentTestsIOS.InsertPastedMapItemAsAttachment

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::mimeTypeFromContentType):

        Work around <rdar://problem/49478229> by using the "text/vcard" MIME type to handle "public.vcard". CoreServices
        currently maps "public.vcard" to "text/directory" when using UTTypeCopyPreferredTagWithClass, despite the SPI
        -[NSURLFileTypeMappings MIMETypeForExtension:] returning "text/vcard" for a ".vcf" file.

        * platform/PasteboardItemInfo.h:
        (WebCore::PasteboardItemInfo::canBeTreatedAsAttachmentOrFile const):

        Add a helper method to determine whether the PasteboardItemInfo prefers to be represented as inline data, or an
        attachment, or neither. This differs slightly from the existing value of preferredPresentationStyle in that we
        consider having a suggested file name as a strong indicator that the item should be treated as an attachment,
        even if the presentation style is unspecified.

        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::Pasteboard::fileContentState):

        Use PasteboardItemInfo::canBeTreatedAsAttachmentOrFile().

        * platform/ios/PasteboardIOS.mm:
        (WebCore::prefersAttachmentRepresentation):

        Use PasteboardItemInfo::canBeTreatedAsAttachmentOrFile().

2019-04-01  Tim Horton  <timothy_horton@apple.com>

        Make UIWKDocumentContext rects per-character instead of per-word
        https://bugs.webkit.org/show_bug.cgi?id=196459

        Reviewed by Wenson Hsieh.

        No new tests; adjusted expected results of WebKit.DocumentEditingContext.

        * editing/TextIterator.cpp:
        (WebCore::CharacterIterator::CharacterIterator):
        * editing/TextIterator.h:
        (WebCore::CharacterIterator::atEnd const):
        (WebCore::CharacterIterator::text const):
        Add WEBCORE_EXPORT to some things.
        Introduce a CharacterIterator constructor that takes Positions, like one that TextIterator has.
        Move initializers to the header.

2019-04-01  Antti Koivisto  <antti@apple.com>

        Update event region when toggling pointer-events:none
        https://bugs.webkit.org/show_bug.cgi?id=195902
        <rdar://problem/48988384>

        Reviewed by Simon Fraser.

        Test: fast/scrolling/ios/event-region-pointer-events.html

        Normally paint invalidation requests compositing configuration update whenever anything that would
        affect event region changes. However mutating 'pointer-events' property does not cause paint invalidation.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):

        Request compositing update explicitly from the containing layer.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::invalidateEventRegion):
        * rendering/RenderLayer.h:

2019-04-01  Chris Dumez  <cdumez@apple.com>

        Support "noreferrer" for window.open()
        https://bugs.webkit.org/show_bug.cgi?id=194533

        Reviewed by Geoffrey Garen.

        Support "noreferrer" for window.open() as per:
        - https://github.com/whatwg/html/pull/4331

        Tests: imported/w3c/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-noreferrer.html
               http/wpt/html/browsers/the-window-object/window-open-noopener-webkit.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        * page/WindowFeatures.cpp:
        (WebCore::setWindowFeature):
        * page/WindowFeatures.h:

2019-04-01  Said Abou-Hallawa  <sabouhallawa@apple.com>

        SVGMatrix.IDL methods do not conform to the specs
        https://bugs.webkit.org/show_bug.cgi?id=196263

        Reviewed by Simon Fraser.

        I think there was a misconception about these functions. The specs link
        is: https://www.w3.org/TR/SVG11/coords.html#InterfaceSVGMatrix.

        Notice that the specs does not state that the SVGMethod methods should
        raise the exception NO_MODIFICATION_ALLOWED_ERR if the object is read
        only. Notice setting the attribute 'a' for example may raise this
        exception. Therefore, I think the specs wanted to make these operations
        read-only. None of the methods should raise the exception
        NO_MODIFICATION_ALLOWED_ERR.

        In fact the SVG code was doing the right thing. For example SVGMatrix::scale()
        was calling SVGMatrixValue::scale() which was making a copy of itself,
        applying the scale on the copy and then returning the copy. When 
        SVGMatrix::scale() receives the copy of the SVGMatrixValue it creates and
        returns a new SVGMatrix object.

        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGMatrix.h:
        (WebCore::SVGMatrix::create):
        (WebCore::SVGMatrix::a const):
        (WebCore::SVGMatrix::b const):
        (WebCore::SVGMatrix::c const):
        (WebCore::SVGMatrix::d const):
        (WebCore::SVGMatrix::e const):
        (WebCore::SVGMatrix::f const):
        (WebCore::SVGMatrix::multiply const):
        (WebCore::SVGMatrix::inverse const):
        (WebCore::SVGMatrix::translate const):
        (WebCore::SVGMatrix::scale const):
        (WebCore::SVGMatrix::scaleNonUniform const):
        (WebCore::SVGMatrix::rotate const):
        (WebCore::SVGMatrix::rotateFromVector const):
        (WebCore::SVGMatrix::flipX const):
        (WebCore::SVGMatrix::flipY const):
        (WebCore::SVGMatrix::skewX const):
        (WebCore::SVGMatrix::skewY const):
        (WebCore::SVGMatrix::a): Deleted.
        (WebCore::SVGMatrix::b): Deleted.
        (WebCore::SVGMatrix::c): Deleted.
        (WebCore::SVGMatrix::d): Deleted.
        (WebCore::SVGMatrix::e): Deleted.
        (WebCore::SVGMatrix::f): Deleted.
        (WebCore::SVGMatrix::multiply): Deleted.
        (WebCore::SVGMatrix::inverse): Deleted.
        (WebCore::SVGMatrix::translate): Deleted.
        (WebCore::SVGMatrix::scale): Deleted.
        (WebCore::SVGMatrix::scaleNonUniform): Deleted.
        (WebCore::SVGMatrix::rotate): Deleted.
        (WebCore::SVGMatrix::rotateFromVector): Deleted.
        (WebCore::SVGMatrix::flipX): Deleted.
        (WebCore::SVGMatrix::flipY): Deleted.
        (WebCore::SVGMatrix::skewX): Deleted.
        (WebCore::SVGMatrix::skewY): Deleted.
        (WebCore::SVGMatrix::SVGMatrix): Deleted.
        * svg/SVGMatrix.idl:
        * svg/SVGMatrixValue.h: Removed.
        * svg/SVGTransform.cpp:
        (WebCore::SVGTransform::matrix):
        * svg/SVGTransformDistance.cpp:
        (WebCore::SVGTransformDistance::addToSVGTransform const):
        * svg/SVGTransformValue.h:
        (WebCore::SVGTransformValue::matrix const):
        (WebCore::SVGTransformValue::matrix):
        (WebCore::SVGTransformValue::svgMatrix): Deleted.
        (WebCore::operator==): Deleted.
        (WebCore::operator!=): Deleted.
        * svg/properties/SVGMatrixTearOff.h:
        * svg/properties/SVGPropertyTearOff.h:
        (WebCore::SVGPropertyTearOff::propertyReference const):

2019-04-01  Simon Fraser  <simon.fraser@apple.com>

        Plumb through a ScrollType value that indicates whether a scroll was a user or programmatic scroll
        https://bugs.webkit.org/show_bug.cgi?id=196424

        Reviewed by Zalan Bujtas.

        In preparation for fixing webkit.org/b/195584, we need to know if an overflow scroll
        is programmatic, so plumb through an enum value. The functions touched by this patch are
        only ever called for programmatic scrolls.

        * dom/Element.cpp:
        (WebCore::Element::scrollTo):
        (WebCore::Element::setScrollLeft):
        (WebCore::Element::setScrollTop):
        * platform/ScrollTypes.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setScrollLeft):
        (WebCore::RenderBox::setScrollTop):
        * rendering/RenderBox.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToXPosition):
        (WebCore::RenderLayer::scrollToYPosition):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::setScrollLeft):
        (WebCore::RenderListBox::setScrollTop):
        * rendering/RenderListBox.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::setScrollLeft):
        (WebCore::RenderTextControlSingleLine::setScrollTop):
        * rendering/RenderTextControlSingleLine.h:

2019-04-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Refactor some logic for inserting pasted or dropped virtual card files as attachment elements
        https://bugs.webkit.org/show_bug.cgi?id=196435
        Work towards <rdar://problem/48573098>

        Reviewed by Darin Adler.

        Refactor some existing codepaths on iOS for inserting VCard files as attachment elements. Instead of using a
        separate readVirtualContactFile method for converting a vcard file or data into an attachment element (possibly
        accompanied by a link), use the existing readFilePaths WebContentReader method.

        To handle links which may accompany the attachment element, add a helper method in PasteboardIOS that reads a
        titled URL prior to inserting an attachment element, in the case of pasting or dropping a VCF.

        This means we no longer need to handle attachment reading in readPasteboardWebContentDataForType, so we can
        simply bail before reading "public.vcard" here and defer to reading other data types.

        Covered by existing API tests in WKAttachmentTests and DragAndDropTestsIOS.

        * editing/WebContentReader.h:
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::WebContentReader::readVirtualContactFile): Deleted.
        * platform/Pasteboard.h:
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::readPasteboardWebContentDataForType):
        (WebCore::readURLAlongsideAttachmentIfNecessary):
        (WebCore::prefersAttachmentRepresentation):
        (WebCore::Pasteboard::read):
        (WebCore::Pasteboard::readRespectingUTIFidelities):

2019-04-01  Antti Koivisto  <antti@apple.com>

        Trying to scroll the compose pane on gmail.com scrolls the message list behind
        https://bugs.webkit.org/show_bug.cgi?id=196426
        <rdar://problem/49402667>

        Reviewed by Darin Adler.

        Test: fast/scrolling/ios/event-region-visibility-hidden.html

        We fail to gather event region from desdendants of non-overflowing elements with 'visibility:hidden'.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):

        Skip the subtree walk only if the current region covers the box already.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintList):

        Remove the (wrong) optimization, we bail out quickly on first renderer if possible so this is not high value.

2019-04-01  Emilio Cobos Álvarez  <emilio@crisal.io>

        Be less strict about closing blocks in attribute and functional pseudo-element selectors.
        https://bugs.webkit.org/show_bug.cgi?id=142167

        Reviewed by Antti Koivisto.

        This was also an issue for, e.g., "::slotted(foo", turns out.

        This matches Chromium, Firefox, and the spec:

        https://drafts.csswg.org/css-syntax/#parse-error:

        > Certain points in the parsing algorithm are said to be parse errors. The error
        > handling for parse errors is well-defined: user agents must either act as
        > described below when encountering such problems, or must abort processing at
        > the first error that they encounter for which they do not wish to apply the
        > rules described below.

        https://drafts.csswg.org/css-syntax/#consume-simple-block:

        > <EOF-token>
        >   This is a parse error. Return the block.

        Tests: web-platform-tests/dom/nodes/selectors.js (and probably others)

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

2019-04-01  Pablo Saavedra  <psaavedra@igalia.com>

        Build failure after r243644 in GTK Linux 64-bit stable builds
        https://bugs.webkit.org/show_bug.cgi?id=196440

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTextureMapperFlags):

2019-03-31  Manuel Rego Casasnovas  <rego@igalia.com>

        Scroll position gets reset when overflow:scroll is inside grid
        https://bugs.webkit.org/show_bug.cgi?id=196337
        <rdar://problem/49385784>

        Reviewed by Simon Fraser.

        Fix scroll position when there are changes inside a grid item with "overflow: scroll".

        Test: fast/css-grid-layout/grid-item-content-scroll-position.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock): Use beginUpdateScrollInfoAfterLayoutTransaction()
        and endAndCommitUpdateScrollInfoAfterLayoutTransaction().

2019-03-31  Ryosuke Niwa  <rniwa@webkit.org>

        Reduce the size of Node::deref by eliminating an explicit parentNode check
        https://bugs.webkit.org/show_bug.cgi?id=195776

        Reviewed by Darin Adler.

        Address post-commit review comments.

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::removedLastRef):
        * dom/Node.h:
        (WebCore::Node::deref):
        (WebCore::Node::setParentNode):

2019-03-31  Sam Weinig  <weinig@apple.com>

        Remove more i386 specific configurations
        https://bugs.webkit.org/show_bug.cgi?id=196430

        Reviewed by Alexey Proskuryakov.

        * Configurations/FeatureDefines.xcconfig:
        ENABLE_WEB_AUTHN_macosx can now be enabled unconditionally on macOS.

2019-03-31  Andy Estes  <aestes@apple.com>

        [iOS] WebKit should consult the navigation response policy delegate before previewing a QuickLook document
        https://bugs.webkit.org/show_bug.cgi?id=196433
        <rdar://problem/49293305>

        Reviewed by Tim Horton.

        When ResourceLoader would encounter a response with a MIME type that QuickLook supports, the
        response would be implicitly allowed and a QuickLook preview would be generated. After
        generating, the client's navigation response policy delegate would be notified of the
        preview response, but not the underlying response. Notably, the preview response has a URL
        scheme of "x-apple-ql-id", does not include any underlying HTTP headers, and usually has a
        MIME type of "text/html" or "application/pdf" rather than the underlying response MIME type.

        To allow clients to make better navigation response policy decisions, this patch changes the
        above behavior for WKWebView clients that have linked against a version of WebKit that
        includes this change. Rather than notifying the client's navigation response policy delegate
        of the preview response, we notify the client of the underlying response. Only if the client
        responds with a policy of "allow" will the QuickLook preview response be loaded (without
        another call to the navigation response policy delegate).

        Non-WKWebView clients and clients that have linked against a version of WebKit that does not
        include this change will retain the original behavior.

        Covered by existing layout tests and new and existing API tests.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::shouldCreatePreviewLoaderForResponse const):
        (WebCore::SubresourceLoader::didReceiveResponse):
        * loader/ios/PreviewLoader.h:
        * loader/ios/PreviewLoader.mm:
        (-[WebPreviewLoader initWithResourceLoader:resourceResponse:]):
        (-[WebPreviewLoader _loadPreviewIfNeeded]):
        (-[WebPreviewLoader connection:didReceiveData:lengthReceived:]):
        (-[WebPreviewLoader connectionDidFinishLoading:]):
        (-[WebPreviewLoader connection:didFailWithError:]):
        (WebCore::PreviewLoader::create):
        (WebCore::PreviewLoader::didReceiveResponse):
        (-[WebPreviewLoader _sendDidReceiveResponseIfNecessary]): Deleted.
        (WebCore::PreviewLoader::shouldCreateForMIMEType): Deleted.
        * page/Settings.yaml:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::canShowMIMEType):
        * platform/network/ios/PreviewConverter.h:
        * platform/network/ios/PreviewConverter.mm:
        (WebCore::PreviewConverter::supportsMIMEType):

2019-03-29  Dean Jackson  <dino@apple.com>

        gl.readPixels with type gl.FLOAT does not work
        https://bugs.webkit.org/show_bug.cgi?id=171432
        <rdar://problem/31905150>

        Reviewed by Antoine Quint.

        Our validation code was identifying readPixels of
        type FLOAT as invalid, for three reasons:
        - we didn't support the FLOAT type at all.
        - we only allowed the combination of RGBA and
        UNSIGNED_BYTE in WebGL 1 [*].
        - if we had a framebuffer of format RGBA, we assumed
        we could only read into a Uint8 ArrayBuffer.

        [*] This bug isn't completely fixed, so I opened
        https://bugs.webkit.org/show_bug.cgi?id=196418

        Test: fast/canvas/webgl/readPixels-float.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::readPixels):
        - flip the logic in a conditional that was clearly wrong yet
          thankfully had no impact.
        - support type FLOAT when the relevant extension is enabled.
        - allow FLOAT as a valid type (see new bug above)
        - create a new macro for CHECK_COMPONENT_COUNT
        - update the existing macros to not be case statements,
          so that we can put logic in the switch.

2019-03-30  Antti Koivisto  <antti@apple.com>

        Try to fix Windows build.

        * platform/graphics/RoundedRect.cpp:
        (WebCore::approximateAsRegion):

2019-03-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: JSC Sampling Profiler thread not getting subtracted in CPU Usage Timeline
        https://bugs.webkit.org/show_bug.cgi?id=196419
        <rdar://problem/49444023>

        Reviewed by Devin Rousso.

        * page/ResourceUsageThread.cpp:
        (WebCore::ResourceUsageThread::addObserver):
        We forgot to call the function that would setup platform state
        allowing us to subtract out the sampling profiler thread.

2019-03-30  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Add iFrame elements to the list of "considered clickable" elements.
        https://bugs.webkit.org/show_bug.cgi?id=196410
        <rdar://problem/49436828>

        Reviewed by Simon Fraser.

        163.com constructs an iFrame to display the login pane on hover. This patch ensures that we take iFrames into account while observing for visible content change by considering iFrame elements "clickable".
        (While iFrames don't necessarily have clickable content, we can't just sit and wait until they are fully loaded.)

        Test: fast/events/touch/ios/content-observation/iframe-is-shown-on-hover.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::StyleChangeScope::isConsideredClickable const):

2019-03-30  Antti Koivisto  <antti@apple.com>

        Try to fix Windows build.

        * platform/graphics/Region.cpp:
        * platform/graphics/RoundedRect.cpp:

2019-03-30  Antti Koivisto  <antti@apple.com>

        Hit-testing of boxes over scrollers should account for border-radius
        https://bugs.webkit.org/show_bug.cgi?id=195374
        <rdar://problem/48649993>

        Reviewed by Simon Fraser.

        Test: fast/scrolling/ios/border-radious-event-region.html

        * page/Frame.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties const):

        Testing support.

        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/RoundedRect.cpp:
        (WebCore::approximateAsRegion):

        Add a function to approximate RoundedRects as Regions.
        It cuts away rectangles from the corners following the corner shapes.
        More rectangles are cut for larger radii.

        * platform/graphics/RoundedRect.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):

        Use the new interface to get rounded corners right.
        In rectangle case this takes optimized paths.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        * testing/Internals.cpp:
        (WebCore::toLayerTreeFlags):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-03-29  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Expand DOM timer observation to 350ms
        https://bugs.webkit.org/show_bug.cgi?id=196411
        <rdar://problem/49391144>

        Reviewed by Simon Fraser.

        imdb.com main page has 350ms hover intent timer to bring up the hover menus around the search bar.

        Test: fast/events/touch/ios/content-observation/350ms-hover-intent.html

        * page/ios/ContentChangeObserver.cpp:

2019-03-29  John Wilander  <wilander@apple.com>

        Move WebResourceLoadStatisticsStore IPC calls from the UI process to the network process
        https://bugs.webkit.org/show_bug.cgi?id=196407
        <rdar://problem/47859936>

        Reviewed by Brent Fulgham.

        Test: http/tests/storageAccess/grant-storage-access-under-opener-at-popup-user-gesture.html

        This patch removes old code for the batching into "statistics updated" calls.
        Since the move of Resource Load Statistics to the network process, all such
        collection is done directly through dedicated calls to the network process.

        The remaining functionality was renamed to make it more clear, i.e.
        ResourceLoadObserver::notifyObserver() renamed to
        ResourceLoadObserver::updateCentralStatisticsStore().

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::setStatisticsUpdatedCallback):
        (WebCore::ResourceLoadObserver::setRequestStorageAccessUnderOpenerCallback):
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logWebSocketLoading):
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        (WebCore::ResourceLoadObserver::requestStorageAccessUnderOpener):
        (WebCore::ResourceLoadObserver::updateCentralStatisticsStore):
        (WebCore::ResourceLoadObserver::clearState):
        (WebCore::ResourceLoadObserver::setNotificationCallback): Deleted.
        (WebCore::ResourceLoadObserver::ResourceLoadObserver): Deleted.
        (WebCore::ResourceLoadObserver::scheduleNotificationIfNeeded): Deleted.
        (WebCore::ResourceLoadObserver::notifyObserver): Deleted.
        * loader/ResourceLoadObserver.h:
        * testing/Internals.cpp:
        (WebCore::Internals::notifyResourceLoadObserver):

2019-03-29  Chris Dumez  <cdumez@apple.com>

        Make someWindow.frames, .self, .window always return someWindow
        https://bugs.webkit.org/show_bug.cgi?id=195406

        Reviewed by Alex Christensen.

        Make someWindow.frames, .self, .window always return someWindow. Previously, they
        would return null when the window would lose its browsing context.

        This aligns our behavior with Firefox and the HTML specification:
        - https://github.com/whatwg/html/pull/4410

        Chrome has also recently aligned with Firefox and the HTML specification here so
        it makes sense for WebKit to follow.

        No new tests, rebaselined existing tests.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::self const):
        (WebCore::JSDOMWindow::window const):
        (WebCore::JSDOMWindow::frames const):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::focus):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2019-03-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete WebMetal implementation in favor of WebGPU
        https://bugs.webkit.org/show_bug.cgi?id=195418

        Reviewed by Dean Jackson.

        WebMetal was only ever intended to be a proof-of-concept, and was never intended to be shipped.
        Now that our WebGPU implementation is achieving good functionality, we're hitting conflicts
        because we have both implementations. We should delete the non-standard implementation in favor
        of the standards-based implementation.

        Deletes relevant tests.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebMetalRenderPassAttachmentDescriptorCustom.cpp: Removed.
        * bindings/js/JSWebMetalRenderingContextCustom.cpp: Removed.
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/Document.cpp:
        (WebCore::Document::getCSSCanvasContext):
        * dom/Document.h:
        * dom/Document.idl:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::isWebMetalType): Deleted.
        (WebCore::HTMLCanvasElement::createContextWebMetal): Deleted.
        (WebCore::HTMLCanvasElement::getContextWebMetal): Deleted.
        * html/HTMLCanvasElement.h:
        * html/HTMLCanvasElement.idl:
        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::isWebGPU const):
        (WebCore::CanvasRenderingContext::isWebMetal const): Deleted.
        * html/canvas/WebMetalBuffer.cpp: Removed.
        * html/canvas/WebMetalBuffer.h: Removed.
        * html/canvas/WebMetalBuffer.idl: Removed.
        * html/canvas/WebMetalCommandBuffer.cpp: Removed.
        * html/canvas/WebMetalCommandBuffer.h: Removed.
        * html/canvas/WebMetalCommandBuffer.idl: Removed.
        * html/canvas/WebMetalCommandQueue.cpp: Removed.
        * html/canvas/WebMetalCommandQueue.h: Removed.
        * html/canvas/WebMetalCommandQueue.idl: Removed.
        * html/canvas/WebMetalComputeCommandEncoder.cpp: Removed.
        * html/canvas/WebMetalComputeCommandEncoder.h: Removed.
        * html/canvas/WebMetalComputeCommandEncoder.idl: Removed.
        * html/canvas/WebMetalComputePipelineState.cpp: Removed.
        * html/canvas/WebMetalComputePipelineState.h: Removed.
        * html/canvas/WebMetalComputePipelineState.idl: Removed.
        * html/canvas/WebMetalDepthStencilDescriptor.cpp: Removed.
        * html/canvas/WebMetalDepthStencilDescriptor.h: Removed.
        * html/canvas/WebMetalDepthStencilDescriptor.idl: Removed.
        * html/canvas/WebMetalDepthStencilState.cpp: Removed.
        * html/canvas/WebMetalDepthStencilState.h: Removed.
        * html/canvas/WebMetalDepthStencilState.idl: Removed.
        * html/canvas/WebMetalDrawable.cpp: Removed.
        * html/canvas/WebMetalDrawable.h: Removed.
        * html/canvas/WebMetalDrawable.idl: Removed.
        * html/canvas/WebMetalEnums.cpp: Removed.
        * html/canvas/WebMetalEnums.h: Removed.
        * html/canvas/WebMetalEnums.idl: Removed.
        * html/canvas/WebMetalFunction.cpp: Removed.
        * html/canvas/WebMetalFunction.h: Removed.
        * html/canvas/WebMetalFunction.idl: Removed.
        * html/canvas/WebMetalLibrary.cpp: Removed.
        * html/canvas/WebMetalLibrary.h: Removed.
        * html/canvas/WebMetalLibrary.idl: Removed.
        * html/canvas/WebMetalRenderCommandEncoder.cpp: Removed.
        * html/canvas/WebMetalRenderCommandEncoder.h: Removed.
        * html/canvas/WebMetalRenderCommandEncoder.idl: Removed.
        * html/canvas/WebMetalRenderPassAttachmentDescriptor.cpp: Removed.
        * html/canvas/WebMetalRenderPassAttachmentDescriptor.h: Removed.
        * html/canvas/WebMetalRenderPassAttachmentDescriptor.idl: Removed.
        * html/canvas/WebMetalRenderPassColorAttachmentDescriptor.cpp: Removed.
        * html/canvas/WebMetalRenderPassColorAttachmentDescriptor.h: Removed.
        * html/canvas/WebMetalRenderPassColorAttachmentDescriptor.idl: Removed.
        * html/canvas/WebMetalRenderPassDepthAttachmentDescriptor.cpp: Removed.
        * html/canvas/WebMetalRenderPassDepthAttachmentDescriptor.h: Removed.
        * html/canvas/WebMetalRenderPassDepthAttachmentDescriptor.idl: Removed.
        * html/canvas/WebMetalRenderPassDescriptor.cpp: Removed.
        * html/canvas/WebMetalRenderPassDescriptor.h: Removed.
        * html/canvas/WebMetalRenderPassDescriptor.idl: Removed.
        * html/canvas/WebMetalRenderPipelineColorAttachmentDescriptor.cpp: Removed.
        * html/canvas/WebMetalRenderPipelineColorAttachmentDescriptor.h: Removed.
        * html/canvas/WebMetalRenderPipelineColorAttachmentDescriptor.idl: Removed.
        * html/canvas/WebMetalRenderPipelineDescriptor.cpp: Removed.
        * html/canvas/WebMetalRenderPipelineDescriptor.h: Removed.
        * html/canvas/WebMetalRenderPipelineDescriptor.idl: Removed.
        * html/canvas/WebMetalRenderPipelineState.cpp: Removed.
        * html/canvas/WebMetalRenderPipelineState.h: Removed.
        * html/canvas/WebMetalRenderPipelineState.idl: Removed.
        * html/canvas/WebMetalRenderingContext.cpp: Removed.
        * html/canvas/WebMetalRenderingContext.h: Removed.
        * html/canvas/WebMetalRenderingContext.idl: Removed.
        * html/canvas/WebMetalSize.h: Removed.
        * html/canvas/WebMetalSize.idl: Removed.
        * html/canvas/WebMetalTexture.cpp: Removed.
        * html/canvas/WebMetalTexture.h: Removed.
        * html/canvas/WebMetalTexture.idl: Removed.
        * html/canvas/WebMetalTextureDescriptor.cpp: Removed.
        * html/canvas/WebMetalTextureDescriptor.h: Removed.
        * html/canvas/WebMetalTextureDescriptor.idl: Removed.
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildObjectForCanvas):
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::requestContent):
        (WebCore::contextAsScriptValue):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebMetalEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::webMetalEnabled const): Deleted.
        * platform/Logging.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::layerTypeForPlatformLayer):
        (WebCore::PlatformCALayerCocoa::PlatformCALayerCocoa):
        * platform/graphics/cocoa/WebMetalLayer.h: Removed.
        * platform/graphics/cocoa/WebMetalLayer.mm: Removed.
        * platform/graphics/gpu/legacy/GPULegacyBuffer.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyBuffer.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyCommandBuffer.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyCommandBuffer.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyCommandQueue.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyCommandQueue.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyComputeCommandEncoder.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyComputeCommandEncoder.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyComputePipelineState.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyComputePipelineState.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyDepthStencilDescriptor.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyDepthStencilDescriptor.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyDepthStencilState.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyDepthStencilState.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyDevice.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyDevice.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyDrawable.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyDrawable.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyEnums.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyFunction.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyFunction.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyLibrary.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyLibrary.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyRenderCommandEncoder.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyRenderCommandEncoder.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyRenderPassAttachmentDescriptor.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyRenderPassAttachmentDescriptor.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyRenderPassColorAttachmentDescriptor.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyRenderPassColorAttachmentDescriptor.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyRenderPassDepthAttachmentDescriptor.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyRenderPassDepthAttachmentDescriptor.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyRenderPassDescriptor.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyRenderPassDescriptor.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyRenderPipelineColorAttachmentDescriptor.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyRenderPipelineColorAttachmentDescriptor.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyRenderPipelineDescriptor.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyRenderPipelineDescriptor.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyRenderPipelineState.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyRenderPipelineState.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacySize.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyTexture.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyTexture.h: Removed.
        * platform/graphics/gpu/legacy/GPULegacyTextureDescriptor.cpp: Removed.
        * platform/graphics/gpu/legacy/GPULegacyTextureDescriptor.h: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyBufferMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyCommandBufferMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyCommandQueueMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyComputeCommandEncoderMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyComputePipelineStateMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyDepthStencilDescriptorMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyDepthStencilStateMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyDeviceMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyDrawableMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyFunctionMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyLibraryMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyRenderCommandEncoderMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyRenderPassAttachmentDescriptorMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyRenderPassColorAttachmentDescriptorMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyRenderPassDepthAttachmentDescriptorMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyRenderPassDescriptorMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyRenderPipelineColorAttachmentDescriptorMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyRenderPipelineDescriptorMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyRenderPipelineStateMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyTextureDescriptorMetal.mm: Removed.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyTextureMetal.mm: Removed.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setWebMetalEnabled): Deleted.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2019-03-29  Devin Rousso  <drousso@apple.com>

        Web Inspector: add fast returns for instrumentation hooks that have no affect before a frontend is connected
        https://bugs.webkit.org/show_bug.cgi?id=196382
        <rdar://problem/49403417>

        Reviewed by Joseph Pecoraro.

        Ensure that all instrumentation hooks use `FAST_RETURN_IF_NO_FRONTENDS` or check that
        `developerExtrasEnabled`. There should be no activity to/from any inspector objects until
        developer extras are enabled.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorld):
        (WebCore::InspectorInstrumentation::scriptExecutionBlockedByCSP):
        (WebCore::InspectorInstrumentation::domContentLoadedEventFired):
        (WebCore::InspectorInstrumentation::loadEventFired):
        (WebCore::InspectorInstrumentation::frameDetachedFromParent):
        (WebCore::InspectorInstrumentation::loaderDetachedFromFrame):
        (WebCore::InspectorInstrumentation::frameStartedLoading):
        (WebCore::InspectorInstrumentation::frameStoppedLoading):
        (WebCore::InspectorInstrumentation::frameScheduledNavigation):
        (WebCore::InspectorInstrumentation::frameClearedScheduledNavigation):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::frameWindowDiscardedImpl):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::didFailLoadingImpl):
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::consoleCountImpl):
        (WebCore::InspectorInstrumentation::startConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::stopConsoleTimingImpl):

        * inspector/agents/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::frameWindowDiscarded):

2019-03-29  Chris Dumez  <cdumez@apple.com>

        Set window.closed immediately when close() is invoked
        https://bugs.webkit.org/show_bug.cgi?id=195409

        Reviewed by Alex Christensen.

        Window.closed should return true if it is closing:
        - https://html.spec.whatwg.org/#dom-window-closed

        Window.close() sets the 'is closing' flag to true synchronously, as per:
        - https://html.spec.whatwg.org/#dom-window-close (step 3.1)

        No new tests, rebaselined existing tests.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::closed const):

2019-03-29  Zalan Bujtas  <zalan@apple.com>

        [Simple line layout] Turn off inline boxtree generation for multiline content
        https://bugs.webkit.org/show_bug.cgi?id=196404
        <rdar://problem/49234033>

        Reviewed by Simon Fraser.

        Currently simple line layout can't provide the correct line breaking context to the inline tree when the boxtree is
        generated using the simple line runs. This patch limits the generation of such trees to single lines. Multiline content will
        go through the "let's layout this content again" codepath.
        This patch fixes disappearing content on Questar.

        Test: fast/text/simple-line-layout-and-multiline-inlineboxtree.html

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::canUseForLineBoxTree):

2019-03-29  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Replace unsigned longs in WebGPU with uint64_t
        https://bugs.webkit.org/show_bug.cgi?id=196401

        Reviewed by Myles C. Maxfield.

        Unsigned long is not guaranteed to be 64 bits on all platforms. In addition, rowPitch is updated
        to u32 in the API and the implementation to match.

        No new tests. No new behavior.

        * Modules/webgpu/WebGPUBuffer.cpp:
        (WebCore::WebGPUBuffer::setSubData):
        * Modules/webgpu/WebGPUBuffer.h:
        * Modules/webgpu/WebGPUBufferBinding.h:
        * Modules/webgpu/WebGPUCommandEncoder.cpp:
        (WebCore::WebGPUCommandEncoder::copyBufferToBuffer):
        * Modules/webgpu/WebGPUCommandEncoder.h:
        * Modules/webgpu/WebGPUCommandEncoder.idl:
        * Modules/webgpu/WebGPURenderPassEncoder.cpp:
        (WebCore::WebGPURenderPassEncoder::setVertexBuffers):
        * Modules/webgpu/WebGPURenderPassEncoder.h:
        * platform/graphics/gpu/GPUBindGroupLayout.h:
        * platform/graphics/gpu/GPUBuffer.h:
        (WebCore::GPUBuffer::byteLength const):
        * platform/graphics/gpu/GPUBufferBinding.h:
        * platform/graphics/gpu/GPUBufferDescriptor.h:
        * platform/graphics/gpu/GPUCommandBuffer.h:
        * platform/graphics/gpu/GPURenderPassEncoder.h:
        * platform/graphics/gpu/GPUVertexAttributeDescriptor.h:
        * platform/graphics/gpu/GPUVertexInputDescriptor.h:
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::GPUBuffer):
        (WebCore::GPUBuffer::setSubData):
        * platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm:
        (WebCore::GPUCommandBuffer::copyBufferToBuffer):
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::GPURenderPassEncoder::setVertexBuffers):

2019-03-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r243250): Text interactions are no longer suppressed when editing in some websites
        https://bugs.webkit.org/show_bug.cgi?id=196378
        <rdar://problem/49231299>

        Reviewed by Simon Fraser.

        Enabling async overflow scrolling by default in r243250 exposed an issue with hidden editable area detection
        heuristics. Currently, an empty value for RenderLayer::selfClipRect is used to determine whether the layer
        enclosing the editable element or form control is completely clipped by a parent (in other words, the clip rect
        is empty). With async overflow scrolling, the enclosing layer of the editable element (as seen in the websites
        affected by this bug) will now be a clipping root for painting, since it is composited. This means selfClipRect
        returns a non-empty rect despite the layer being entirely clipped, which negates the heuristic.

        To address this, we adjust the clipping heuristic to instead walk up the layer tree (crossing frame boundaries)
        and look for enclosing ancestors with overflow clip. For each layer we find with an overflow clip, compute the
        clip rect of the previous layer relative to the ancestor with overflow clip. If the clipping rect is empty, we
        know that the layer is hidden.

        This isn't a perfect strategy, since it may still report false negatives (reporting a layer as visible when it
        is not) in some cases. One such edge case is a series of overflow hidden containers, nested in such a way that
        each container is only partially clipped relative to its ancestor, but the deepest layer is completely clipped
        relative to the topmost layer. However, this heuristic is relatively cheap (entailing a layer tree walk at
        worst) and works for common use cases on the web without risking scenarios in which text selection that
        shouldn't be suppressed ends up becoming suppressed.

        Test: editing/selection/ios/hide-selection-in-textarea-with-transform.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isTransparentOrFullyClippedRespectingParentFrames const):

2019-03-29  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Add Server Trust Evaluation Support.
        https://bugs.webkit.org/show_bug.cgi?id=191646

        Reviewed by Fujii Hironori.

        Tests: http/tests/ssl/iframe-upgrade.https.html
               http/tests/ssl/mixedContent/insecure-websocket.html
               http/tests/ssl/upgrade-origin-usage.html

        * platform/network/curl/AuthenticationChallenge.h:
        * platform/network/curl/AuthenticationChallengeCurl.cpp:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        (WebCore::AuthenticationChallenge::protectionSpaceForPasswordBased):
        (WebCore::AuthenticationChallenge::protectionSpaceForServerTrust):
        (WebCore::AuthenticationChallenge::protectionSpaceFromHandle): Deleted.
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::disableServerTrustEvaluation):
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setupTransfer):
        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::disableServerTrustEvaluation):

2019-03-29  Ryosuke Niwa  <rniwa@webkit.org>

        Pasting a table from Confluence strip of table cell content
        https://bugs.webkit.org/show_bug.cgi?id=196390

        Reviewed by Antti Koivisto.

        The bug was ultimately caused by FrameView of the document we use to sanitize the pasteboard content
        having 0px by 0px dimension. This caused div with `overflow-x: auto` surrounding a table to have
        the height of 0px. Because StyledMarkupAccumulator::renderedTextRespectingRange uses TextIterator
        to serialize a text node and this div was an ancestor of the text node, TextIterator::handleTextNode
        ended up exiting early.

        Fixed the bug by giving FrameView, which is used to sanitize the content, a dimension of 800px by 600px.

        Using TextIteratorIgnoresStyleVisibility is not a great alternative since removing invisible content
        during paste is an important privacy feature.

        Test: editing/pasteboard/paste-content-with-overflow-auto-parent-across-origin.html

        * editing/markup.cpp:
        (WebCore::createPageForSanitizingWebContent):

2019-03-29  Antoine Quint  <graouts@apple.com>

        WebKitTestRunner crashes when running pointerevents/ios/touch-action-none-in-overflow-scrolling-touch.html
        https://bugs.webkit.org/show_bug.cgi?id=196345

        Reviewed by Dean Jackson.

        An enum used within a WTF::OptionSet needs to have only power-of-two values that are larger than 0.

        * platform/TouchAction.h:
        * rendering/style/StyleRareNonInheritedData.h:

2019-03-29  Michael Catanzaro  <mcatanzaro@igalia.com>

        HTMLInputElement::setEditingValue should not fail if renderer doesn't exist
        https://bugs.webkit.org/show_bug.cgi?id=195708

        Reviewed by Wenson Hsieh.

        HTMLInputElement::setEditingValue currently returns early if the element's renderer() is
        null. This is causing the Epiphany password manager to fail to remember passwords on
        https://www.geico.com/ except for navigations through page cache.

        This check was originally added to avoid some assertion, but I don't know which one, and
        there's definitely not any assertion hit nowadays in this case. Probably there are more
        guards checking if renderer() is null elsewhere in the code nowadays, closer to where it's
        really needed.

        Test: fast/forms/editing-value-null-renderer.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setEditingValue):

2019-03-29  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rebaseline WPT test after r243638.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:

2019-03-28  Antoine Quint  <graouts@apple.com>

        All PointerEvent.isTrusted is always false.
        https://bugs.webkit.org/show_bug.cgi?id=196075
        <rdar://problem/49158778>

        Reviewed by Chris Dumez.

        Test: pointerevents/ios/pointer-events-is-trusted.html

        The constructors we were using for some PointerEvent::create() methods were using initializers which are expected to be used with JS APIs
        and thus generate untrusted events. We switch to using constructors using dedicated parameters which will set isTrusted to true.

        * dom/PointerEvent.cpp:
        (WebCore::PointerEvent::create):
        (WebCore::PointerEvent::createPointerCancelEvent):
        (WebCore::PointerEvent::PointerEvent):
        (WebCore::m_isPrimary):
        (WebCore::m_pointerType):
        * dom/PointerEvent.h:
        * page/PointerCaptureController.cpp:
        (WebCore::PointerCaptureController::cancelPointer):

2019-03-29  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] imxvpudecoder detection and handling
        https://bugs.webkit.org/show_bug.cgi?id=196346

        Reviewed by Xabier Rodriguez-Calvar.

        When the imxvpudecoder is used, the texture sampling of the
        directviv-uploaded texture returns an RGB value, so there's no need
        to convert it. This patch also includes a refactoring of the
        ImageRotation flag handling. The flag is now computed once only
        and stored in an instance variable.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::GstVideoFrameHolder::GstVideoFrameHolder):
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::pushTextureToCompositor):
        (WebCore::MediaPlayerPrivateGStreamerBase::flushCurrentBuffer):
        (WebCore::MediaPlayerPrivateGStreamerBase::copyVideoTextureToPlatformTexture):
        (WebCore::MediaPlayerPrivateGStreamerBase::nativeImageForCurrentTime):
        (WebCore::MediaPlayerPrivateGStreamerBase::setVideoSourceOrientation):
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTextureMapperFlags):
        (WebCore::texMapFlagFromOrientation): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2019-03-29  Cathie Chen  <cathiechen@igalia.com>

        Implement ResizeObserver.
        https://bugs.webkit.org/show_bug.cgi?id=157743

        Reviewed by Simon Fraser.

        Tests: resize-observer/modify-frametree-in-callback.html
               resize-observer/multi-frames.html
               resize-observer/observe-element-from-other-frame.html
               Imported from WPT by https://bugs.webkit.org/show_bug.cgi?id=193821

        The data structure: Document has a ResizeObserver slot. ResizeObserver has a ResizeObservation slot.
        ResizeObservation is related to one Element and the last reported size.
        On the other hand, Element has a ResizeObservation slot.

        At the beginning of willDisplayPage, it will check resize observations for current page if:
        1. There is FrameView be layout and there are ResizeObservers in this page.
        2. m_resizeObserverTimer has been started by observe() or hasSkippedResizeObservers().
        During checkResizeObservations(), we'll gatherDocumentsNeedingResizeObservationCheck() first,
        then notifyResizeObservers() for each document. During notifyResizeObservers(), it will gather
        the m_activeObservations whose size changed and target element deeper than require depth.
        The size changed shallower observations are skipped observations which will be delivered
        in the next time. And an ErrorEvent will be reported.
        After gathering, deliverResizeObservations create entries and invoke the callbacks with them.

        The Element from other document could be observed.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/Document.cpp:
        (WebCore::Document::getParserLocation const):
        (WebCore::Document::addResizeObserver):
        (WebCore::Document::removeResizeObserver):
        (WebCore::Document::hasResizeObservers):
        (WebCore::Document::gatherResizeObservations): Gather m_activeObservations at depth and return the shallowest depth.
        (WebCore::Document::deliverResizeObservations): Deliver m_activeObservations, generate ResizeObserverEntries, and invoke the m_callbacks.
        (WebCore::Document::hasSkippedResizeObservations const): To determine if Document has the size changed but not delivered observations.
        (WebCore::Document::setHasSkippedResizeObservations):
        (WebCore::Document::scheduleResizeObservations):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::~Element):
        (WebCore::Element::disconnectFromResizeObservers):
        (WebCore::Element::ensureResizeObserverData):
        (WebCore::Element::resizeObserverData):
        * dom/Element.h:
        * dom/ElementRareData.cpp:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::resizeObserverData):
        (WebCore::ElementRareData::setResizeObserverData):
        (WebCore::ElementRareData::useTypes const):
        * page/FrameView.cpp:
        (WebCore::FrameView::didLayout):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::FrameViewLayoutContext::layoutTimerFired): We need to start a ResizeObserver timer here, because for WK1 this might not trigger flushCompositingChanges.
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::willDisplayPage):
        (WebCore::Page::hasResizeObservers const):
        (WebCore::Page::gatherDocumentsNeedingResizeObservationCheck): Gather the documents with resize observers.
        (WebCore::Page::checkResizeObservations): Gather documents then notifyResizeObservers for each document.
        (WebCore::Page::scheduleResizeObservations):
        (WebCore::Page::notifyResizeObservers): Gather m_activeObservations and deliver them. Report ErrorEvent if it has skipped observations.
        * page/Page.h:
        (WebCore::Page::setNeedsCheckResizeObservations): Page needs to check ResizeObservations if FrameView layout or m_resizeObserverTimer has been started.
        (WebCore::Page::needsCheckResizeObservations const):
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::addMessage):
        (WebCore::getParserLocationForConsoleMessage): Deleted.
        * page/ResizeObservation.cpp: Added.
        (WebCore::ResizeObservation::create):
        (WebCore::ResizeObservation::ResizeObservation):
        (WebCore::ResizeObservation::~ResizeObservation):
        (WebCore::ResizeObservation::updateObservationSize):
        (WebCore::ResizeObservation::computeObservedSize const):
        (WebCore::ResizeObservation::computeTargetLocation const):
        (WebCore::ResizeObservation::computeContentRect const):
        (WebCore::ResizeObservation::elementSizeChanged const):
        (WebCore::ResizeObservation::targetElementDepth const):
        * page/ResizeObservation.h: Copied from Tools/DumpRenderTree/TestOptions.h.
        (WebCore::ResizeObservation::target const):
        * page/ResizeObserver.cpp: Added.
        (WebCore::ResizeObserver::create):
        (WebCore::ResizeObserver::ResizeObserver):
        (WebCore::ResizeObserver::~ResizeObserver):
        (WebCore::ResizeObserver::scheduleObservations):
        (WebCore::ResizeObserver::observe):
        (WebCore::ResizeObserver::unobserve):
        (WebCore::ResizeObserver::disconnect):
        (WebCore::ResizeObserver::targetDestroyed):
        (WebCore::ResizeObserver::gatherObservations):
        (WebCore::ResizeObserver::deliverObservations):
        (WebCore::ResizeObserver::removeTarget):
        (WebCore::ResizeObserver::removeAllTargets):
        (WebCore::ResizeObserver::removeObservation):
        (WebCore::ResizeObserver::hasPendingActivity const):
        (WebCore::ResizeObserver::activeDOMObjectName const):
        (WebCore::ResizeObserver::canSuspendForDocumentSuspension const):
        (WebCore::ResizeObserver::stop):
        * page/ResizeObserver.h: Added.
        (WebCore::ResizeObserver::hasObservations const):
        (WebCore::ResizeObserver::hasActiveObservations const):
        (WebCore::ResizeObserver::maxElementDepth):
        (WebCore::ResizeObserver::hasSkippedObservations const):
        (WebCore::ResizeObserver::setHasSkippedObservations):
        * page/ResizeObserver.idl: Copied from Tools/DumpRenderTree/TestOptions.h.
        * page/ResizeObserverCallback.h: Copied from Tools/DumpRenderTree/TestOptions.h.
        * page/ResizeObserverCallback.idl: Copied from Tools/DumpRenderTree/TestOptions.h.
        * page/ResizeObserverEntry.h: Copied from Tools/DumpRenderTree/TestOptions.h.
        (WebCore::ResizeObserverEntry::create):
        (WebCore::ResizeObserverEntry::target const):
        (WebCore::ResizeObserverEntry::contentRect const):
        (WebCore::ResizeObserverEntry::ResizeObserverEntry):
        * page/ResizeObserverEntry.idl: Copied from Tools/DumpRenderTree/TestOptions.h.
        * page/Settings.yaml:

2019-03-28  Chris Dumez  <cdumez@apple.com>

        Support <object>.contentWindow
        https://bugs.webkit.org/show_bug.cgi?id=195562

        Reviewed by Sam Weinig.

        Support <object>.contentWindow as per:
        - https://html.spec.whatwg.org/multipage/iframe-embed-object.html#dom-object-contentwindow

        No new tests, updated / rebaselined existing tests.

        * html/HTMLObjectElement.idl:

2019-03-28  Myles C. Maxfield  <mmaxfield@apple.com>

        FontFace constructor throws an exception when there is a name which starts with a number
        https://bugs.webkit.org/show_bug.cgi?id=196232
        <rdar://problem/49293978>

        Reviewed by Ryosuke Niwa.

        We were technically following the spec, but Chrome and Firefox are both consistent and it was making a website break.
        This is just a short-term fix until the underlying https://bugs.webkit.org/show_bug.cgi?id=196381 is fixed.

        Test: fast/text/font-face-family.html

        * css/FontFace.cpp:
        (WebCore::FontFace::setFamily):

2019-03-28  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Replace 'unsigned long' with 'unsigned' when implementing u32 variables
        https://bugs.webkit.org/show_bug.cgi?id=194618
        <rdar://problem/48055796>

        Reviewed by Myles C. Maxfield.

        WebIDL for "unsigned" on 64-bit is "unsigned long". Update Web GPU to match.

        No new tests; no change in behavior.

        * Modules/webgpu/GPUBindGroupLayoutBinding.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLVertexBufferIndexCalculator.cpp:
        (WebCore::WHLSL::Metal::calculateVertexBufferIndex):
        * Modules/webgpu/WHLSL/Metal/WHLSLVertexBufferIndexCalculator.h:
        * Modules/webgpu/WebGPUBindGroupBinding.h:
        * Modules/webgpu/WebGPUBindGroupDescriptor.cpp:
        (WebCore::validateBufferBindingType):
        (WebCore::WebGPUBindGroupDescriptor::tryCreateGPUBindGroupDescriptor const):
        * Modules/webgpu/WebGPUBuffer.cpp:
        (WebCore::WebGPUBuffer::setSubData):
        * Modules/webgpu/WebGPUBuffer.h:
        * Modules/webgpu/WebGPUBufferBinding.h:
        * Modules/webgpu/WebGPURenderPassEncoder.cpp:
        (WebCore::WebGPURenderPassEncoder::setVertexBuffers):
        (WebCore::WebGPURenderPassEncoder::draw):
        * Modules/webgpu/WebGPURenderPassEncoder.h:
        * platform/graphics/gpu/GPUBindGroupBinding.h:
        * platform/graphics/gpu/GPUBindGroupLayout.h:
        * platform/graphics/gpu/GPUBufferBinding.h:
        * platform/graphics/gpu/GPUExtent3D.h:
        * platform/graphics/gpu/GPULimits.h:
        * platform/graphics/gpu/GPURenderPassEncoder.h:
        * platform/graphics/gpu/GPUTextureDescriptor.h:
        * platform/graphics/gpu/cocoa/GPUBindGroupLayoutMetal.mm:
        (WebCore::GPUBindGroupLayout::tryCreate):
        * platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm:
        (WebCore::GPUBindGroup::tryCreate):
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::GPURenderPassEncoder::setVertexBuffers):
        (WebCore::GPURenderPassEncoder::draw):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::trySetInputStateForPipelineDescriptor):
        * platform/graphics/gpu/cocoa/GPUTextureMetal.mm:
        (WebCore::storageModeForPixelFormatAndSampleCount):

2019-03-28  Ryosuke Niwa  <rniwa@webkit.org>

        getBoundingClientRect always returns empty rect on a collapsed range
        https://bugs.webkit.org/show_bug.cgi?id=196380

        Reviewed by Wenson Hsieh.

        The bug was caused by Range::boundingRect merging rects via FloatRect::unite which ignores empty rects.
        Use uniteIfNonZero instead to fix the bug. Note that we can't use uniteEvenIfEmpty because that would
        set x, y to always 0, 0 as we would end up merging any rect with the initial empty rect.

        Test: fast/dom/Range/getBoundingClientRect-on-collapsed-selection-range.html

        * dom/Range.cpp:
        (WebCore::Range::boundingRect const):

2019-03-28  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Prototype compute pipeline with MSL
        https://bugs.webkit.org/show_bug.cgi?id=196107
        <rdar://problem/46289650>

        Reviewed by Myles Maxfield.

        Add GPUComputePassEncoder, GPUComputePipeline, and GPUComputePipelineDescriptor.
        Implement everything needed to prototype a compute pipeline in Web GPU using Metal shaders and bound resources.

        Test: webgpu/compute-squares.html

        Add files and symbols:
        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

        Misc fixes:
        * Modules/webgpu/WHLSL/WHLSLNameResolver.h: Missing include.
        * Modules/webgpu/WHLSL/WHLSLSynthesizeConstructors.cpp: Missing include.
        * Modules/webgpu/WebGPUPipelineStageDescriptor.cpp: Added. Move pipeline stage validation logic here.
        (WebCore::WebGPUPipelineStageDescriptor::tryCreateGPUPipelineStageDescriptor const):
        * Modules/webgpu/WebGPURenderPipeline.cpp: Remove unnecessary include.
        * Modules/webgpu/WebGPURenderPipeline.h:
        * Modules/webgpu/WebGPURenderPipelineDescriptor.cpp: Add missing inlcude.
        (WebCore::WebGPUPipelineStageDescriptor::tryCreateGPUPipelineStageDescriptor const): Moved to WebGPUPipelineStageDescriptor.cpp.
        * platform/graphics/gpu/GPUPipelineDescriptorBase.h: Add missing include.
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm: Add missing include.
        (WebCore::GPURenderPipeline::GPURenderPipeline): Remove unecessary ref of GPUPipelineLayout.
        * platform/text/mac/TextEncodingRegistryMac.mm: Carbon.h was causing ambiguous reference build errors in this file.

        Enable creating a GPUComputePassEncoder from a GPUCommandEncoder:
        * Modules/webgpu/WebGPUCommandEncoder.cpp:
        (WebCore::WebGPUCommandEncoder::beginRenderPass): No longer passing this WebGPUCommandEncoder to pass encoders.
        (WebCore::WebGPUCommandEncoder::beginComputePass): Added.
        * Modules/webgpu/WebGPUCommandEncoder.h:
        * Modules/webgpu/WebGPUCommandEncoder.idl:

        Add GPUComputePassEncoder:
        * Modules/webgpu/WebGPUComputePassEncoder.cpp: Added.
        (WebCore::WebGPUComputePassEncoder::create):
        (WebCore::WebGPUComputePassEncoder::WebGPUComputePassEncoder):
        (WebCore::WebGPUComputePassEncoder::setPipeline):
        (WebCore::WebGPUComputePassEncoder::dispatch):
        (WebCore::WebGPUComputePassEncoder::passEncoder):
        (WebCore::WebGPUComputePassEncoder::passEncoder const):
        * Modules/webgpu/WebGPUComputePassEncoder.h: Added.
        * Modules/webgpu/WebGPUComputePassEncoder.idl: Added.
        * platform/graphics/gpu/GPUComputePassEncoder.h: Added.
        (WebCore::GPUComputePassEncoder::~GPUComputePassEncoder):
        * platform/graphics/gpu/cocoa/GPUComputePassEncoderMetal.mm: Added.
        (WebCore::GPUComputePassEncoder::tryCreate):
        (WebCore::GPUComputePassEncoder::GPUComputePassEncoder):
        (WebCore::GPUComputePassEncoder::setPipeline):
        (WebCore::GPUComputePassEncoder::dispatch): Use a default calculation for threadsPerThreadgroup while MSL is still an accepted shader format.
        (WebCore::GPUComputePassEncoder::platformPassEncoder const):
        (WebCore::GPUComputePassEncoder::useResource):
        (WebCore::GPUComputePassEncoder::setComputeBuffer):

        Add GPUComputePipeline:
        * Modules/webgpu/WebGPUComputePipeline.cpp: Added.
        (WebCore::WebGPUComputePipeline::create):
        (WebCore::WebGPUComputePipeline::WebGPUComputePipeline):
        * Modules/webgpu/WebGPUComputePipeline.h: Added.
        (WebCore::WebGPUComputePipeline::computePipeline const):
        * Modules/webgpu/WebGPUComputePipeline.idl: Added.
        * Modules/webgpu/WebGPUComputePipelineDescriptor.cpp: Added.
        (WebCore::WebGPUComputePipelineDescriptor::tryCreateGPUComputePipelineDescriptor const):
        * Modules/webgpu/WebGPUComputePipelineDescriptor.h: Added.
        * Modules/webgpu/WebGPUComputePipelineDescriptor.idl: Added.
        * platform/graphics/gpu/GPUComputePipeline.h: Added.
        (WebCore::GPUComputePipeline::platformComputePipeline const):
        * platform/graphics/gpu/GPUComputePipelineDescriptor.h: Added.
        (WebCore::GPUComputePipelineDescriptor::GPUComputePipelineDescriptor):
        * platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm: Added.
        (WebCore::tryCreateMtlComputeFunction):
        (WebCore::tryCreateMTLComputePipelineState):
        (WebCore::GPUComputePipeline::tryCreate):
        (WebCore::GPUComputePipeline::GPUComputePipeline):

        Enable creating a GPUComputePipeline from a GPUDevice:
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createComputePipeline const):
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDevice.idl:
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::tryCreateComputePipeline const):
        * platform/graphics/gpu/GPUDevice.h:

        No longer unnecessarily ref the WebGPUCommandEncoder when creating pass encoder:
        * Modules/webgpu/WebGPUProgrammablePassEncoder.cpp:
        (WebCore::WebGPUProgrammablePassEncoder::setBindGroup):
        (WebCore::WebGPUProgrammablePassEncoder::WebGPUProgrammablePassEncoder): Deleted.
        (WebCore::WebGPUProgrammablePassEncoder::setBindGroup const): Deleted.
        * Modules/webgpu/WebGPUProgrammablePassEncoder.h:
        * Modules/webgpu/WebGPURenderPassEncoder.cpp:
        (WebCore::WebGPURenderPassEncoder::create):
        (WebCore::WebGPURenderPassEncoder::WebGPURenderPassEncoder):
        (WebCore::WebGPURenderPassEncoder::setPipeline):
        (WebCore::WebGPURenderPassEncoder::passEncoder):
        (WebCore::WebGPURenderPassEncoder::passEncoder const):
        * Modules/webgpu/WebGPURenderPassEncoder.h:

        Updates to GPUBindGroup and *setBindGroup for compute function arguments:
        * platform/graphics/gpu/GPUBindGroup.h:
        (WebCore::GPUBindGroup::vertexArgsBuffer const):
        (WebCore::GPUBindGroup::fragmentArgsBuffer const):
        (WebCore::GPUBindGroup::computeArgsBuffer const):
        (WebCore::GPUBindGroup::vertexArgsBuffer): Deleted. Const-qualified.
        (WebCore::GPUBindGroup::fragmentArgsBuffer): Ditto.
        * platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm:
        (WebCore::tryGetResourceAsMTLSamplerState): Now just returns the MTLSamplerState to reduce reference churning.
        (WebCore::GPUBindGroup::tryCreate):
        (WebCore::GPUBindGroup::GPUBindGroup):
        (WebCore::tryGetResourceAsSampler): Renamed to tryGetResourceAsMTLSamplerState.

        Updates to GPUProgrammablePassEncoder and GPURenderPassEncoder:
        * platform/graphics/gpu/GPUProgrammablePassEncoder.h:
        (WebCore::GPUProgrammablePassEncoder::setVertexBuffer):
        (WebCore::GPUProgrammablePassEncoder::setFragmentBuffer):
        (WebCore::GPUProgrammablePassEncoder::setComputeBuffer): Added.
        * platform/graphics/gpu/GPURenderPassEncoder.h:
        (WebCore::GPURenderPassEncoder::~GPURenderPassEncoder):
        * platform/graphics/gpu/GPURenderPipeline.h:
        * platform/graphics/gpu/cocoa/GPUProgrammablePassEncoderMetal.mm: Remove unecessary include.
        (WebCore::GPUProgrammablePassEncoder::endPass): No longer virtual. Delegates shared behavior for derived classes.
        (WebCore::GPUProgrammablePassEncoder::setBindGroup):
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::GPURenderPassEncoder::platformPassEncoder const):
        (WebCore::GPURenderPassEncoder::setPipeline):
        (WebCore::GPURenderPassEncoder::draw):
        (WebCore::GPURenderPassEncoder::useResource): These private overrides are called only by base after checking for encoder existence.
        (WebCore::GPURenderPassEncoder::setVertexBuffer): Ditto.
        (WebCore::GPURenderPassEncoder::setFragmentBuffer): Ditto.
        (WebCore::GPURenderPassEncoder::endPass): Deleted. Now handled by base class.

2019-03-27  Jiewen Tan  <jiewen_tan@apple.com>

        IDBRequest::dispatchEvent should check nullability of m_transaction before operations that rely on it to be non null
        https://bugs.webkit.org/show_bug.cgi?id=196319
        <rdar://problem/49355279>

        Reviewed by Alex Christensen.

        The test that triggers this crash is on Bug 196276.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent):

2019-03-28  Ryosuke Niwa  <rniwa@webkit.org>

        Debug assert in DOMSelection::containsNode when node belongs to a different tree
        https://bugs.webkit.org/show_bug.cgi?id=196342

        Reviewed by Antti Koivisto.

        The assertion was wrong. It's possible for Range::compareBoundaryPoints to return WRONG_DOCUMENT_ERR
        when the node and the start container belong to two different trees.

        Return false in such a case for now since it's unclear (unspecified) what these methods on Selection
        should do with respect to shadow trees, preserving the current behavior of release builds.

        Test: editing/selection/containsNode-with-no-common-ancestor.html

        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::containsNode const):

2019-03-28  Tim Horton  <timothy_horton@apple.com>

        Fix the !ENABLE(APPLE_PAY) build

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::shouldAllowUserAgentScripts const):

2019-03-28  Sihui Liu  <sihui_liu@apple.com>

        Crash at IDBDatabaseInfo::infoForExistingObjectStore and IDBDatabaseInfo::infoForExistingObjectStore
        https://bugs.webkit.org/show_bug.cgi?id=196120
        <rdar://problem/39869767>

        Reviewed by Ryosuke Niwa.

        No new tests because it is unclear how the crash happens. Added release logging to help debug.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::createIndex):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::performCreateIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::performPutOrAdd):

2019-03-28  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: unbinding a canvas should always remove the agent as an observer
        https://bugs.webkit.org/show_bug.cgi?id=196324
        <rdar://problem/49357109>

        Reviewed by Matt Baker.

        No change in functionality.

        * html/CanvasBase.cpp:
        (WebCore::CanvasBase::notifyObserversCanvasChanged):
        (WebCore::CanvasBase::notifyObserversCanvasResized):
        (WebCore::CanvasBase::notifyObserversCanvasDestroyed):

        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::frameNavigated):
        (WebCore::InspectorCanvasAgent::bindCanvas):
        (WebCore::InspectorCanvasAgent::unbindCanvas):

2019-03-28  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Remove dead code in MediaPlayerPrivateGStreamer::doSeek()
        https://bugs.webkit.org/show_bug.cgi?id=196352

        Reviewed by Xabier Rodriguez-Calvar.

        MediaPlayerPrivateGStreamerMSE overrides doSeek() and seek(), so this
        branch is never reached.

        This patch does not introduce behavior changes.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::doSeek):

2019-03-28  Simon Fraser  <simon.fraser@apple.com>

        [macOS WK2] Overlays on instagram.com are shifted if you click on a photo after scrolling
        https://bugs.webkit.org/show_bug.cgi?id=196330
        rdar://problem/49100304

        Reviewed by Antti Koivisto.

        When we call ScrollingTree::applyLayerPositions() on the main thread after a flush,
        we need to ensure that the most recent version of the scrolling tree has been committed,
        because it has to have state (like requested scroll position and layout viewport rect)
        that match the layer flush.

        To fix this we have to have the main thread wait for the commit to complete, so
        ThreadedScrollingTree keeps track of a pending commit count, and uses a condition
        variable to allow the main thread to safely wait for it to reach zero.

        Tracing shows that this works as expected, and the main thread is never blocked for
        more than a few tens of microseconds.

        Also lock the tree mutex in ScrollingTree::handleWheelEvent(), since we enter the
        scrolling tree here and we don't want that racing with applyLayerPositions() on the
        main thread.

        Test: scrollingcoordinator/mac/fixed-scrolled-body.html

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::handleWheelEvent):
        (WebCore::ScrollingTree::applyLayerPositions):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::commitTreeState):
        (WebCore::ThreadedScrollingTree::incrementPendingCommitCount):
        (WebCore::ThreadedScrollingTree::decrementPendingCommitCount):
        (WebCore::ThreadedScrollingTree::waitForPendingCommits):
        (WebCore::ThreadedScrollingTree::applyLayerPositions):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::commitTreeState):

2019-03-28  Zalan Bujtas  <zalan@apple.com>

        [SimpleLineLayout] Disable SLL when text-underline-position is not auto.
        https://bugs.webkit.org/show_bug.cgi?id=196338
        <rdar://problem/47975167>

        Reviewed by Daniel Bates.

        Disable simple line layout unconditionally on non-auto text-underline-position content. We don't support it yet.

        Test: fast/text/simple-line-layout-with-text-underline-position.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForStyle):

2019-03-28  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        Silence lot of warnings when compiling with clang
        https://bugs.webkit.org/show_bug.cgi?id=196310

        Reviewed by Michael Catanzaro.

        No change in behavior.

        * accessibility/AccessibilityObject.h: add missing override
        clause.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcChangeState): add missing format string to log.
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.h: add
        missing virtual destructor.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        add missing override clause and remove unused private member.

2019-03-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [FreeType] Incorrect application of glyph positioning in the Y direction
        https://bugs.webkit.org/show_bug.cgi?id=161493

        Reviewed by Michael Catanzaro.

        Use the first glyph origin as the initial advance of every complex text run.

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::FontCascade::drawGlyphs): Update the yOffset using the height advance.
        * platform/graphics/cairo/GraphicsContextImplCairo.cpp:
        (WebCore::GraphicsContextImplCairo::drawGlyphs): Ditto.
        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Set the initial advance.

2019-03-27  Ryosuke Niwa  <rniwa@webkit.org>

        [macOS] Select element doesn't show popup if select element had lost focus while popup was previosuly shown
        https://bugs.webkit.org/show_bug.cgi?id=196336

        Reviewed by Tim Horton.

        * rendering/RenderMenuList.cpp:
        (RenderMenuList::popupDidHide): Added a comment.

2019-03-27  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Standardize Web GPU object reference counting and creation logic
        https://bugs.webkit.org/show_bug.cgi?id=196183

        Reviewed by Dean Jackson.

        Make getters return raw refs/pointers and provide const versions if necessary.
        All Web GPU objects are non-nullable, but become no-op if invalid, and descriptors are not moved unless needed.

        No new tests; no change in behavior.

        Getter updates and const qualifications:
        * Modules/webgpu/WebGPUAdapter.h:
        (WebCore::WebGPUAdapter::options const):
        * Modules/webgpu/WebGPUBindGroup.h:
        (WebCore::WebGPUBindGroup::bindGroup):
        (WebCore::WebGPUBindGroup::bindGroup const): Deleted.
        * Modules/webgpu/WebGPUBindGroupDescriptor.cpp:
        (WebCore::WebGPUBindGroupDescriptor::tryCreateGPUBindGroupDescriptor const):
        * Modules/webgpu/WebGPUBindGroupDescriptor.h:
        * Modules/webgpu/WebGPUBindGroupLayout.h:
        (WebCore::WebGPUBindGroupLayout::bindGroupLayout const):
        * Modules/webgpu/WebGPUBuffer.h:
        (WebCore::WebGPUBuffer::buffer):
        (WebCore::WebGPUBuffer::buffer const):
        * Modules/webgpu/WebGPURenderPassDescriptor.cpp:
        (WebCore::WebGPURenderPassDescriptor::tryCreateGPURenderPassDescriptor const):
        * Modules/webgpu/WebGPURenderPassEncoder.cpp:
        (WebCore::WebGPURenderPassEncoder::setVertexBuffers):
        * Modules/webgpu/WebGPUSampler.h:
        (WebCore::WebGPUSampler::sampler const):
        * Modules/webgpu/WebGPUSwapChain.h:
        (WebCore::WebGPUSwapChain::swapChain):
        (WebCore::WebGPUSwapChain::swapChain const): Deleted.
        * Modules/webgpu/WebGPUTexture.h:
        (WebCore::WebGPUTexture::texture):
        (WebCore::WebGPUTexture::texture const): Deleted.
        * Modules/webgpu/WebGPUTextureView.h:
        (WebCore::WebGPUTextureView::texture):
        (WebCore::WebGPUTextureView::texture const): Deleted.
        * platform/graphics/gpu/GPUBindGroupBinding.h:
        * platform/graphics/gpu/GPUBindGroupDescriptor.h:
        * platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm:
        (WebCore::tryGetResourceAsMTLSamplerState):

        Web GPU object creation logic:
        * Modules/webgpu/WebGPUCommandEncoder.cpp:
        (WebCore::WebGPUBufferCopyView::tryCreateGPUBufferCopyView const):
        (WebCore::WebGPUTextureCopyView::tryCreateGPUTextureCopyView const):
        (WebCore::WebGPUCommandEncoder::beginRenderPass):
        (WebCore::WebGPUCommandEncoder::copyBufferToBuffer):
        * Modules/webgpu/WebGPUCommandEncoder.h:
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createBuffer const):
        (WebCore::WebGPUDevice::createTexture const):
        (WebCore::WebGPUDevice::createPipelineLayout const):
        (WebCore::WebGPUDevice::createBindGroup const):
        (WebCore::WebGPUDevice::createShaderModule const):
        (WebCore::WebGPUDevice::createRenderPipeline const):
        (WebCore::WebGPUDevice::getQueue const):
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUPipelineLayout.cpp:
        (WebCore::WebGPUPipelineLayout::create):
        (WebCore::WebGPUPipelineLayout::WebGPUPipelineLayout):
        * Modules/webgpu/WebGPUPipelineLayout.h:
        (WebCore::WebGPUPipelineLayout::pipelineLayout):
        * Modules/webgpu/WebGPUPipelineLayoutDescriptor.cpp: 
        (WebCore::WebGPUPipelineLayoutDescriptor::tryCreateGPUPipelineLayoutDescriptor const):
        * Modules/webgpu/WebGPUPipelineLayoutDescriptor.h:
        * Modules/webgpu/WebGPUQueue.cpp:
        (WebCore::WebGPUQueue::create):
        (WebCore::WebGPUQueue::WebGPUQueue):
        (WebCore::WebGPUQueue::submit):
        * Modules/webgpu/WebGPUQueue.h:
        * Modules/webgpu/WebGPUShaderModule.cpp:
        (WebCore::WebGPUShaderModule::create):
        (WebCore::WebGPUShaderModule::WebGPUShaderModule):
        * Modules/webgpu/WebGPUShaderModule.h:
        (WebCore::WebGPUShaderModule::module const):
        * platform/graphics/gpu/GPUBuffer.h:
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::tryCreateBuffer):
        (WebCore::GPUDevice::tryCreateTexture const):
        (WebCore::GPUDevice::tryCreateShaderModule const):
        (WebCore::GPUDevice::tryCreateRenderPipeline const):
        (WebCore::GPUDevice::tryGetQueue const):
        (WebCore::GPUDevice::createShaderModule const): Deleted.
        (WebCore::GPUDevice::createRenderPipeline const): Deleted.
        (WebCore::GPUDevice::getQueue const): Deleted.
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/GPUPipelineLayout.cpp:
        (WebCore::GPUPipelineLayout::create):
        (WebCore::GPUPipelineLayout::GPUPipelineLayout):
        * platform/graphics/gpu/GPUPipelineLayout.h:
        (WebCore::GPUPipelineLayout::bindGroupLayouts const):
        * platform/graphics/gpu/GPUPipelineLayoutDescriptor.h:
        * platform/graphics/gpu/GPURenderPipeline.h:
        * platform/graphics/gpu/GPUShaderModule.h:
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::tryCreate):
        (WebCore::GPUBuffer::GPUBuffer):
        (WebCore::GPUBuffer::setSubData):
        * platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm:
        (WebCore::GPUCommandBuffer::tryCreate):
        * platform/graphics/gpu/cocoa/GPUDeviceMetal.mm:
        (WebCore::GPUDevice::tryCreate):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::GPURenderPipeline::tryCreate):
        (WebCore::GPURenderPipeline::GPURenderPipeline):
        (WebCore::GPURenderPipeline::create): Deleted.
        * platform/graphics/gpu/cocoa/GPUShaderModuleMetal.mm:
        (WebCore::GPUShaderModule::tryCreate):
        (WebCore::GPUShaderModule::create): Deleted.

        Add WebGPUPipelineLayoutDescriptor.cpp to project:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        
2019-03-27  Shawn Roberts  <sroberts@apple.com>

        Unreviewed, rolling out r243346.

        Causing timeouts in animation tests across 10 builds

        Reverted changeset:

        "[Web Animations] JS wrapper may be deleted while animation is
        yet to dispatch its finish event"
        https://bugs.webkit.org/show_bug.cgi?id=196118
        https://trac.webkit.org/changeset/243346

2019-03-27  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Stop using the global _WKContentChange
        https://bugs.webkit.org/show_bug.cgi?id=196288
        <rdar://problem/49228081>

        Reviewed by Simon Fraser.

        This patch ensures that activities on frames don't overwrite the observed state on other frames.  
        (Unfortunately the global variable is still used in WebKitLegacy (see webkit.org/b/196286)).

        Tests: fast/events/touch/ios/content-observation/remove-subframe-while-observing.html
               fast/events/touch/ios/content-observation/subframe.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::observedContentChange const): Deleted.
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::observedContentChange const):
        (WebCore::ContentChangeObserver::setHasNoChangeState):
        (WebCore::ContentChangeObserver::setHasIndeterminateState):
        (WebCore::ContentChangeObserver::setHasVisibleChangeState):
        (WebCore::ContentChangeObserver::setObservedContentState):

2019-03-27  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Remove the SVG tear off objects for SVGPathSeg, SVGPathSegList and SVGAnimatedPathSegList
        https://bugs.webkit.org/show_bug.cgi?id=196085

        Reviewed by Simon Fraser.

        The SVGPathSegList is similar to the other SVGLists, e.g. SVGNUmberList
        and SVGPointList except in two things:

        1. Its items can be different but they are derived from the same base 
           class SVGPathSeg.

        2. The SVGPathSeg items are only used for DOM. When drawing or animating
           we have to have an SVGPathByteStream and convert it to a Path. Converting
           an SVGPathByteStream to SVGPathSeg items and vice versa is expensive.
           Building a Path from an SVGPathByteStream is also expensive. So an extra
           care needs to be taken for when these conversions happen.

        In addition to handling the SVGPathSeg items, SVGPathSegList will manage
        the associated SVGPathByteStream and Path objects. SVGPathSegList will be
        lazy in getting updated objects when a change happens. For example, when
        the byte stream changes, SVGPathSegList will clear its items and nullify
        the Path object. But it will not build any of them until they are explicitly
        requested.

        Like what was done for other SVG properties when removing their tear off
        objects, a new accessor, a new animator and a new animation function will
        be added for the SVGAnimatedPathSegList.

        All the header files of the concrete classes of SVGPathSeg will be removed
        because they are small structures which hold some data items and they provide
        setters and getters for these items. Here is the new file structures and
        their contents:

        -- SVGPathSeg.h still has the class SVGPathSeg which is now a superclass
           of SVGProperty. 

        -- SVGPathSegValue.h will have the template class SVGPathSegValue which 
           holds an std::tuple of packed arguments. It provides setters and getters
           for these arguments. SVGPathSegValue.h will also have specialized 
           classed derived from SVGPathSegValue and hold different arguments.

        -- SVGPathSegImpl.h will have the final concrete SVGPathSeg classes.

        Note SVGPathSeg concrete classes do not need to have a reference to the
        the context SVGPathElement. SVGPathSeg will be owned by its SVGPathSegList
        which will be owned by the SVGAnimatedPathSegList which will be owned by
        the SVGPathElement.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSVGPathSegCustom.cpp:
        * bindings/scripts/CodeGenerator.pm:
        (IsSVGPathSegTypeName):
        (IsSVGPathSegType):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * rendering/svg/SVGPathData.cpp:
        (WebCore::pathFromPathElement):
        * svg/SVGAnimatedPath.cpp: Removed.
        * svg/SVGAnimatedPath.h: Removed.
        * svg/SVGAnimatedType.h:
        (WebCore::SVGAnimatedType::type const):
        * svg/SVGAnimatorFactory.h:
        (WebCore::SVGAnimatorFactory::create):
        * svg/SVGPathByteStream.h:
        (WebCore::SVGPathByteStream::SVGPathByteStream):
        This constructor is used by SVGAnimationPathSegListFunction to convert
        the 'form', 'to' and 'toAtEndOfDuration' strings to SVGPathByteStreams.

        (WebCore::SVGPathByteStream::resize): Deleted.
        (WebCore::SVGPropertyTraits<SVGPathByteStream>::initialValue): Deleted.
        (WebCore::SVGPropertyTraits<SVGPathByteStream>::fromString): Deleted.
        (WebCore::SVGPropertyTraits<SVGPathByteStream>::parse): Deleted.
        (WebCore::SVGPropertyTraits<SVGPathByteStream>::toString): Deleted.
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        (WebCore::SVGPathElement::parseAttribute):
        (WebCore::SVGPathElement::svgAttributeChanged):
        (WebCore::SVGPathElement::getTotalLength const):
        (WebCore::SVGPathElement::getPointAtLength const):
        (WebCore::SVGPathElement::getPathSegAtLength const):
        (WebCore::SVGPathElement::createSVGPathSegClosePath): Deleted.
        (WebCore::SVGPathElement::createSVGPathSegMovetoAbs): Deleted.
        (WebCore::SVGPathElement::createSVGPathSegMovetoRel): Deleted.
        (WebCore::SVGPathElement::createSVGPathSegLinetoAbs): Deleted.
        (WebCore::SVGPathElement::createSVGPathSegLinetoRel): Deleted.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicAbs): Deleted.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicRel): Deleted.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticAbs): Deleted.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticRel): Deleted.
        (WebCore::SVGPathElement::createSVGPathSegArcAbs): Deleted.
        (WebCore::SVGPathElement::createSVGPathSegArcRel): Deleted.
        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalAbs): Deleted.
        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalRel): Deleted.
        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalAbs): Deleted.
        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalRel): Deleted.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothAbs): Deleted.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothRel): Deleted.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothAbs): Deleted.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothRel): Deleted.
        The SVGPathSeg creation functions are moved to the header file.

        (WebCore::SVGPathElement::registerAttributes): Deleted.
        (WebCore::SVGPathElement::pathByteStream const): Deleted.
        (WebCore::SVGPathElement::pathForByteStream const): Deleted.
        (WebCore::SVGPathElement::lookupOrCreateDWrapper): Deleted.
        (WebCore::SVGPathElement::animatedPropertyWillBeDeleted): Deleted.
        (WebCore::SVGPathElement::pathSegList): Deleted.
        (WebCore::SVGPathElement::normalizedPathSegList): Deleted.
        (WebCore::SVGPathElement::animatedPathSegList): Deleted.
        (WebCore::SVGPathElement::animatedNormalizedPathSegList): Deleted.
        (WebCore::SVGPathElement::approximateMemoryCost const): Deleted.
        (WebCore::SVGPathElement::pathSegListChanged): Deleted.
        Managing the SVGPathByteStream and the drawing Path objects will be the
        responsibility of SVGPathSegList.

        * svg/SVGPathElement.h:
        * svg/SVGPathSeg.h:
        * svg/SVGPathSegArc.h: Removed.
        * svg/SVGPathSegArcAbs.h: Removed.
        * svg/SVGPathSegArcRel.h: Removed.
        * svg/SVGPathSegClosePath.h: Removed.
        * svg/SVGPathSegCurvetoCubic.h: Removed.
        * svg/SVGPathSegCurvetoCubicAbs.h: Removed.
        * svg/SVGPathSegCurvetoCubicRel.h: Removed.
        * svg/SVGPathSegCurvetoCubicSmooth.h: Removed.
        * svg/SVGPathSegCurvetoCubicSmoothAbs.h: Removed.
        * svg/SVGPathSegCurvetoCubicSmoothRel.h: Removed.
        * svg/SVGPathSegCurvetoQuadratic.h: Removed.
        * svg/SVGPathSegCurvetoQuadraticAbs.h: Removed.
        * svg/SVGPathSegCurvetoQuadraticRel.h: Removed.
        * svg/SVGPathSegCurvetoQuadraticSmoothAbs.h: Removed.
        * svg/SVGPathSegCurvetoQuadraticSmoothRel.h: Removed.
        * svg/SVGPathSegImpl.h: Added.
        * svg/SVGPathSegLinetoAbs.h: Removed.
        * svg/SVGPathSegLinetoHorizontal.h: Removed.
        * svg/SVGPathSegLinetoHorizontalAbs.h: Removed.
        * svg/SVGPathSegLinetoHorizontalRel.h: Removed.
        * svg/SVGPathSegLinetoRel.h: Removed.
        * svg/SVGPathSegLinetoVertical.h: Removed.
        * svg/SVGPathSegLinetoVerticalAbs.h: Removed.
        * svg/SVGPathSegLinetoVerticalRel.h: Removed.
        The definition of these classes are now in SVGPathSegImpl.h.

        * svg/SVGPathSegList.cpp: Removed.
        * svg/SVGPathSegList.h:
        * svg/SVGPathSegListBuilder.cpp:
        (WebCore::SVGPathSegListBuilder::SVGPathSegListBuilder):
        (WebCore::SVGPathSegListBuilder::moveTo):
        (WebCore::SVGPathSegListBuilder::lineTo):
        (WebCore::SVGPathSegListBuilder::lineToHorizontal):
        (WebCore::SVGPathSegListBuilder::lineToVertical):
        (WebCore::SVGPathSegListBuilder::curveToCubic):
        (WebCore::SVGPathSegListBuilder::curveToCubicSmooth):
        (WebCore::SVGPathSegListBuilder::curveToQuadratic):
        (WebCore::SVGPathSegListBuilder::curveToQuadraticSmooth):
        (WebCore::SVGPathSegListBuilder::arcTo):
        (WebCore::SVGPathSegListBuilder::closePath):        
        * svg/SVGPathSegListBuilder.h:
        The concrete SVGPathSeg classes can now create instances of their classes
        without having to go through the SVGPathElement.

        * svg/SVGPathSegListSource.cpp:
        (WebCore::SVGPathSegListSource::SVGPathSegListSource):
        * svg/SVGPathSegListSource.h:
        * svg/SVGPathSegListValues.cpp: Removed.
        * svg/SVGPathSegListValues.h: Removed.
        * svg/SVGPathSegMovetoAbs.h: Removed.
        * svg/SVGPathSegMovetoRel.h: Removed.
        * svg/SVGPathSegValue.h: Added.
        (WebCore::SVGPathSegValue::create):
        (WebCore::SVGPathSegValue::clone const):
        (WebCore::SVGPathSegValue::SVGPathSegValue):
        (WebCore::SVGPathSegValue::argument const):
        (WebCore::SVGPathSegValue::setArgument):
        (WebCore::SVGPathSegLinetoHorizontal::x const):
        (WebCore::SVGPathSegLinetoHorizontal::setX):
        (WebCore::SVGPathSegLinetoVertical::y const):
        (WebCore::SVGPathSegLinetoVertical::setY):
        (WebCore::SVGPathSegSingleCoordinate::x const):
        (WebCore::SVGPathSegSingleCoordinate::setX):
        (WebCore::SVGPathSegSingleCoordinate::y const):
        (WebCore::SVGPathSegSingleCoordinate::setY):
        (WebCore::SVGPathSegCurvetoQuadratic::x const):
        (WebCore::SVGPathSegCurvetoQuadratic::setX):
        (WebCore::SVGPathSegCurvetoQuadratic::y const):
        (WebCore::SVGPathSegCurvetoQuadratic::setY):
        (WebCore::SVGPathSegCurvetoQuadratic::x1 const):
        (WebCore::SVGPathSegCurvetoQuadratic::setX1):
        (WebCore::SVGPathSegCurvetoQuadratic::y1 const):
        (WebCore::SVGPathSegCurvetoQuadratic::setY1):
        (WebCore::SVGPathSegCurvetoCubicSmooth::x const):
        (WebCore::SVGPathSegCurvetoCubicSmooth::setX):
        (WebCore::SVGPathSegCurvetoCubicSmooth::y const):
        (WebCore::SVGPathSegCurvetoCubicSmooth::setY):
        (WebCore::SVGPathSegCurvetoCubicSmooth::x2 const):
        (WebCore::SVGPathSegCurvetoCubicSmooth::setX2):
        (WebCore::SVGPathSegCurvetoCubicSmooth::y2 const):
        (WebCore::SVGPathSegCurvetoCubicSmooth::setY2):
        (WebCore::SVGPathSegCurvetoCubic::x const):
        (WebCore::SVGPathSegCurvetoCubic::setX):
        (WebCore::SVGPathSegCurvetoCubic::y const):
        (WebCore::SVGPathSegCurvetoCubic::setY):
        (WebCore::SVGPathSegCurvetoCubic::x1 const):
        (WebCore::SVGPathSegCurvetoCubic::setX1):
        (WebCore::SVGPathSegCurvetoCubic::y1 const):
        (WebCore::SVGPathSegCurvetoCubic::setY1):
        (WebCore::SVGPathSegCurvetoCubic::x2 const):
        (WebCore::SVGPathSegCurvetoCubic::setX2):
        (WebCore::SVGPathSegCurvetoCubic::y2 const):
        (WebCore::SVGPathSegCurvetoCubic::setY2):
        (WebCore::SVGPathSegArc::x const):
        (WebCore::SVGPathSegArc::setX):
        (WebCore::SVGPathSegArc::y const):
        (WebCore::SVGPathSegArc::setY):
        (WebCore::SVGPathSegArc::r1 const):
        (WebCore::SVGPathSegArc::setR1):
        (WebCore::SVGPathSegArc::r2 const):
        (WebCore::SVGPathSegArc::setR2):
        (WebCore::SVGPathSegArc::angle const):
        (WebCore::SVGPathSegArc::setAngle):
        (WebCore::SVGPathSegArc::largeArcFlag const):
        (WebCore::SVGPathSegArc::setLargeArcFlag):
        (WebCore::SVGPathSegArc::sweepFlag const):
        (WebCore::SVGPathSegArc::setSweepFlag):
        * svg/SVGPathSegWithContext.h: Removed.

        * svg/SVGPathUtilities.cpp:
        (WebCore::buildSVGPathByteStreamFromSVGPathSegList):
        (WebCore::buildSVGPathSegListFromByteStream):
        (WebCore::buildStringFromByteStream):
        (WebCore::buildSVGPathByteStreamFromSVGPathSegListValues): Deleted.
        (WebCore::appendSVGPathByteStreamFromSVGPathSeg): Deleted.
        (WebCore::buildSVGPathSegListValuesFromByteStream): Deleted.
        (WebCore::buildStringFromSVGPathSegListValues): Deleted.
        * svg/SVGPathUtilities.h:
        Since the class SVGPathSegListValues is removed, all the parsing functions
        have now to deal with SVGPathSegList directly.

        * svg/SVGPoint.h:
        * svg/SVGValue.h:
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.cpp: Removed.
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h: Removed.
        * svg/properties/SVGAnimatedPropertyAccessorImpl.h:
        * svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
        * svg/properties/SVGAnimatedPropertyImpl.h:
        (WebCore::SVGAnimatedPathSegList::create):
        (WebCore::SVGAnimatedPathSegList::currentPathByteStream):
        (WebCore::SVGAnimatedPathSegList::currentPath):
        (WebCore::SVGAnimatedPathSegList::approximateMemoryCost const):
        Provides an easy way to access the current SVGPathByteStream and Path
        objects from the SVGAnimatedPathSegList.

        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
        (WebCore::SVGAnimationPathSegListFunction::progress):
        * svg/properties/SVGPropertyOwnerRegistry.h:
        (WebCore::SVGPropertyOwnerRegistry::registerProperty):

2019-03-27  Ryan Haddad  <ryanhaddad@apple.com>

        AVAudioSessionRouteSharingPolicyLongForm has been deprecated
        https://bugs.webkit.org/show_bug.cgi?id=196301

        Unrereivewed build fix.

        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::setCategory):
        (WebCore::AudioSession::routeSharingPolicy const):

2019-03-27  Chris Dumez  <cdumez@apple.com>

        XMLHttpRequestUpload's loadstart event not correct initialized
        https://bugs.webkit.org/show_bug.cgi?id=196174
        <rdar://problem/49191412>

        Reviewed by Alex Christensen.

        Align progress event firing with the XHR specification.

        No new tests, rebaselined existing tests.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):
        As per [1], the loadstart event fired on the XMLHttpRequestUpload object should use
        loaded=0 and total=`req’s body’s total bytes`.
        [1] https://xhr.spec.whatwg.org/#the-send()-method (step 11.2.)

        (WebCore::XMLHttpRequest::didSendData):
        As per [2], the progress / load / loadend should use loaded=transmitted and total=length.
        [2] https://xhr.spec.whatwg.org/#ref-for-process-request-end-of-body (steps 5, 6 and 7)

        (WebCore::XMLHttpRequest::didReceiveData):
        As per [3], we should fire the readystatechange event *before* the progress event.
        This is covered by web-platform-tests/xhr/send-response-event-order.htm which was failing
        differently after the other changes in this patch.
        [3] https://xhr.spec.whatwg.org/#ref-for-process-response (steps 9.4 and 9.5)

        (WebCore::XMLHttpRequest::dispatchErrorEvents):
        As per [4], in case of an error, we should fire the provided 'event' and 'loadend' with
        loaded=0 and total=0.
        [4] https://xhr.spec.whatwg.org/#request-error-steps (steps 7 and 8)

        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::dispatchProgressEvent):
        * xml/XMLHttpRequestUpload.h:
        Simplify XMLHttpRequestUpload. It no longer needs to store loaded / total as data
        members now that they are always passed by the call site. lengthComputable is set
        to !!total as [5] says to set it to true if length/total is not 0. 
        [5] https://xhr.spec.whatwg.org/#concept-event-fire-progress

2019-03-27  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r242687): Fullscreen YouTube videos show blank white space at top
        https://bugs.webkit.org/show_bug.cgi?id=196304
        rdar://problem/49175760

        Reviewed by Zalan Bujtas.

        repositionRelatedLayers() should not short-circuit when topContentInset is zero,
        because topContentInset might be changing from non-zero to zero, and then we need
        to move layers around.

        Test: scrollingcoordinator/mac/top-content-inset-to-zero.html

        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::repositionRelatedLayers):

2019-03-26  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Fixed elements in frames can be misplaced sometimes
        https://bugs.webkit.org/show_bug.cgi?id=196290

        Reviewed by Frédéric Wang.

        In a page containing position:fixed inside an async-scrolling iframe, if the 
        main page is scrolled down, and you reload, then the fixed element in the iframe can
        get misplaced or disappear.

        The bug was that the reconcileViewportConstrainedLayerPositions() recursive state node
        walk would cross frame boundaries, hitting subframe ScrollingStateFixedNodes with a viewport rect
        for the main page.

        Fix by giving ScrollingStateTree the responsibility for the recursive tree walk, and
        have it bail at at frame boundaries.

        Test: scrollingcoordinator/ios/fixed-in-frame-layer-reconcile-layer-position.html

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::reconcileViewportConstrainedLayerPositions):
        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::reconcileLayerPositionForViewportRect):
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::reconcileLayerPositionForViewportRect): Deleted.
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::reconcileLayerPositionForViewportRect):
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::reconcileLayerPositionForViewportRect):
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::reconcileLayerPositionsRecursive):
        (WebCore::ScrollingStateTree::reconcileViewportConstrainedLayerPositions):
        * page/scrolling/ScrollingStateTree.h:

2019-03-27  Philippe Normand  <pnormand@igalia.com>

        Build failure with gstreamer 1.12.5 if USE_GSTREAMER_GL is enabled
        https://bugs.webkit.org/show_bug.cgi?id=196178

        Reviewed by Xabier Rodriguez-Calvar.

        The gst/gl/gl.h header needs to be included before
        GraphicsContext3D.h to avoid declaration conflicts with
        OpenGLShims.

        Based on a patch from Mike Gorse <mgorse@suse.com>

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::GstVideoFrameHolder::GstVideoFrameHolder):

2019-03-27  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Remove the HLS queue buffering query hack
        https://bugs.webkit.org/show_bug.cgi?id=196244

        Reviewed by Xabier Rodriguez-Calvar.

        Because the http src element now provides network statistics to
        the player we can now compute an estimation of the data loading in
        case the buffering query isn't handled by any element of the
        pipeline.

        No new tests, existing HLS tests cover this change.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::fillTimerFired):
        (WebCore::findHLSQueue): Deleted.
        (WebCore::isHLSProgressing): Deleted.

2019-03-26  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Unreviewed Windows build fix
        https://bugs.webkit.org/show_bug.cgi?id=196083
        <rdar://problem/49121836>

        * svg/SVGAnimatorFactory.h:
        (WebCore::SVGAnimatorFactory::isSupportedAttributeType):

2019-03-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Refactor some helper functions for building UserAgent strings
        https://bugs.webkit.org/show_bug.cgi?id=195990

        Reviewed by Brent Fulgham.

        Add an optional argument to standardUserAgentWithApplicationName to request the desktop version of the user
        agent in Cocoa platforms. Work towards refactoring some codepaths to make the implementation of the "Request
        Desktop Site" feature in Safari a bit more straightforward.

        No change in behavior.

        * platform/UserAgent.h:
        * platform/ios/UserAgentIOS.mm:
        (WebCore::standardUserAgentWithApplicationName):

        The corresponding macOS version is currently hard-coded — the followup bug webkit.org/b/196275 tracks making
        this dynamically fetch the paired macOS version when building for iOS.

        * platform/mac/UserAgentMac.mm:
        (WebCore::standardUserAgentWithApplicationName):

2019-03-26  Said Abou-Hallawa  <said@apple.com>

        Remove the SVG tear off objects for SVGLength, SVGLengthList and SVGAnimatedLengthList
        https://bugs.webkit.org/show_bug.cgi?id=196083

        Reviewed by Simon Fraser.

        -- SVGLength will be a superclass of SVGValueProperty<SVGLengthValue>. It
           is a wrapper of SVGLengthValue. It will be provide the DOM methods. It
           can setValueAsString() and return valueAsString().

        -- SVGLengthList will be a superclass of SVGValuePropertyList<SVGLength>.
           The base class will provide all the DOM methods. SVGLengthList will be
           responsible for parsing a String to a SVGLength items. It can also 
           build a string representing the stored items.

        -- SVGAnimatedLengthList will be defined as SVGAnimatedPropertyList<SVGLengthList>.
           Like SVGAnimatedPointList, all the required methods and attributes
           will be handled by SVGAnimatedPropertyList.

        -- SVGAnimatedLengthAccessor and SVGAnimatedLengthListAccessor will be
           added to access the members of types SVGAnimatedLength and 
           SVGAnimatedLengthList.

        -- SVGAnimatedLengthAnimator and SVGAnimatedLengthListAnimator will be
           created by the the new accessors to animate attributes of types
           SVGAnimatedLength and SVGAnimatedLengthList.

        -- SVGAnimationLengthFunction and SVGAnimationLengthListFunction will be
           responsible for progressing the animVal() of attributes of types
           SVGAnimatedLength and SVGAnimatedLengthList.

        -- SVGValuePropertyAnimator is a new template class which can animate a
           none reflecting attribute which should be backed by a value property,
           e.g. SVGLength.

        -- SVGValuePropertyListAnimator is a new template class which can animate a
           none reflecting attribute which should be backed by a value property
           list, e.g. SVGLengthList.

        Notes:

            -- SVGElement::isAnimatedStyleAttribute() will return true if the
               attribute is known by SVGPropertyAnimatorFactory. Or it's has 
               a reflecting SVGAnimatedPropertyLength property and its name is
               one of the names listed in isAnimatedStylePropertyAttribute() of
               the propertyRegistry() of the SVGElement.

            -- SVGElement::commitPropertyChange() has to handle the attributes
               for which isAnimatedStylePropertyAttribute() returns true different
               from the other ones. styleReclac() needs updated attributes since
               it does not access the reflecting properties in the SVGELement.

            -- SVGTextContentElement does not need a customized SVGAnimatedLength.
               All SVGTextContentElement::textLengthAnimated() needs to know is
               whether m_textLength->baseVal() holds an empty SVGLength. If it
               does, it sets its value to getComputedTextLength().

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::updateCharacterData):
        (WebCore::SVGTextLayoutAttributesBuilder::fillCharacterDataMap):
        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::hasValidAttributeType const):
        * svg/SVGAnimatedLength.cpp: Removed.
        * svg/SVGAnimatedLength.h: Removed.
        * svg/SVGAnimatedLengthList.cpp: Removed.
        * svg/SVGAnimatedLengthList.h: Removed.
        * svg/SVGAnimatedType.h:
        (WebCore::SVGAnimatedType::type const):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::isTargetAttributeCSSProperty):
        (WebCore::inheritsFromProperty):
        * svg/SVGAnimatorFactory.h:
        (WebCore::SVGAnimatorFactory::isSupportedAttribute):
        (WebCore::SVGAnimatorFactory::create):
        These changes were required because some of the tests were trying to
        animated unsupported attributes. To differentiate between between the
        these two cases:
            1) the attribute is animate-able by the legacy controller.
            2) animating the attribute or the attribute itself is not supported
               by the element.

        We want SVGAnimatorFactory tell us whether it can create an animator for
        a given attribute or not.

        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::SVGCircleElement):
        (WebCore::SVGCircleElement::parseAttribute):
        (WebCore::SVGCircleElement::svgAttributeChanged):
        (WebCore::SVGCircleElement::registerAttributes): Deleted.
        * svg/SVGCircleElement.h:
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::SVGCursorElement):
        (WebCore::SVGCursorElement::parseAttribute):
        (WebCore::SVGCursorElement::svgAttributeChanged):
        (WebCore::SVGCursorElement::registerAttributes): Deleted.
        * svg/SVGCursorElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::commitPropertyChange):
        (WebCore::SVGElement::isAnimatedStyleAttribute const):
        * svg/SVGElement.h:
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::SVGEllipseElement):
        (WebCore::SVGEllipseElement::parseAttribute):
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        (WebCore::SVGEllipseElement::registerAttributes): Deleted.
        * svg/SVGEllipseElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        (WebCore::SVGFilterElement::registerAttributes):
        (WebCore::SVGFilterElement::parseAttribute):
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes):
        (WebCore::SVGFilterPrimitiveStandardAttributes::parseAttribute):
        (WebCore::SVGFilterPrimitiveStandardAttributes::registerAttributes): Deleted.
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::x const):
        (WebCore::SVGFilterPrimitiveStandardAttributes::y const):
        (WebCore::SVGFilterPrimitiveStandardAttributes::width const):
        (WebCore::SVGFilterPrimitiveStandardAttributes::height const):
        (WebCore::SVGFilterPrimitiveStandardAttributes::xAnimated):
        (WebCore::SVGFilterPrimitiveStandardAttributes::yAnimated):
        (WebCore::SVGFilterPrimitiveStandardAttributes::widthAnimated):
        (WebCore::SVGFilterPrimitiveStandardAttributes::heightAnimated):
        (WebCore::SVGFilterPrimitiveStandardAttributes::isKnownAttribute): Deleted.
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        (WebCore::SVGForeignObjectElement::parseAttribute):
        (WebCore::SVGForeignObjectElement::registerAttributes): Deleted.
        * svg/SVGForeignObjectElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        (WebCore::SVGImageElement::parseAttribute):
        (WebCore::SVGImageElement::registerAttributes): Deleted.
        * svg/SVGImageElement.h:
        * svg/SVGLength.h:
        (WebCore::SVGLength::create):
        (WebCore::SVGLength::clone const):
        (WebCore::SVGLength::unitType):
        (WebCore::SVGLength::valueForBindings):
        (WebCore::SVGLength::setValueForBindings):
        (WebCore::SVGLength::valueInSpecifiedUnits):
        (WebCore::SVGLength::setValueInSpecifiedUnits):
        (WebCore::SVGLength::setValueAsString):
        (WebCore::SVGLength::newValueSpecifiedUnits):
        (WebCore::SVGLength::convertToSpecifiedUnits):
        (WebCore::SVGLength::valueAsString): Deleted.
        (WebCore::SVGLength::SVGLength): Deleted.
        * svg/SVGLengthList.h:
        (WebCore::SVGLengthList::create):
        (WebCore::SVGLengthList::lengthMode const):
        (WebCore::SVGLengthList::parse):
        (WebCore::SVGLengthList::SVGLengthList):
        * svg/SVGLengthListValues.cpp: Removed.
        * svg/SVGLengthListValues.h: Removed.
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::SVGLineElement):
        (WebCore::SVGLineElement::parseAttribute):
        (WebCore::SVGLineElement::svgAttributeChanged):
        (WebCore::SVGLineElement::registerAttributes): Deleted.
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::SVGLinearGradientElement):
        (WebCore::SVGLinearGradientElement::parseAttribute):
        (WebCore::SVGLinearGradientElement::svgAttributeChanged):
        (WebCore::SVGLinearGradientElement::registerAttributes): Deleted.
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::registerAttributes):
        (WebCore::SVGMarkerElement::parseAttribute):
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        (WebCore::SVGMaskElement::registerAttributes):
        (WebCore::SVGMaskElement::parseAttribute):
        (WebCore::SVGMaskElement::svgAttributeChanged):
        * svg/SVGMaskElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::registerAttributes):
        (WebCore::SVGPatternElement::parseAttribute):
        * svg/SVGPatternElement.h:
        * svg/SVGPoint.h:
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::SVGRadialGradientElement):
        (WebCore::SVGRadialGradientElement::parseAttribute):
        (WebCore::SVGRadialGradientElement::svgAttributeChanged):
        (WebCore::SVGRadialGradientElement::registerAttributes): Deleted.
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::SVGRectElement):
        (WebCore::SVGRectElement::parseAttribute):
        (WebCore::SVGRectElement::svgAttributeChanged):
        (WebCore::SVGRectElement::registerAttributes): Deleted.
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::parseAttribute):
        (WebCore::SVGSVGElement::svgAttributeChanged):
        (WebCore::SVGSVGElement::registerAttributes): Deleted.
        * svg/SVGSVGElement.h:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::SVGTextContentElement):
        (WebCore::SVGTextContentElement::registerAttributes):
        (WebCore::SVGTextContentElement::parseAttribute):
        (WebCore::SVGTextContentElement::svgAttributeChanged):
        (WebCore::SVGTextContentElement::textLengthAnimated):
        * svg/SVGTextContentElement.h:
        (WebCore::SVGTextContentElement::specifiedTextLength const):
        (WebCore::SVGTextContentElement::textLength const):
        (WebCore::SVGTextContentElement::specifiedTextLength): Deleted.
        (WebCore::SVGTextContentElement::textLengthAnimated): Deleted.
        (WebCore::SVGTextContentElement::SVGAnimatedCustomLengthAttribute::SVGAnimatedCustomLengthAttribute): Deleted.
        (WebCore::SVGTextContentElement::SVGAnimatedCustomLengthAttribute::synchronize): Deleted.
        (WebCore::SVGTextContentElement::SVGAnimatedCustomLengthAttribute::animatedProperty): Deleted.
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::SVGTextPathElement):
        (WebCore::SVGTextPathElement::registerAttributes):
        (WebCore::SVGTextPathElement::parseAttribute):
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::SVGTextPositioningElement):
        (WebCore::SVGTextPositioningElement::parseAttribute):
        (WebCore::SVGTextPositioningElement::svgAttributeChanged):
        (WebCore::SVGTextPositioningElement::registerAttributes): Deleted.
        * svg/SVGTextPositioningElement.h:
        (WebCore::SVGTextPositioningElement::x const):
        (WebCore::SVGTextPositioningElement::y const):
        (WebCore::SVGTextPositioningElement::dx const):
        (WebCore::SVGTextPositioningElement::dy const):
        (WebCore::SVGTextPositioningElement::xAnimated):
        (WebCore::SVGTextPositioningElement::yAnimated):
        (WebCore::SVGTextPositioningElement::dxAnimated):
        (WebCore::SVGTextPositioningElement::dyAnimated):
        (WebCore::SVGTextPositioningElement::isKnownAttribute): Deleted.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        (WebCore::SVGUseElement::parseAttribute):
        (WebCore::SVGUseElement::svgAttributeChanged):
        (WebCore::SVGUseElement::registerAttributes): Deleted.
        * svg/SVGUseElement.h:
        * svg/SVGValue.h:
        * svg/properties/SVGAnimatedPropertyAccessorImpl.h:
        * svg/properties/SVGAnimatedPropertyAnimator.h:
        * svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
        * svg/properties/SVGAnimatedPropertyImpl.h:
        * svg/properties/SVGAnimationAdditiveListFunctionImpl.h:
        (WebCore::SVGAnimationLengthListFunction::SVGAnimationLengthListFunction):
        (WebCore::SVGAnimationLengthListFunction::progress):
        (WebCore::SVGAnimationNumberListFunction::progress):
        (WebCore::SVGAnimationPointListFunction::progress):
        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
        (WebCore::SVGAnimationLengthFunction::SVGAnimationLengthFunction):
        (WebCore::SVGAnimationLengthFunction::progress):
        * svg/properties/SVGAttributeAnimator.cpp:
        (WebCore::SVGAttributeAnimator::isAnimatedStylePropertyAniamtor const):
        * svg/properties/SVGAttributeAnimator.h:
        * svg/properties/SVGAttributeRegistry.h:
        * svg/properties/SVGPropertyAnimatorFactory.h:
        (WebCore::SVGPropertyAnimatorFactory::createLengthAnimator):
        (WebCore::SVGPropertyAnimatorFactory::createLengthListAnimator):
        (WebCore::SVGPropertyAnimatorFactory::attributeAnimatorCreator):
        * svg/properties/SVGPropertyOwnerRegistry.h:
        (WebCore::SVGPropertyOwnerRegistry::registerProperty):
        (WebCore::SVGPropertyOwnerRegistry::isAnimatedLengthAttribute):
        * svg/properties/SVGPropertyRegistry.h:
        * svg/properties/SVGValuePropertyAnimator.h: Added.
        (WebCore::SVGValuePropertyAnimator::SVGValuePropertyAnimator):
        * svg/properties/SVGValuePropertyAnimatorImpl.h: Added.
        * svg/properties/SVGValuePropertyListAnimator.h: Added.
        (WebCore::SVGValuePropertyListAnimator::SVGValuePropertyListAnimator):
        * svg/properties/SVGValuePropertyListAnimatorImpl.h: Added.

2019-03-26  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] position:fixed inside oveflow:scroll is jumpy
        https://bugs.webkit.org/show_bug.cgi?id=196238

        Reviewed by Antti Koivisto.
        
        We were inadvertently making Positioned nodes for position:fixed, which is unnecessary because
        Fixed nodes handle them, and harmful because they introduced unwanted layer movement.

        Tests: scrollingcoordinator/ios/fixed-in-overflow-scroll-scrolling-tree.html
               scrollingcoordinator/ios/fixed-in-overflow-scroll.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCoordinatedPositioningForLayer const):

2019-03-26  Dean Jackson  <dino@apple.com>

        vertexAttribPointer must restrict offset parameter
        https://bugs.webkit.org/show_bug.cgi?id=196261
        <rdar://problem/48458086>

        Reviewed by Antoine Quint.

        This WebGL function should fail if the offset parameter is
        not within [0, max 32-bit int].

        Test: fast/canvas/webgl/vertexAttribPointer-with-bad-offset.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::vertexAttribPointer):

2019-03-26  Antoine Quint  <graouts@apple.com>

        Remove mousemoveEventHandlingPreventsDefault internal setting and quirk
        https://bugs.webkit.org/show_bug.cgi?id=196254
        <rdar://problem/49124334>

        Unreviewed. Fix build broken by previous commit.

        * dom/Event.cpp:
        * dom/Event.h:
        (WebCore::Event::hasEncounteredListener const): Deleted.
        (WebCore::Event::setHasEncounteredListener): Deleted.
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::innerInvokeEventListeners):

2019-03-26  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Skip anonymous renderers when checking for "willRespondToMouseClickEvents"
        https://bugs.webkit.org/show_bug.cgi?id=196259
        <rdar://problem/49240029>

        Reviewed by Dean Jackson.

        Anonymous renderers don't have associated DOM nodes so they can't have event listeners either. Let's skip them.

        Test: fast/events/touch/ios/content-observation/crash-on-anonymous-renderer.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::StyleChangeScope::isConsideredClickable const):

2019-03-26  Antoine Quint  <graouts@apple.com>

        Remove mousemoveEventHandlingPreventsDefault internal setting and quirk
        https://bugs.webkit.org/show_bug.cgi?id=196254
        <rdar://problem/49124334>

        Reviewed by Dean Jackson.

        * page/Quirks.cpp:
        (WebCore::Quirks::shouldMousemoveEventHandlingPreventDefault const): Deleted.
        * page/Quirks.h:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setMouseEventsSimulationEnabled):
        (WebCore::RuntimeEnabledFeatures::mousemoveEventHandlingPreventsDefaultEnabled const): Deleted.
        (WebCore::RuntimeEnabledFeatures::setMousemoveEventHandlingPreventsDefaultEnabled): Deleted.

2019-03-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r243493.
        https://bugs.webkit.org/show_bug.cgi?id=196257

        broke the non-gst-gl build (Requested by philn on #webkit).

        Reverted changeset:

        "Build failure with gstreamer 1.12.5 if USE_GSTREAMER_GL is
        enabled"
        https://bugs.webkit.org/show_bug.cgi?id=196178
        https://trac.webkit.org/changeset/243493

2019-03-26  Mike Gorse  <mgorse@alum.wpi.edu>

        Build failure with gstreamer 1.12.5 if USE_GSTREAMER_GL is enabled
        https://bugs.webkit.org/show_bug.cgi?id=196178

        Reviewed by Philippe Normand.

        No new tests (build fix).

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        Include gst/gl/gl.h before including GraphicsContext3D.h.

2019-03-26  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Sound loop with Google Hangouts and WhatsApp notifications
        https://bugs.webkit.org/show_bug.cgi?id=189471

        Reviewed by Xabier Rodriguez-Calvar.

        The media duration is now cached (again). The loop issue was
        triggered by the previous version of the code returning positive
        infinite duration in didEnd(), followed by the timeupdate event
        propagation that would trick the HTMLMediaElement into a new call
        to play(). Now the cached duration is updated to current position
        at EOS (for forward playback direction only), so the media element
        no longer triggers a new play call for those cases.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::loadFull):
        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition const):
        (WebCore::MediaPlayerPrivateGStreamer::platformDuration const):
        (WebCore::MediaPlayerPrivateGStreamer::durationMediaTime const):
        (WebCore::MediaPlayerPrivateGStreamer::currentMediaTime const):
        (WebCore::MediaPlayerPrivateGStreamer::didEnd):
        (WebCore::MediaPlayerPrivateGStreamer::durationChanged):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::currentMediaTime const):

2019-03-26  Antti Koivisto  <antti@apple.com>

        Hit-testing on layers overlapping scrollers should hit-test on text boxes
        https://bugs.webkit.org/show_bug.cgi?id=195373
        <rdar://problem/48649865>

        Reviewed by Simon Fraser.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):

        Collect event region for overflowing line boxes.

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):

        Collect event region for overflowing simple lines.

2019-03-25  Alex Christensen  <achristensen@webkit.org>

        Expected shouldn't assume its contained types are copyable
        https://bugs.webkit.org/show_bug.cgi?id=195986

        Reviewed by JF Bastien.

        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::loadAction):

2019-03-20  Ryosuke Niwa  <rniwa@webkit.org>

        Leak of SVGFontFaceElement when RenderStyle holds onto a FontRances which uses it
        https://bugs.webkit.org/show_bug.cgi?id=196059

        Reviewed by Zalan Bujtas.

        SVGFontFaceElement keeps its RenderStyle alive via ElementRareData but RenderStyle can hold onto FontRanges
        and therefore CSSFontSource, which in turn keeps SVGFontFaceElement alive, making a reference cycle.

        More precisely, there are two reference cycles:
        SVGFontFaceElement (1) -> ElementRareData -> StyleInheritedData -> FontCascade -> FontCascadeFonts (2)
        FontCascadeFonts (2) -> FontRanges (3)
        FontCascadeFonts (2) -> CSSFontSelector -> CSSFontFaceSet -> CSSSegmentedFontFace -> FontRanges (3)
        FontRanges (3) -> CSSFontAccessor > CSSFontFace > CSSFontSource -> SVGFontFaceElement (1)

        No new tests. Unfortunately, writing a test proved to be intractable. The leak can be reproduced by running
        svg/text/text-text-05-t.svg then svg/zoom/page/zoom-img-preserveAspectRatio-support-1.html consecutively.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::CSSFontFaceSource):
        (WebCore::CSSFontFaceSource::load):
        (WebCore::CSSFontFaceSource::font):
        (WebCore::CSSFontFaceSource::isSVGFontFaceSource const):
        * css/CSSFontFaceSource.h:

2019-03-25  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed, rolling out r243450.

        AppleWin and WinCairo port builds get broken.

        Reverted changeset:

        "Add test for fix of #196095"
        https://bugs.webkit.org/show_bug.cgi?id=196097
        https://trac.webkit.org/changeset/243450

2019-03-25  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Remove the SVG tear off objects for SVGAngle, SVGAnimatedAngle and SVGAnimatedEnumeration
        https://bugs.webkit.org/show_bug.cgi?id=196087

        Reviewed by Simon Fraser.

        In this patch, the tear off objects for SVGAnimatedEnumeration will be 
        removed. Because the angle is paired with the orient type so its tear
        off objects have to be removed as well. Here is what this patch does:

        -- SVGAngle is now a superclass of SVGValueProperty<SVGAngleValue>. Its 
        relationship with its owner will be managed by the owner of its base
        class SVGProperty.

        -- SVGAnimatedAngle is now defined to be SVGAnimatedValueProperty<
        SVGAngle>. All the DOM interfaces will be handled by the base class
        given its baseVal and animVal are of type SVGAngle.

        -- SVGAnimatedEnumeration is now defined to be
        SVGAnimatedDecoratedProperty<SVGDecoratedEnumeration, unsigned>.
        This can be read: SVGAnimatedEnumeration is an SVGAnimatedProperty which
        decorates the "SVGDecoratedEnumeration" type to "unsigned". The reason
        for this complication is the IDL of SVGAnimatedEnumeration defines the
        baseVal and animVal are of type unsigned. However SVGAnimatedEnumeration
        should be able to convert a string to its enum value and vice versa.

        -- SVGAnimatedDecoratedProperty is a template class which maps from
        DecoratedProperty to DecorationType. The DecoratedProperty is actually
        a template class which exposes a property of type DecorationType.

        -- SVGDecoratedProperty is an abstract class which manages setting and
        getting a property in DecorationType regardless of how it is actually
        stored. 

        -- SVGDecoratedPrimitive is a superclass of SVGDecoratedProperty which
        stores a primitive property whose type is PropertyType but can decorate
        it to the callers as DecorationType.

        -- SVGDecoratedEnumeration is a superclass of SVGDecoratedPrimitive
        which stores a primitive type DecorationType like "BlendMode" but
        decorates it as "unsigned"

        To get the mechanics of this change correct, new accessors, animators
        and animation functions need to be added for SVGAnimatedAngle,
        SVGAnimatedEnumeration and SVGAnimatedOrientType. But since angle and
        the orient type are paired under a single attribute, a pair accessor and
        animator are also needed for the pair { angle, orientType }.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAngle.h:
        (WebCore::SVGAngle::create):
        (WebCore::SVGAngle::unitType):
        (WebCore::SVGAngle::setValueForBindings):
        (WebCore::SVGAngle::valueForBindings):
        (WebCore::SVGAngle::setValueInSpecifiedUnits):
        (WebCore::SVGAngle::valueInSpecifiedUnits):
        (WebCore::SVGAngle::setValueAsString):
        (WebCore::SVGAngle::newValueSpecifiedUnits):
        (WebCore::SVGAngle::convertToSpecifiedUnits):
        (WebCore::SVGAngle::valueAsString): Deleted.
        (WebCore::SVGAngle::SVGAngle): Deleted.
        * svg/SVGAnimatedAngle.cpp: Removed.
        * svg/SVGAnimatedAngle.h: Removed.
        * svg/SVGAnimatedEnumeration.cpp: Removed.
        * svg/SVGAnimatedEnumeration.h: Removed.
        * svg/SVGAnimatedType.h:
        (WebCore::SVGAnimatedType::type const):
        * svg/SVGAnimatorFactory.h:
        (WebCore::SVGAnimatorFactory::create):
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::SVGClipPathElement):
        (WebCore::SVGClipPathElement::parseAttribute):
        (WebCore::SVGClipPathElement::svgAttributeChanged):
        (WebCore::SVGClipPathElement::registerAttributes): Deleted.
        * svg/SVGClipPathElement.h:
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
        (WebCore::SVGComponentTransferFunctionElement::parseAttribute):
        (WebCore::SVGComponentTransferFunctionElement::registerAttributes): Deleted.
        * svg/SVGComponentTransferFunctionElement.h:
        (WebCore::SVGComponentTransferFunctionElement::type const):
        (WebCore::SVGComponentTransferFunctionElement::typeAnimated):
        (WebCore::SVGComponentTransferFunctionElement::attributeRegistry): Deleted.
        (WebCore::SVGComponentTransferFunctionElement::isKnownAttribute): Deleted.
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::commitPropertyChange):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::SVGFEBlendElement):
        (WebCore::SVGFEBlendElement::parseAttribute):
        (WebCore::SVGFEBlendElement::registerAttributes): Deleted.
        * svg/SVGFEBlendElement.h:
        (WebCore::SVGPropertyTraits<BlendMode>::fromString):
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        (WebCore::SVGFEColorMatrixElement::parseAttribute):
        (WebCore::SVGFEColorMatrixElement::registerAttributes): Deleted.
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::SVGFECompositeElement):
        (WebCore::SVGFECompositeElement::parseAttribute):
        (WebCore::SVGFECompositeElement::registerAttributes): Deleted.
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::SVGFEConvolveMatrixElement):
        (WebCore::SVGFEConvolveMatrixElement::parseAttribute):
        (WebCore::SVGFEConvolveMatrixElement::registerAttributes): Deleted.
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
        (WebCore::SVGFEDisplacementMapElement::parseAttribute):
        (WebCore::SVGFEDisplacementMapElement::registerAttributes): Deleted.
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::SVGFEGaussianBlurElement):
        (WebCore::SVGFEGaussianBlurElement::parseAttribute):
        (WebCore::SVGFEGaussianBlurElement::svgAttributeChanged):
        (WebCore::SVGFEGaussianBlurElement::registerAttributes): Deleted.
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::SVGFEMorphologyElement):
        (WebCore::SVGFEMorphologyElement::parseAttribute):
        (WebCore::SVGFEMorphologyElement::registerAttributes): Deleted.
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::SVGFETurbulenceElement):
        (WebCore::SVGFETurbulenceElement::parseAttribute):
        (WebCore::SVGFETurbulenceElement::svgAttributeChanged):
        (WebCore::SVGFETurbulenceElement::registerAttributes): Deleted.
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        (WebCore::SVGFilterElement::registerAttributes):
        (WebCore::SVGFilterElement::parseAttribute):
        * svg/SVGFilterElement.h:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement):
        (WebCore::SVGGradientElement::registerAttributes):
        (WebCore::SVGGradientElement::parseAttribute):
        * svg/SVGGradientElement.h:
        (WebCore::SVGGradientElement::spreadMethod const):
        (WebCore::SVGGradientElement::gradientUnits const):
        (WebCore::SVGGradientElement::spreadMethodAnimated):
        (WebCore::SVGGradientElement::gradientUnitsAnimated):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::registerAttributes):
        (WebCore::SVGMarkerElement::parseAttribute):
        (WebCore::SVGMarkerElement::setOrient):
        (WebCore::SVGMarkerElement::setOrientToAngle):
        (WebCore::SVGMarkerElement::orientTypeIdentifier): Deleted.
        (WebCore::SVGMarkerElement::orientAngleIdentifier): Deleted.
        * svg/SVGMarkerElement.h:
        * svg/SVGMarkerTypes.h:
        (WebCore::SVGPropertyTraits<SVGMarkerOrientType>::autoString):
        (WebCore::SVGPropertyTraits<SVGMarkerOrientType>::autoStartReverseString):
        (WebCore::SVGPropertyTraits<SVGMarkerOrientType>::fromString):
        (WebCore::SVGPropertyTraits<SVGMarkerOrientType>::toString):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        (WebCore::SVGMaskElement::registerAttributes):
        (WebCore::SVGMaskElement::parseAttribute):
        * svg/SVGMaskElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::registerAttributes):
        (WebCore::SVGPatternElement::parseAttribute):
        * svg/SVGPatternElement.h:
        * svg/SVGSVGElement.cpp:
        * svg/SVGScriptElement.cpp:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::SVGTextContentElement):
        (WebCore::SVGTextContentElement::registerAttributes):
        (WebCore::SVGTextContentElement::parseAttribute):
        * svg/SVGTextContentElement.h:
        (WebCore::SVGTextContentElement::lengthAdjust const):
        (WebCore::SVGTextContentElement::lengthAdjustAnimated):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::SVGTextPathElement):
        (WebCore::SVGTextPathElement::registerAttributes):
        (WebCore::SVGTextPathElement::parseAttribute):
        * svg/SVGTextPathElement.h:
        * svg/SVGValue.h:
        * svg/properties/SVGAnimatedDecoratedProperty.h: Added.
        (WebCore::SVGAnimatedDecoratedProperty::create):
        (WebCore::SVGAnimatedDecoratedProperty::SVGAnimatedDecoratedProperty):
        (WebCore::SVGAnimatedDecoratedProperty::setBaseVal):
        (WebCore::SVGAnimatedDecoratedProperty::setBaseValInternal):
        (WebCore::SVGAnimatedDecoratedProperty::baseVal const):
        (WebCore::SVGAnimatedDecoratedProperty::setAnimVal):
        (WebCore::SVGAnimatedDecoratedProperty::animVal const):
        (WebCore::SVGAnimatedDecoratedProperty::currentValue const):
        * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h: Removed.
        * svg/properties/SVGAnimatedPropertyAccessorImpl.h:
        * svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
        * svg/properties/SVGAnimatedPropertyImpl.h:
        (WebCore::SVGAnimatedOrientType::create):
        * svg/properties/SVGAnimatedPropertyPairAccessorImpl.h:
        * svg/properties/SVGAnimatedPropertyPairAnimator.h:
        (WebCore::SVGAnimatedPropertyPairAnimator::appendAnimatedInstance):
        * svg/properties/SVGAnimatedPropertyPairAnimatorImpl.h:
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h: Removed.
        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
        (WebCore::SVGAnimationAngleFunction::progress):
        * svg/properties/SVGAnimationDiscreteFunctionImpl.h:
        * svg/properties/SVGAttributeRegistry.h:
        * svg/properties/SVGDecoratedEnumeration.h: Added.
        (WebCore::SVGDecoratedEnumeration::create):
        * svg/properties/SVGDecoratedPrimitive.h: Added.
        (WebCore::SVGDecoratedPrimitive::SVGDecoratedPrimitive):
        * svg/properties/SVGDecoratedProperty.h: Added.
        (WebCore::SVGDecoratedProperty::setValue):
        (WebCore::SVGDecoratedProperty::value const):
        * svg/properties/SVGPropertyOwnerRegistry.h:
        (WebCore::SVGPropertyOwnerRegistry::registerProperty):
        (WebCore::SVGPropertyOwnerRegistry::isAnimatedLengthAttribute):
        * svg/properties/SVGPropertyRegistry.h:
        * svg/properties/SVGStaticPropertyTearOff.h: Removed.

2019-03-25  Fujii Hironori  <Hironori.Fujii@sony.com>

        [iOS] Break a reference cycle between PreviewLoader and ResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=194964

        Unreviewed build fix for WinCairo port.

        error C2504: 'CanMakeWeakPtr': base class undefined

        * loader/ResourceLoader.h: Added #include <wtf/WeakPtr.h>.

2019-03-25  Andy Estes  <aestes@apple.com>

        [iOS] Break a reference cycle between PreviewLoader and ResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=194964
        <rdar://problem/48279441>

        Reviewed by Alex Christensen.

        When a document's QuickLook preview is loaded, a reference cycle is created between
        WebPreviewLoader and ResourceLoader. Break the cycle by changing WebPreviewLoader to hold a
        WeakPtr to its ResourceLoader ResourceLoader::releaseResources().

        Fixes leaks detected by `run-webkit-tests --leaks LayoutTests/quicklook`. Also covered by
        existing API tests.

        * loader/ResourceLoader.h:
        * loader/ios/PreviewLoader.mm:
        (-[WebPreviewLoader initWithResourceLoader:resourceResponse:]):
        (-[WebPreviewLoader _sendDidReceiveResponseIfNecessary]):
        (-[WebPreviewLoader connection:didReceiveData:lengthReceived:]):
        (-[WebPreviewLoader connectionDidFinishLoading:]):
        (-[WebPreviewLoader connection:didFailWithError:]):

2019-03-25  Alex Christensen  <achristensen@webkit.org>

        Enable IPC sending and receiving non-default-constructible types
        https://bugs.webkit.org/show_bug.cgi?id=196132

        Reviewed by Geoff Garen.

        This basically just requires the decoding of std::tuple to return an Optional<std::tuple> instead of
        constructing a std::tuple then decoding into it.  I now decode synchronous replies into an Optional<std::tuple>
        then move it into the tuple of references where the successfully decoded reply should go.  This required
        the synchronous reply types be move constructible and move assignable.

        * Modules/indexeddb/shared/IDBRequestData.h:
        * Modules/indexeddb/shared/IDBTransactionInfo.h:
        * platform/DragImage.h:
        * platform/PasteboardWriterData.h:
        * platform/audio/mac/CAAudioStreamDescription.h:
        * platform/graphics/RemoteVideoSample.h:

2019-03-25  Alex Christensen  <achristensen@webkit.org>

        Stop storing raw pointers to Documents
        https://bugs.webkit.org/show_bug.cgi?id=196042

        Reviewed by Geoff Garen.

        Use WeakPtr instead!  This could change some UAF bugs into null dereference crashes.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::CSSFontSelector):
        (WebCore::CSSFontSelector::addFontFaceRule):
        (WebCore::CSSFontSelector::fontRangesForFamily):
        * css/CSSFontSelector.h:
        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::MediaQueryMatcher):
        (WebCore::MediaQueryMatcher::matchMedia):
        * css/MediaQueryMatcher.h:
        * css/StyleSheetList.cpp:
        (WebCore::StyleSheetList::StyleSheetList):
        (WebCore::StyleSheetList::ownerNode const):
        * css/StyleSheetList.h:
        * css/ViewportStyleResolver.cpp:
        (WebCore::ViewportStyleResolver::ViewportStyleResolver):
        * css/ViewportStyleResolver.h:
        * dom/Document.h:
        (WebCore::Document::setTemplateDocumentHost):
        (WebCore::Document::templateDocumentHost):
        * dom/DocumentParser.cpp:
        (WebCore::DocumentParser::DocumentParser):
        * dom/DocumentParser.h:
        (WebCore::DocumentParser::document const):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::ScriptedAnimationController):
        * dom/ScriptedAnimationController.h:
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::HTMLScriptRunner):
        (WebCore::HTMLScriptRunner::runScript):
        * html/parser/HTMLScriptRunner.h:
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::MediaResourceLoader):
        * loader/MediaResourceLoader.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequestInContentDispositionAttachmentSandbox const):
        (WebCore::CachedResourceLoader::loadDone):
        * loader/cache/CachedResourceLoader.h:
        (WebCore::CachedResourceLoader::document const):
        (WebCore::CachedResourceLoader::setDocument):

2019-03-25  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r243419.

        Caused Mac WK2 testers to crash and become unresponsive.

        Reverted changeset:

        "[Web GPU] Prototype compute pipeline with MSL"
        https://bugs.webkit.org/show_bug.cgi?id=196107
        https://trac.webkit.org/changeset/243419

2019-03-25  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r243438.

        243319 Caused Mac WK2 testers to crash and become
        unresponsive.

        Reverted changeset:

        "Update WebGPU class names based on sketch.idl"
        https://bugs.webkit.org/show_bug.cgi?id=194260
        https://trac.webkit.org/changeset/243438

2019-03-25  Eric Carlson  <eric.carlson@apple.com>

        Delete MetadataPreloadingNotPermitted, it is unused
        https://bugs.webkit.org/show_bug.cgi?id=196202
        <rdar://problem/49213611>

        Reviewed by Jer Noble.

        No new tests, the flat was unused except in an existing test that was removed.

        * html/MediaElementSession.cpp:
        (WebCore::restrictionNames):
        (WebCore::MediaElementSession::effectivePreloadForElement const):
        * html/MediaElementSession.h:
        * platform/graphics/cg/UTIRegistry.cpp:
        (WebCore::defaultSupportedImageTypes):
        * testing/Internals.cpp:
        (WebCore::Internals::setMediaElementRestrictions):

2019-03-25  Jer Noble  <jer.noble@apple.com>

        Test for: 196095 Inband Text Track cues interspersed with Data cues can display out of order.
        https://bugs.webkit.org/show_bug.cgi?id=196097

        Reviewed by Eric Carlson.

        Test: media/track/track-in-band-metadata-display-order.html

        Add a method in Internals to create a TextTrackCueGeneric (which can normally only be created
        by parsing an in-band media track). This requires adding IDL for TextTrackCueGeneric, and exporting
        TextTrackCueGeneric for testing.

        Drive-by fixes:

        Add runtime logging to MediaControlTextTrackContainerElement. This necessitates modifying the
        parentMediaElement() method to take a const Node*, and const_cast that constness away in order to return
        a HTMLMediaElement*

        TextTrackCue, VTTCue, TextTrackCueGeneric, and DataCue should all use the WTF TypeCasts macros to
        enable use of is<> and downcast<>.

        * Source/WebCore/CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::parentMediaElement):
        * html/shadow/MediaControlElementTypes.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
        (WebCore::MediaControlTextTrackContainerElement::logger const):
        (WebCore::MediaControlTextTrackContainerElement::logIdentifier const):
        (WebCore::MediaControlTextTrackContainerElement::logChannel const):
        * html/shadow/MediaControlElements.h:
        * html/track/DataCue.h:
        (isType):
        * html/track/TextTrackCueGeneric.h:
        (isType):
        * html/track/TextTrackCueGeneric.idl: Added.
        * html/track/VTTCue.h:
        (isType):
        * testing/Internals.cpp:
        (WebCore::Internals::createGenericCue):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-03-25  Antti Koivisto  <antti@apple.com>

        Toggling "display: contents" to "display: none" fails to hide the element
        https://bugs.webkit.org/show_bug.cgi?id=188259
        <rdar://problem/42886896>

        Reviewed by Simon Fraser.

        Test: fast/css/display-contents-to-none.html

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::affectsRenderedSubtree):

        An element with 'display:contents' has a rendered subtree.

2019-03-25  Justin Fan  <justin_fan@apple.com>

        Update WebGPU class names based on sketch.idl
        https://bugs.webkit.org/show_bug.cgi?id=194260

        Reviewed by Dean Jackson.

        Update all exposed Web GPU interface names to GPU* prefix. 

        Existing Web GPU tests updated to expect new names.

        * Modules/webgpu/WebGPU.idl:
        * Modules/webgpu/WebGPUAdapter.idl:
        * Modules/webgpu/WebGPUBindGroup.idl:
        * Modules/webgpu/WebGPUBindGroupLayout.idl:
        * Modules/webgpu/WebGPUBuffer.idl:
        * Modules/webgpu/WebGPUDevice.idl:
        * Modules/webgpu/WebGPUInputStepMode.h: Removed.
        * Modules/webgpu/WebGPUPipelineLayout.idl:
        * Modules/webgpu/WebGPUProgrammablePassEncoder.idl:
        * Modules/webgpu/WebGPUQueue.idl:
        * Modules/webgpu/WebGPURenderPassEncoder.idl:
        * Modules/webgpu/WebGPURenderPipeline.idl:
        * Modules/webgpu/WebGPUSampler.idl:
        * Modules/webgpu/WebGPUTexture.idl:
        * Modules/webgpu/WebGPUTextureView.idl:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2019-03-25  Javier Fernandez  <jfernandez@igalia.com>

        A single leading space is not considered as a word break even when word-break: break-all is set
        https://bugs.webkit.org/show_bug.cgi?id=195361

        Reviewed by Ryosuke Niwa.

        We must consider leading white-spaces as potential soft-breaking
        opportunities that may avoid breaking in the middle of the word.

        However, 'break-word: break-all' [1] implies that we should ignore
        previous opportunities and break at any character (among the ones
        valid for 'break-all') that prevents the line to overflow. Note,
        that these breakable characters are different from the ones
        provided by 'line-break: anywhere' [2].

        This change is covered by the already existent tests of the CSS
        Text 3 suite of the Web Platform Tests.

        The word-break-break-all-010.html was precisely designed to cover
        the basic issue fixed with this change, verifying that the word is
        indeed broken even if a single leading space constitutes a
        previous soft-breaking opportunity.

        There are other Web Platform Tests. which already pass before this
        change, to verify that such leading white-space must be used
        instead of breaking the word in any other case, including
        overflow-wrap: break-word and even the deprecated word-break:
        break-word.

           - white-space/pre-wrap-008.html
           - white-space/pre-wrap-015.html
           - white-space/pre-wrap-016.html
           - overflow-wrap/overflow-wrap-break-word-004.html
           - overflow-wrap/overflow-wrap-break-word-005.html
           - overflow-wrap/overflow-wrap-break-word-007.html
           - word-break/word-break-break-all-011.html
           - word-break/word-break-break-all-014.html

        The reason why the word-break-break-all-010.html passes in Mac
        platform is that for that case the SimpleLineLayout codepath is
        executed instead, which doesn't have this bug, present in the old
        line-breaking logic implemented in the BreakingContext class.

        In order to verify the validity of this change, I've added several
        tests under fast/text with the SimpleLineLayout disabled.

        Tests: fast/text/overflow-wrap-break-word-004.html
               fast/text/overflow-wrap-break-word-005.html
               fast/text/overflow-wrap-break-word-007.html
               fast/text/whitespace/pre-wrap-008.html
               fast/text/whitespace/pre-wrap-015.html
               fast/text/whitespace/pre-wrap-016.html
               fast/text/word-break-break-all-010.html
               fast/text/word-break-break-all-011.html
               fast/text/word-break-break-all-015.html
               imported/w3c/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-007.html
               imported/w3c/web-platform-tests/css/css-text/white-space/pre-wrap-008.html
               imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-015.html

        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleText):

2019-03-25  Rob Buis  <rbuis@igalia.com>

        Reflect HTMLLinkElement.as according to the spec
        https://bugs.webkit.org/show_bug.cgi?id=196189

        Reviewed by Youenn Fablet.

        The 'as' attribute is an enumerated attribute [1] and should
        reflect using a finite set of keywords, so lowercase the as getter
        to match the defined set of destinations [2].

        Test: imported/w3c/web-platform-tests/preload/reflected-as-value.html

        [1] https://html.spec.whatwg.org/#enumerated-attribute
        [2] https://fetch.spec.whatwg.org/#concept-request-destination

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::as const):

2019-03-25  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove NavigatorContentUtils in WebCore/Modules
        https://bugs.webkit.org/show_bug.cgi?id=196070

        Reviewed by Alex Christensen.

        NavigatorContentUtils was to support the custom scheme spec [1].
        However, in WebKit side, no port has supported the feature in
        WebKit layer after EFL port was removed. So there has been the
        only IDL implementation of the NavigatorContentUtils in WebCore.
        So we don't need to keep the implementation in WebCore anymore.

        [1] https://html.spec.whatwg.org/multipage/system-state.html#custom-handlers

        No new tests because this patch is just to remove the feature.

        * CMakeLists.txt:
        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp: Removed.
        * Modules/navigatorcontentutils/NavigatorContentUtils.h: Removed.
        * Modules/navigatorcontentutils/NavigatorContentUtils.idl: Removed.
        * Modules/navigatorcontentutils/NavigatorContentUtilsClient.h: Removed.
        * Sources.txt:

2019-03-25  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Fix grid container baseline alignment for orthogonal items
        https://bugs.webkit.org/show_bug.cgi?id=196141

        Reviewed by Javier Fernandez.

        Grid container baseline was wrongly computed when done in reference to an orthogonal item.

        Test: imported/w3c/web-platform-tests/css/css-grid/alignment/grid-container-baseline-001.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::firstLineBaseline const): Simple change to use logicalTopForChild()
        so it takes into account grid container and item writing modes.

2019-03-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix -Wpessimizing-move warning
        https://bugs.webkit.org/show_bug.cgi?id=195905
        <rdar://problem/49121824>

        * svg/properties/SVGPropertyList.h:

2019-03-23  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Prototype compute pipeline with MSL
        https://bugs.webkit.org/show_bug.cgi?id=196107
        <rdar://problem/46289650>

        Reviewed by Myles Maxfield.

        Add GPUComputePassEncoder, GPUComputePipeline, and GPUComputePipelineDescriptor.
        Implement everything needed to prototype a compute pipeline in Web GPU using Metal shaders and bound resources.

        Test: webgpu/compute-squares.html

        Add files and symbols:
        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

        Misc fixes:
        * Modules/webgpu/WHLSL/WHLSLNameResolver.h: Missing include.
        * Modules/webgpu/WHLSL/WHLSLSynthesizeConstructors.cpp: Missing include.
        * Modules/webgpu/WebGPUPipelineStageDescriptor.cpp: Added. Move pipeline stage validation logic here.
        (WebCore::WebGPUPipelineStageDescriptor::tryCreateGPUPipelineStageDescriptor const):
        * Modules/webgpu/WebGPURenderPipeline.cpp: Remove unnecessary include.
        * Modules/webgpu/WebGPURenderPipeline.h:
        * Modules/webgpu/WebGPURenderPipelineDescriptor.cpp: Add missing inlcude.
        (WebCore::WebGPUPipelineStageDescriptor::tryCreateGPUPipelineStageDescriptor const): Moved to WebGPUPipelineStageDescriptor.cpp.
        * platform/graphics/gpu/GPUPipelineDescriptorBase.h: Add missing include.
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm: Add missing include.
        (WebCore::GPURenderPipeline::GPURenderPipeline): Remove unecessary ref of GPUPipelineLayout.
        * platform/text/mac/TextEncodingRegistryMac.mm: Carbon.h was causing ambiguous reference build errors in this file.

        Enable creating a GPUComputePassEncoder from a GPUCommandEncoder:
        * Modules/webgpu/WebGPUCommandEncoder.cpp:
        (WebCore::WebGPUCommandEncoder::beginRenderPass): No longer passing this WebGPUCommandEncoder to pass encoders.
        (WebCore::WebGPUCommandEncoder::beginComputePass): Added.
        * Modules/webgpu/WebGPUCommandEncoder.h:
        * Modules/webgpu/WebGPUCommandEncoder.idl:

        Add GPUComputePassEncoder:
        * Modules/webgpu/WebGPUComputePassEncoder.cpp: Added.
        (WebCore::WebGPUComputePassEncoder::create):
        (WebCore::WebGPUComputePassEncoder::WebGPUComputePassEncoder):
        (WebCore::WebGPUComputePassEncoder::setPipeline):
        (WebCore::WebGPUComputePassEncoder::dispatch):
        (WebCore::WebGPUComputePassEncoder::passEncoder):
        (WebCore::WebGPUComputePassEncoder::passEncoder const):
        * Modules/webgpu/WebGPUComputePassEncoder.h: Added.
        * Modules/webgpu/WebGPUComputePassEncoder.idl: Added.
        * platform/graphics/gpu/GPUComputePassEncoder.h: Added.
        (WebCore::GPUComputePassEncoder::~GPUComputePassEncoder):
        * platform/graphics/gpu/cocoa/GPUComputePassEncoderMetal.mm: Added.
        (WebCore::GPUComputePassEncoder::tryCreate):
        (WebCore::GPUComputePassEncoder::GPUComputePassEncoder):
        (WebCore::GPUComputePassEncoder::setPipeline):
        (WebCore::GPUComputePassEncoder::dispatch): Use a default calculation for threadsPerThreadgroup while MSL is still an accepted shader format.
        (WebCore::GPUComputePassEncoder::platformPassEncoder const):
        (WebCore::GPUComputePassEncoder::useResource):
        (WebCore::GPUComputePassEncoder::setComputeBuffer):

        Add GPUComputePipeline:
        * Modules/webgpu/WebGPUComputePipeline.cpp: Added.
        (WebCore::WebGPUComputePipeline::create):
        (WebCore::WebGPUComputePipeline::WebGPUComputePipeline):
        * Modules/webgpu/WebGPUComputePipeline.h: Added.
        (WebCore::WebGPUComputePipeline::computePipeline const):
        * Modules/webgpu/WebGPUComputePipeline.idl: Added.
        * Modules/webgpu/WebGPUComputePipelineDescriptor.cpp: Added.
        (WebCore::WebGPUComputePipelineDescriptor::tryCreateGPUComputePipelineDescriptor const):
        * Modules/webgpu/WebGPUComputePipelineDescriptor.h: Added.
        * Modules/webgpu/WebGPUComputePipelineDescriptor.idl: Added.
        * platform/graphics/gpu/GPUComputePipeline.h: Added.
        (WebCore::GPUComputePipeline::platformComputePipeline const):
        * platform/graphics/gpu/GPUComputePipelineDescriptor.h: Added.
        (WebCore::GPUComputePipelineDescriptor::GPUComputePipelineDescriptor):
        * platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm: Added.
        (WebCore::tryCreateMtlComputeFunction):
        (WebCore::tryCreateMTLComputePipelineState):
        (WebCore::GPUComputePipeline::tryCreate):
        (WebCore::GPUComputePipeline::GPUComputePipeline):

        Enable creating a GPUComputePipeline from a GPUDevice:
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createComputePipeline const):
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDevice.idl:
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::tryCreateComputePipeline const):
        * platform/graphics/gpu/GPUDevice.h:

        No longer unnecessarily ref the WebGPUCommandEncoder when creating pass encoder:
        * Modules/webgpu/WebGPUProgrammablePassEncoder.cpp:
        (WebCore::WebGPUProgrammablePassEncoder::setBindGroup):
        (WebCore::WebGPUProgrammablePassEncoder::WebGPUProgrammablePassEncoder): Deleted.
        (WebCore::WebGPUProgrammablePassEncoder::setBindGroup const): Deleted.
        * Modules/webgpu/WebGPUProgrammablePassEncoder.h:
        * Modules/webgpu/WebGPURenderPassEncoder.cpp:
        (WebCore::WebGPURenderPassEncoder::create):
        (WebCore::WebGPURenderPassEncoder::WebGPURenderPassEncoder):
        (WebCore::WebGPURenderPassEncoder::setPipeline):
        (WebCore::WebGPURenderPassEncoder::passEncoder):
        (WebCore::WebGPURenderPassEncoder::passEncoder const):
        * Modules/webgpu/WebGPURenderPassEncoder.h:

        Updates to GPUBindGroup and *setBindGroup for compute function arguments:
        * platform/graphics/gpu/GPUBindGroup.h:
        (WebCore::GPUBindGroup::vertexArgsBuffer const):
        (WebCore::GPUBindGroup::fragmentArgsBuffer const):
        (WebCore::GPUBindGroup::computeArgsBuffer const):
        (WebCore::GPUBindGroup::vertexArgsBuffer): Deleted. Const-qualified.
        (WebCore::GPUBindGroup::fragmentArgsBuffer): Ditto.
        * platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm:
        (WebCore::tryGetResourceAsMTLSamplerState): Now just returns the MTLSamplerState to reduce reference churning.
        (WebCore::GPUBindGroup::tryCreate):
        (WebCore::GPUBindGroup::GPUBindGroup):
        (WebCore::tryGetResourceAsSampler): Renamed to tryGetResourceAsMTLSamplerState.

        Updates to GPUProgrammablePassEncoder and GPURenderPassEncoder:
        * platform/graphics/gpu/GPUProgrammablePassEncoder.h:
        (WebCore::GPUProgrammablePassEncoder::setVertexBuffer):
        (WebCore::GPUProgrammablePassEncoder::setFragmentBuffer):
        (WebCore::GPUProgrammablePassEncoder::setComputeBuffer): Added.
        * platform/graphics/gpu/GPURenderPassEncoder.h:
        (WebCore::GPURenderPassEncoder::~GPURenderPassEncoder):
        * platform/graphics/gpu/GPURenderPipeline.h:
        * platform/graphics/gpu/cocoa/GPUProgrammablePassEncoderMetal.mm: Remove unecessary include.
        (WebCore::GPUProgrammablePassEncoder::endPass): No longer virtual. Delegates shared behavior for derived classes.
        (WebCore::GPUProgrammablePassEncoder::setBindGroup):
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::GPURenderPassEncoder::platformPassEncoder const):
        (WebCore::GPURenderPassEncoder::setPipeline):
        (WebCore::GPURenderPassEncoder::draw):
        (WebCore::GPURenderPassEncoder::useResource): These private overrides are called only by base after checking for encoder existence.
        (WebCore::GPURenderPassEncoder::setVertexBuffer): Ditto.
        (WebCore::GPURenderPassEncoder::setFragmentBuffer): Ditto.
        (WebCore::GPURenderPassEncoder::endPass): Deleted. Now handled by base class.

2019-03-23  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (iOS 8): Scrollbar can't be hidden when webkit-overflow-scrolling is set to touch
        https://bugs.webkit.org/show_bug.cgi?id=137043
        rdar://problem/16595330

        Reviewed by Zalan Bujtas.

        Plumb horizontalScrollbarHiddenByStyle/verticalScrollbarHiddenByStyle through ScrollableAreaParameters
        to the UI process, and use it to set UIScrollView indicators visible or not.

        Tests: fast/scrolling/ios/scrollbar-hiding.html:

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::setScrollingNodeScrollableAreaGeometry):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::operator<<):
        * page/scrolling/ScrollingCoordinatorTypes.h:
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/ScrollingTreeOverflowScrollingNode.cpp:
        (WebCore::ScrollingTreeOverflowScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::horizontalScrollbarHiddenByStyle const):
        (WebCore::ScrollableArea::verticalScrollbarHiddenByStyle const):
        * rendering/RenderLayer.cpp:
        (WebCore::scrollbarHiddenByStyle):
        (WebCore::RenderLayer::horizontalScrollbarHiddenByStyle const):
        (WebCore::RenderLayer::verticalScrollbarHiddenByStyle const):
        * rendering/RenderLayer.h:

2019-03-23  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Add support for observing opacity.
        https://bugs.webkit.org/show_bug.cgi?id=196172

        Reviewed by Simon Fraser.

        This patch adds support for observing opacity changes. At this point we only track one transition at a time.
        if the page registers transition on both left and opacity, the first is getting observed only.

        Tests: fast/events/touch/ios/content-observation/opacity-change-happens-on-mousemove-with-opacity-and-left.html
               fast/events/touch/ios/content-observation/opacity-change-happens-on-mousemove-with-transition.html
               fast/events/touch/ios/content-observation/opacity-change-happens-on-mousemove.html
               fast/events/touch/ios/content-observation/opacity-change-happens-on-touchstart-with-transition.html
               fast/events/touch/ios/content-observation/opacity-change-happens-on-touchstart.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::isConsideredHidden):
        (WebCore::ContentChangeObserver::didAddTransition):
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::isObservedPropertyForTransition const):

2019-03-23  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Check if the transitioned content is visible at onAnimationEnd
        https://bugs.webkit.org/show_bug.cgi?id=196171

        Reviewed by Simon Fraser.

        At onAnimationEnd we don't yet have the final computed style for the transitioned content.
        However the current state (before computing the final style) might already be qualified to be visible.
        Introduce "CompletedTransition" to indicate that the transition is all set as far observing is concerned
        (as opposed to "EndedTransition" where we still need to observe the content for the final style change).

        Test: fast/events/touch/ios/content-observation/10ms-delay-transition-on-touch-start-with-non-0px-end.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::didFinishTransition):
        (WebCore::ContentChangeObserver::adjustObservedState):
        * page/ios/ContentChangeObserver.h:

2019-03-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove build time dependency on Geoclue2
        https://bugs.webkit.org/show_bug.cgi?id=195994

        Reviewed by Michael Catanzaro.

        Remove old Geoclue implementation.

        * PlatformGTK.cmake:
        * SourcesGTK.txt:
        * platform/geoclue/GeolocationProviderGeoclue.cpp: Removed.
        * platform/geoclue/GeolocationProviderGeoclue.h: Removed.
        * platform/geoclue/GeolocationProviderGeoclueClient.h: Removed.

2019-03-22  Eric Carlson  <eric.carlson@apple.com>

        Flaky AVEncoderBitRateKey symbol not found crash on imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-constructor.html
        https://bugs.webkit.org/show_bug.cgi?id=193724
        <rdar://problem/47483831>

        Reviewed by Jer Noble.

        The soft link macros occasionally fail to load constants from AVFoundation.framework
        which are actually in one of its sub-frameworks. While we investigate the cause
        cause of the failure, ise the SOFT_LINK_CONSTANT_MAY_FAIL so we can detect the failure
        and return a local copy of the string instead of crashing.
        
        No new tests, this should prevent existing tests from crashing.

        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::myAVFormatIDKey):
        (WebCore::myAVNumberOfChannelsKey):
        (WebCore::myAVSampleRateKey):
        (WebCore::myAVEncoderBitRateKey):

2019-03-22  Youenn Fablet  <youenn@apple.com>

        REGRESSION: Flaky ASSERTION FAILED: !m_killed seen with http/tests/security/cross-origin-worker-indexeddb.html
        https://bugs.webkit.org/show_bug.cgi?id=196024
        <rdar://problem/49117272>

        Reviewed by Alexey Proskuryakov.

        Do not proceed with opening the database if it is being closed.
        Speculative fix, this should stop making test crashing on bots.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::performCurrentOpenOperation):

2019-03-22  Youenn Fablet  <youenn@apple.com>

        storage/indexeddb/closed-cursor-private.html is crashing on debug
        https://bugs.webkit.org/show_bug.cgi?id=196101

        Reviewed by Alex Christensen.

        In case of immediate close for user delete, the transaction might be deleted.
        If the request for space is pending, it will be executed with an error as parameter.
        In that case, the call to didCommitTransaction will not find any existing transaction.
        Speculative fix, test should no longer crash.

        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didCommitTransaction):

2019-03-22  Devin Rousso  <drousso@apple.com>

        Web Inspector: Safari Canvas Inspector seems to show the canvas being rendered twice per frame.
        https://bugs.webkit.org/show_bug.cgi?id=196082
        <rdar://problem/49113496>

        Reviewed by Dean Jackson.

        Tests: inspector/canvas/recording-2d.html
               inspector/canvas/recording-bitmaprenderer.html
               inspector/canvas/recording-html-2d.html
               inspector/canvas/recording-webgl.html
               inspector/canvas/setRecordingAutoCaptureFrameCount.html

        WebGL `<canvas>` follow a different "rendering" path such that `HTMLCanvasElement::paint`
        isn't called. Previously, there was a 0s timer that was started after the first action of a
        frame was recorded (for the case that the `<canvas>` isn't attached to the DOM) that would
        automatically stop the recording. It was possible that actions in two different "frame"s
        were recorded as part of the same frame, because the WebGL `<canvas>` would instead fall
        back to the timer to know when the "frame" had ended.

        Now, there is additional instrumentation for the WebGL specific rendering path.
        Additionally, replace the 0s timer with a microtask for more "immediate" calling.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        Ensure that the `InspectorInstrumentation` call is last. This matches what we expect, as
        before we were instrumenting right before is it about to paint.

        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::Client::~Client): Added.
        (WebCore::GraphicsContext3D::addClient): Added.
        (WebCore::GraphicsContext3D::removeClient): Added.
        (WebCore::GraphicsContext3D::setWebGLContext): Deleted.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::markLayerComposited):
        (WebCore::GraphicsContext3D::forceContextLost):
        (WebCore::GraphicsContext3D::recycleContext):
        (WebCore::GraphicsContext3D::dispatchContextChangedNotification):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::WebGLRenderingContextBase):
        (WebCore::WebGLRenderingContextBase::destroyGraphicsContext3D):
        (WebCore::WebGLRenderingContextBase::didComposite): Added.
        (WebCore::WebGLRenderingContextBase::forceContextLost):
        (WebCore::WebGLRenderingContextBase::recycleContext):
        (WebCore::WebGLRenderingContextBase::dispatchContextChangedNotification): Added.
        (WebCore::WebGLRenderingContextBase::dispatchContextChangedEvent): Deleted.
        Introduce a `GraphicsContext3DClient` abstract class, rather than passing the
        `WebGLRenderingContextBase` directly to the `GraphicsContext3D` (layering violation).
        Notify the client whenever the `GraphicsContext3D` composites, which will in turn notify the
        `InspectorCanvasAgent` so that it knows that the "frame" is over.

        * inspector/agents/InspectorCanvasAgent.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::requestNode):
        (WebCore::InspectorCanvasAgent::requestContent):
        (WebCore::InspectorCanvasAgent::requestCSSCanvasClientNodes):
        (WebCore::InspectorCanvasAgent::resolveCanvasContext):
        (WebCore::InspectorCanvasAgent::startRecording):
        (WebCore::InspectorCanvasAgent::stopRecording):
        (WebCore::InspectorCanvasAgent::requestShaderSource):
        (WebCore::InspectorCanvasAgent::updateShader):
        (WebCore::InspectorCanvasAgent::setShaderProgramDisabled):
        (WebCore::InspectorCanvasAgent::setShaderProgramHighlighted):
        (WebCore::InspectorCanvasAgent::didChangeCSSCanvasClientNodes):
        (WebCore::InspectorCanvasAgent::didChangeCanvasMemory):
        (WebCore::InspectorCanvasAgent::recordCanvasAction):
        (WebCore::InspectorCanvasAgent::canvasDestroyed):
        (WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame):
        (WebCore::InspectorCanvasAgent::consoleStartRecordingCanvas):
        (WebCore::InspectorCanvasAgent::didEnableExtension):
        (WebCore::InspectorCanvasAgent::didCreateProgram):
        (WebCore::InspectorCanvasAgent::willDeleteProgram):
        (WebCore::InspectorCanvasAgent::isShaderProgramDisabled):
        (WebCore::InspectorCanvasAgent::isShaderProgramHighlighted):
        (WebCore::InspectorCanvasAgent::clearCanvasData):
        (WebCore::InspectorCanvasAgent::assertInspectorCanvas):
        (WebCore::InspectorCanvasAgent::findInspectorCanvas):
        (WebCore::InspectorCanvasAgent::assertInspectorProgram):
        (WebCore::InspectorCanvasAgent::findInspectorProgram):
        (WebCore::InspectorCanvasAgent::canvasRecordingTimerFired): Deleted.
        Replace raw pointers with `RefPtr`s. This is primarily used so that the microtask (instead
        of a timer) that is enqueued after the first action of each frame  is recorded can access a
        ref-counted instance of an `InspectorCanvas`, ensuring that it isn't destructed.

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::canvasElement):
        (WebCore::InspectorCanvas::recordAction):
        (WebCore::InspectorCanvas::finalizeFrame):
        (WebCore::InspectorCanvas::releaseObjectForRecording): Added.
        (WebCore::InspectorCanvas::getCanvasContentAsDataURL):
        (WebCore::InspectorCanvas::appendActionSnapshotIfNeeded):
        (WebCore::InspectorCanvas::buildInitialState):
        (WebCore::InspectorCanvas::releaseInitialState): Deleted.
        (WebCore::InspectorCanvas::releaseFrames): Deleted.
        (WebCore::InspectorCanvas::releaseData): Deleted.
        Move the recording payload construction logic to `InspectorCanvas` so the actual data
        doesn't need to leave that class.
        Drive-by: unify the logic for getting the contents of a canvas from `InspectorCanvasAgent`.

2019-03-22  Keith Rollin  <krollin@apple.com>

        Enable ThinLTO support in Production builds
        https://bugs.webkit.org/show_bug.cgi?id=190758
        <rdar://problem/45413233>

        Reviewed by Daniel Bates.

        Enable building with Thin LTO in Production when using Xcode 10.2 or
        later. This change results in a 1.45% progression in PLT5. Full
        Production build times increase about 2-3%. Incremental build times
        are more severely affected, and so LTO is not enabled for local
        engineering builds.

        LTO is enabled only on macOS for now, until rdar://problem/49013399,
        which affects ARM builds, is fixed.

        Removed the conditionals that disabled LTO on 32-bit systems since we
        no longer build for those.

        To change the LTO setting when building locally:

        - If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
          command line.
        - If building with `build-webkit`, specify --lto-mode={none,thin,full}
          on the command line.
        - If building with `build-root`, specify --lto={none,thin,full} on the
          command line.
        - If building with Xcode, create a LocalOverrides.xcconfig file at the
          top level of your repository directory (if needed) and define
          WK_LTO_MODE to full, thin, or none.

        No new tests since there should be no observable behavior difference.

        * Configurations/Base.xcconfig:

2019-03-22  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r243356.

        Causes assertion failures with WebGL layout tests on macOS and
        iOS.

        Reverted changeset:

        "Web Inspector: Safari Canvas Inspector seems to show the
        canvas being rendered twice per frame."
        https://bugs.webkit.org/show_bug.cgi?id=196082
        https://trac.webkit.org/changeset/243356

2019-03-22  Antti Koivisto  <antti@apple.com>

        Handle UI side hit testing for ScrollPositioningBehavior::Stationary positioned nodes
        https://bugs.webkit.org/show_bug.cgi?id=196100
        <rdar://problem/49117933>

        Reviewed by Simon Fraser.

        Test: fast/scrolling/ios/overflow-scroll-overlap-6.html

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::positionedNodesWithRelatedOverflow):

        Add a separate map of positioned node ids for easy access.

        * page/scrolling/cocoa/ScrollingTreePositionedNode.h:
        (WebCore::ScrollingTreePositionedNode::scrollPositioningBehavior const):
        (WebCore::ScrollingTreePositionedNode::relatedOverflowScrollingNodes const):
        * page/scrolling/cocoa/ScrollingTreePositionedNode.mm:
        (WebCore::ScrollingTreePositionedNode::commitStateBeforeChildren):

2019-03-22  Antoine Quint  <graouts@apple.com>

        [Web Animations] com.apple.WebKit.WebContent.Development at com.apple.WebCore: WebCore::WebAnimation::timeToNextTick const + 757
        https://bugs.webkit.org/show_bug.cgi?id=196125
        <rdar://problem/46520059>

        Reviewed by Dean Jackson.

        Because of floating point math in playState() that wouldn't account for timeEpsilon, we would get into a state where the animation phase
        was "after" but the play state was "running" when the current time was about a microsecond away from the active time boundary. This meant
        that the early return statement in WebAnimation::timeToNextTick() would not be hit while we would not handle the possibility of being in
        the "after" phase in the rest of the function, therefore eventually hitting the ASSERT_NOT_REACHED() at the end of the function.

        We now account for timeEpsilon in playState() and correctly report we're in the "finished" play state when in the "after" phase also.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::playState const):

2019-03-22  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Don't construct segments on PlaybackPipeline::flush
        https://bugs.webkit.org/show_bug.cgi?id=195867

        Reviewed by Xabier Rodriguez-Calvar.

        The previous approach did not really work for flushes on only one
        branch, as setting reset-time in FLUSH_STOP affects the running time
        of the entire pipeline, causing timing issues in the other branch.

        Since it's preferable not to interfere with the other branch if
        possible, setting reset-time to FALSE fixes that problem.

        Also, it's not necessary to fabricate a segment. Since we are not
        seeking, only the base needs to be adjusted, and gstbasesrc already
        handles this correctly by default.

        This fixes an audio/video synchronization bug in YT when some
        automatic quality changes occur.

        Tests: imported/w3c/web-platform-tests/media-source/mediasource-correct-frames-after-reappend.html
               imported/w3c/web-platform-tests/media-source/mediasource-correct-frames.html

        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
        (WebCore::PlaybackPipeline::flush):

2019-03-22  Frederic Wang  <fwang@igalia.com>

        Move implementation of mathsize to a single place
        https://bugs.webkit.org/show_bug.cgi?id=196129

        Reviewed by Ryosuke Niwa.

        Currently, mathsize is partially implemented in the MathML UA stylesheet and partially
        implemented in the MathML DOM classes using addPropertyToPresentationAttributeStyle. This
        patch moves the whole implementation to the latter place, so that it's easier to understand.
        It will also allow to conditionally disable the mathsize values removed from MathML Core.

        No new tests, already covered by existing tests.

        * css/mathml.css: Remove mathsize rules.
        * mathml/MathMLElement.cpp:
        (WebCore::convertMathSizeIfNeeded): Convert "small", "normal" and "big" to the values that
        used to be in the UA stylesheet. Also add a comment that we don't support all MathML lengths.
        (WebCore::MathMLElement::collectStyleForPresentationAttribute): Don't skip "small", "normal"
        or "big".
        (WebCore::convertToPercentageIfNeeded): Renamed to convertMathSizeIfNeeded.

2019-03-21  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Remove the SVG tear off objects for SVGNumber, SVGNumberList and SVGAnimatedNumberList
        https://bugs.webkit.org/show_bug.cgi?id=196084

        Reviewed by Simon Fraser.

        To remove the tear off objects for these interfaces, we need to do the
        following:

        -- SVGNumber will be a superclass of SVGValueProperty<float>. It provides
           the DOM interface functions.

        -- SVGNumberList will be a superclass of SVGValuePropertyList<SVGNumber>.
           It provides creation, parsing and converting to string functions.

        -- SVGAnimatedNumberList will be defined as SVGAnimatedPropertyList<SVGNumberList>.

        To make things work as expected:

        -- Properties of type SVGAnimatedNumberList have to be registered with
           SVGPropertyOwnerRegistry.
        -- An accessor, an animator and an animation function should be defined
           for SVGAnimatedNumberList.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::updateCharacterData):
        (WebCore::SVGTextLayoutAttributesBuilder::fillCharacterDataMap):
        * svg/SVGAnimatedNumberList.cpp: Removed.
        * svg/SVGAnimatedNumberList.h: Removed.
        * svg/SVGAnimatedPointList.cpp: Removed.
        * svg/SVGAnimatedPointList.h: Removed.
        * svg/SVGAnimatedType.h:
        (WebCore::SVGAnimatedType::type const):
        * svg/SVGAnimatorFactory.h:
        (WebCore::SVGAnimatorFactory::create):
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
        (WebCore::SVGComponentTransferFunctionElement::registerAttributes):
        (WebCore::SVGComponentTransferFunctionElement::parseAttribute):
        * svg/SVGComponentTransferFunctionElement.h:
        (WebCore::SVGComponentTransferFunctionElement::tableValues const):
        (WebCore::SVGComponentTransferFunctionElement::tableValuesAnimated):
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        (WebCore::SVGFEColorMatrixElement::registerAttributes):
        (WebCore::SVGFEColorMatrixElement::parseAttribute):
        (WebCore::SVGFEColorMatrixElement::build const):
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::SVGFEConvolveMatrixElement):
        (WebCore::SVGFEConvolveMatrixElement::registerAttributes):
        (WebCore::SVGFEConvolveMatrixElement::parseAttribute):
        (WebCore::SVGFEConvolveMatrixElement::build const):
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGNumber.h:
        (WebCore::SVGNumber::create):
        (WebCore::SVGNumber::clone const):
        (WebCore::SVGNumber::valueForBindings):
        (WebCore::SVGNumber::setValueForBindings):
        (WebCore::SVGNumber::SVGNumber): Deleted.
        * svg/SVGNumberList.h:
        (WebCore::SVGNumberList::create):
        (WebCore::SVGNumberList::parse):
        (WebCore::SVGNumberList::SVGNumberList): Deleted.
        * svg/SVGNumberListValues.cpp: Removed.
        * svg/SVGNumberListValues.h: Removed.
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::SVGTextPositioningElement):
        (WebCore::SVGTextPositioningElement::registerAttributes):
        (WebCore::SVGTextPositioningElement::parseAttribute):
        * svg/SVGTextPositioningElement.h:
        (WebCore::SVGTextPositioningElement::rotate const):
        (WebCore::SVGTextPositioningElement::rotateAnimated):
        * svg/SVGValue.h:
        * svg/properties/SVGAnimatedPropertyAccessorImpl.h:
        * svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
        * svg/properties/SVGAnimatedPropertyImpl.h:
        * svg/properties/SVGAnimationAdditiveListFunctionImpl.h:
        (WebCore::SVGAnimationNumberListFunction::progress):
        * svg/properties/SVGAttributeRegistry.h:
        * svg/properties/SVGPropertyOwnerRegistry.h:
        (WebCore::SVGPropertyOwnerRegistry::registerProperty):

2019-03-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: Safari Canvas Inspector seems to show the canvas being rendered twice per frame.
        https://bugs.webkit.org/show_bug.cgi?id=196082
        <rdar://problem/49113496>

        Reviewed by Dean Jackson.

        Tests: inspector/canvas/recording-2d.html
               inspector/canvas/recording-bitmaprenderer.html
               inspector/canvas/recording-html-2d.html
               inspector/canvas/recording-webgl.html
               inspector/canvas/setRecordingAutoCaptureFrameCount.html

        WebGL `<canvas>` follow a different "rendering" path such that `HTMLCanvasElement::paint`
        isn't called. Previously, there was a 0s timer that was started after the first action of a
        frame was recorded (for the case that the `<canvas>` isn't attached to the DOM) that would
        automatically stop the recording. It was possible that actions in two different "frame"s
        were recorded as part of the same frame, because the WebGL `<canvas>` would instead fall
        back to the timer to know when the "frame" had ended.

        Now, there is additional instrumentation for the WebGL specific rendering path.
        Additionally, replace the 0s timer with a microtask for more "immediate" calling.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        Ensure that the `InspectorInstrumentation` call is last. This matches what we expect, as
        before we were instrumenting right before is it about to paint.

        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::Client::~Client): Added.
        (WebCore::GraphicsContext3D::addClient): Added.
        (WebCore::GraphicsContext3D::removeClient): Added.
        (WebCore::GraphicsContext3D::setWebGLContext): Deleted.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::markLayerComposited):
        (WebCore::GraphicsContext3D::forceContextLost):
        (WebCore::GraphicsContext3D::recycleContext):
        (WebCore::GraphicsContext3D::dispatchContextChangedNotification):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::WebGLRenderingContextBase):
        (WebCore::WebGLRenderingContextBase::destroyGraphicsContext3D):
        (WebCore::WebGLRenderingContextBase::didComposite): Added.
        (WebCore::WebGLRenderingContextBase::forceContextLost):
        (WebCore::WebGLRenderingContextBase::recycleContext):
        (WebCore::WebGLRenderingContextBase::dispatchContextChangedNotification): Added.
        (WebCore::WebGLRenderingContextBase::dispatchContextChangedEvent): Deleted.
        Introduce a `GraphicsContext3DClient` abstract class, rather than passing the
        `WebGLRenderingContextBase` directly to the `GraphicsContext3D` (layering violation).
        Notify the client whenever the `GraphicsContext3D` composites, which will in turn notify the
        `InspectorCanvasAgent` so that it knows that the "frame" is over.

        * inspector/agents/InspectorCanvasAgent.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::requestNode):
        (WebCore::InspectorCanvasAgent::requestContent):
        (WebCore::InspectorCanvasAgent::requestCSSCanvasClientNodes):
        (WebCore::InspectorCanvasAgent::resolveCanvasContext):
        (WebCore::InspectorCanvasAgent::startRecording):
        (WebCore::InspectorCanvasAgent::stopRecording):
        (WebCore::InspectorCanvasAgent::requestShaderSource):
        (WebCore::InspectorCanvasAgent::updateShader):
        (WebCore::InspectorCanvasAgent::setShaderProgramDisabled):
        (WebCore::InspectorCanvasAgent::setShaderProgramHighlighted):
        (WebCore::InspectorCanvasAgent::didChangeCSSCanvasClientNodes):
        (WebCore::InspectorCanvasAgent::didChangeCanvasMemory):
        (WebCore::InspectorCanvasAgent::recordCanvasAction):
        (WebCore::InspectorCanvasAgent::canvasDestroyed):
        (WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame):
        (WebCore::InspectorCanvasAgent::consoleStartRecordingCanvas):
        (WebCore::InspectorCanvasAgent::didEnableExtension):
        (WebCore::InspectorCanvasAgent::didCreateProgram):
        (WebCore::InspectorCanvasAgent::willDeleteProgram):
        (WebCore::InspectorCanvasAgent::isShaderProgramDisabled):
        (WebCore::InspectorCanvasAgent::isShaderProgramHighlighted):
        (WebCore::InspectorCanvasAgent::clearCanvasData):
        (WebCore::InspectorCanvasAgent::assertInspectorCanvas):
        (WebCore::InspectorCanvasAgent::findInspectorCanvas):
        (WebCore::InspectorCanvasAgent::assertInspectorProgram):
        (WebCore::InspectorCanvasAgent::findInspectorProgram):
        (WebCore::InspectorCanvasAgent::canvasRecordingTimerFired): Deleted.
        Replace raw pointers with `RefPtr`s. This is primarily used so that the microtask (instead
        of a timer) that is enqueued after the first action of each frame  is recorded can access a
        ref-counted instance of an `InspectorCanvas`, ensuring that it isn't destructed.

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::canvasElement):
        (WebCore::InspectorCanvas::recordAction):
        (WebCore::InspectorCanvas::finalizeFrame):
        (WebCore::InspectorCanvas::releaseObjectForRecording): Added.
        (WebCore::InspectorCanvas::getCanvasContentAsDataURL):
        (WebCore::InspectorCanvas::appendActionSnapshotIfNeeded):
        (WebCore::InspectorCanvas::buildInitialState):
        (WebCore::InspectorCanvas::releaseInitialState): Deleted.
        (WebCore::InspectorCanvas::releaseFrames): Deleted.
        (WebCore::InspectorCanvas::releaseData): Deleted.
        Move the recording payload construction logic to `InspectorCanvas` so the actual data
        doesn't need to leave that class.
        Drive-by: unify the logic for getting the contents of a canvas from `InspectorCanvasAgent`.

2019-03-21  Tim Horton  <timothy_horton@apple.com>

        Adopt UIWKDocumentContext
        https://bugs.webkit.org/show_bug.cgi?id=196040
        <rdar://problem/48642440>

        Reviewed by Ryosuke Niwa.

        New API test: WebKit.DocumentEditingContext

        * dom/Range.h:
        * editing/TextGranularity.h:
        Make TextGranularity encodable by providing EnumTraits.

        * editing/TextIterator.cpp:
        (WebCore::plainTextReplacingNoBreakSpace):
        * editing/TextIterator.h:
        Expose an nbsp-replacing variant of plainText that takes Positions instead of Ranges.

2019-03-21  Sihui Liu  <sihui_liu@apple.com>

        Fix key path extraction code in IndexedDB to check own property
        https://bugs.webkit.org/show_bug.cgi?id=196099

        Reviewed by Ryosuke Niwa.

        Covered by existing tests.

        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::cmp):
        We don't need to check the second parameters if the first is already invalid.

        * Modules/indexeddb/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::bound):
        Ditto.

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::putOrAdd):
        we should not clear the exception during serialization because the execeptions may be explicitly thrown by parameters.

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::get):
        Fix implementation according to https://www.w3.org/TR/IndexedDB-2/#extract-key-from-value.

        (WebCore::canInjectNthValueOnKeyPath):
        Check the last identifier.

2019-03-21  Antoine Quint  <graouts@apple.com>

        [Web Animations] JS wrapper may be deleted while animation is yet to dispatch its finish event
        https://bugs.webkit.org/show_bug.cgi?id=196118
        <rdar://problem/46614137>

        Reviewed by Ryosuke Niwa.

        Test: webanimations/js-wrapper-kept-alive.html

        We need to teach WebAnimation to keep its JS wrapper alive if it's relevant or could become relevant again by virtue of having a timeline.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::stop): Drive-by fix for the missing superclass method call.
        (WebCore::WebAnimation::hasPendingActivity const):
        * animation/WebAnimation.h:

2019-03-21  Jer Noble  <jer.noble@apple.com>

        Inband Text Track cues interspersed with Data cues can display out of order.
        https://bugs.webkit.org/show_bug.cgi?id=196095

        Reviewed by Eric Carlson.

        The compareCueIntervalForDisplay() comparator depends on a virtual function, isPositionedAbove(TextTrackCue* other),
        but this comparison returns inconsistent results for cueA->isPositionedAbove(cueB) and cueB->isPositionedAbove(cueA)
        if the two cues are different subclasses of TextTrackCue.

        The underlying algorithm should be fixed in a future patch, but for now, remove all non-displaying cues from the array
        of activeCues before sorting, rather than after when iterating over the sorted list of activeCues.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):

2019-03-21  Youenn Fablet  <youenn@apple.com>

        Cache API and IDB space usages should be initialized on first quota check
        https://bugs.webkit.org/show_bug.cgi?id=195707

        Reviewed by Chris Dumez.

        Add a way to require IDBServer to create a quota user for a given origin.
        Make sure that removing a user might kick-in processing of pending requests.
        In the case of processing pending requests, we should not decide on the first task
        except if it is triggered by a request space response.
        Update processPendingRequests accordingly.

        Tests: http/tests/IndexedDB/storage-limit-1.https.html
               http/tests/IndexedDB/storage-limit-2.https.html

        * Modules/indexeddb/server/IDBServer.h:
        (WebCore::IDBServer::IDBServer::initializeQuotaUser):
        * storage/StorageQuotaManager.cpp:
        (WebCore::StorageQuotaManager::removeUser):
        (WebCore::StorageQuotaManager::askForMoreSpace):
        (WebCore::StorageQuotaManager::processPendingRequests):
        * storage/StorageQuotaManager.h:

2019-03-21  Alex Christensen  <achristensen@webkit.org>

        Fix iOS build after r243337
        https://bugs.webkit.org/show_bug.cgi?id=195935

        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        (WebCore::PlaybackSessionInterfaceAVKit::playbackSessionModel const):
        (WebCore::playbackSessionModel const): Deleted.

2019-03-21  Brent Fulgham  <bfulgham@apple.com>

        Hardening: Use WeakPtrs in PlaybackSessionInterface{Mac,AVKit}
        https://bugs.webkit.org/show_bug.cgi?id=195935
        <rdar://problem/49007015>

        Reviewed by Eric Carlson.

        The PlaybackSessionInterface{Mac,AVKit} implementations store their playback session model
        and playback controls manager members as bare pointers, something we've been working
        to eliminate.
        
        This patch corrects this oversight.

        No new tests since no changes in behavior.

        * platform/cocoa/PlaybackSessionModel.h:
        * platform/ios/PlaybackSessionInterfaceAVKit.h:
        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        (WebCore::PlaybackSessionInterfaceAVKit::PlaybackSessionInterfaceAVKit):
        (WebCore::playbackSessionModel const): Moved to implementation since WEBCORE_EXPORT is not
        supposed to be used with inline methods.
        * platform/mac/PlaybackSessionInterfaceMac.h:
        * platform/mac/PlaybackSessionInterfaceMac.mm:
        (WebCore::PlaybackSessionInterfaceMac::PlaybackSessionInterfaceMac):
        (WebCore::PlaybackSessionInterfaceMac::playbackSessionModel const):
        (WebCore::PlaybackSessionInterfaceMac::beginScrubbing):
        (WebCore::PlaybackSessionInterfaceMac::endScrubbing):
        (WebCore::PlaybackSessionInterfaceMac::playBackControlsManager):
        * platform/mac/VideoFullscreenInterfaceMac.mm:
        (WebCore::VideoFullscreenInterfaceMac::~VideoFullscreenInterfaceMac):
        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager seekToTime:toleranceBefore:toleranceAfter:]):
        (-[WebPlaybackControlsManager setCurrentAudioTouchBarMediaSelectionOption:]):
        (-[WebPlaybackControlsManager setCurrentLegibleTouchBarMediaSelectionOption:]):

2019-03-21  Said Abou-Hallawa  <said@apple.com>

        Remove the SVG tear off objects for SVGPoint, SVGPointList and SVGAnimatedPointList
        https://bugs.webkit.org/show_bug.cgi?id=195905

        Reviewed by Simon Fraser.

        To remove the SVG tear off objects for SVGPoint, SVGPointList and 
        SVGAnimatedPointList, these changes are needed:

        -- Define SVGPoint to be a superclass of SVGValueProperty<FloatPoint>.

        -- Define SVGAnimatedPointList to be a superclass of SVGAnimatedPropertyList<SVGPointList>

        -- Add SVGPropertyList which is a superclass of SVGList. Its items are
           defined to RefCounted. It is the base class of SVGValuePropertyList
           and it will be  the base class of SVGPathSegList in a later patch.

        -- Add SVGValuePropertyList which is the base class of all the lists whose
           items are backed by a value objects like SVGPoint. The difference between
           SVGPropertyList and SVGValuePropertyList is the former class can store
           a Ref pointer of the base class like SVGPathSeg while the later type
           has to store the same type for all the items.

        -- Add SVGAnimatedPropertyList which is the base class for all the animated
           lists. Note that:
           1) SVGElement owns SVGAnimatedPropertyList
           2) SVGAnimatedPropertyList owns m_baseVal whose type is SVGList
           3) m_baseVal owns the items whose type is a superclass of SVGProperty.
           When changing an item, it calls its owner which is an SVGList.
           SVGList calls its owner which is SVGAnimatedPropertyList.
           SVGAnimatedPropertyList calls its owner which SVGElement to commit
           the change. Later SVGAnimatedPropertyList::synchronize() is called 
           which returns the property valueAsString() to update the reflecting
           attribute.

        -- New accessor, animator and animation function are added to access
           and animate a member of type SVGAnimatedPropertyList.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/svg/SVGPathData.cpp:
        (WebCore::pathFromCircleElement):
        (WebCore::pathFromEllipseElement):
        (WebCore::pathFromLineElement):
        (WebCore::pathFromPathElement):
        (WebCore::pathFromPolygonElement):
        (WebCore::pathFromPolylineElement):
        (WebCore::pathFromRectElement):
        (WebCore::pathFromGraphicsElement):
        * rendering/svg/SVGPathData.h:
        The IDL of SVGPolyElement interface requires the following attribute:
            readonly attribute SVGPointList points;
        For which we return:
            SVGPointList& points() { return m_points->baseVal(); }
        But for all the other properties we return the currentValue(). So to have
        the two functions with the same name, the following function is added:
            const SVGPointList& points() const { return m_points->currentValue(); }
        This definition requires changing all callers to be const.

        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        * svg/SVGAnimatedPointList.cpp: Removed.
        * svg/SVGAnimatedPointList.h: Removed.
        * svg/SVGAnimatedType.h:
        (WebCore::SVGAnimatedType::type const):
        This function had a bad design. It was designed to use the index of the
        variant as the AnimatedPropertyType. But when some of the types are removed
        from SVGValueVariant, this broke things. This fix is temporary till the 
        class SVGValueVariant is removed.

        * svg/SVGAnimatorFactory.h:
        (WebCore::SVGAnimatorFactory::create):
        * svg/SVGExternalResourcesRequired.cpp:
        * svg/SVGParserUtilities.cpp:
        (WebCore::pointsListFromSVGData): Deleted.
        * svg/SVGParserUtilities.h:
        * svg/SVGPoint.h:
        (WebCore::SVGPoint::create):
        (WebCore::SVGPoint::clone const):
        (WebCore::SVGPoint::x):
        (WebCore::SVGPoint::setX):
        (WebCore::SVGPoint::y):
        (WebCore::SVGPoint::setY):
        (WebCore::SVGPoint::matrixTransform const):
        (WebCore::SVGPoint::matrixTransform): Deleted.
        (WebCore::SVGPoint::SVGPoint): Deleted.
        * svg/SVGPoint.idl:
        matrixTransform() should not throw an exception.

        * svg/SVGPointList.h:
        (WebCore::SVGPointList::create):
        (WebCore::SVGPointList::parse):
        (WebCore::SVGPointList::SVGPointList): Deleted.
        Move the parse() and valueAsString() methods to SVGPointList. It is now
        a superclass of SVGValuePropertyList. Its items are of type Ref<SVGPoint>.

        * svg/SVGPointListValues.cpp: Removed.
        * svg/SVGPointListValues.h: Removed.
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::SVGPolyElement):
        (WebCore::SVGPolyElement::parseAttribute):
        (WebCore::SVGPolyElement::approximateMemoryCost const):
        (WebCore::SVGPolyElement::registerAttributes): Deleted.
        (WebCore::SVGPolyElement::points): Deleted.
        (WebCore::SVGPolyElement::animatedPoints): Deleted.
        * svg/SVGPolyElement.h:
        (WebCore::SVGPolyElement::points const):
        (WebCore::SVGPolyElement::points):
        (WebCore::SVGPolyElement::animatedPoints):
        (WebCore::SVGPolyElement::pointList const): Deleted.
        (WebCore::SVGPolyElement::attributeRegistry): Deleted.
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setCurrentTranslate):
        (WebCore::SVGSVGElement::currentTranslate): Deleted.
        * svg/SVGSVGElement.h:
        * svg/SVGSVGElement.idl:
        Define currentTranslate property to be of type Ref<SVGPoint>. When requesting
        it just return a reference to it.

        * svg/SVGValue.h:
        * svg/properties/SVGAnimatedPropertyAccessorImpl.h:
        * svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
        * svg/properties/SVGAnimatedPropertyImpl.h:
        * svg/properties/SVGAnimatedPropertyList.h: Added.
        Define the accessor, the animator and the animated type of SVGPointList.

        (WebCore::SVGAnimatedPropertyList::create):
        (WebCore::SVGAnimatedPropertyList::~SVGAnimatedPropertyList):
        (WebCore::SVGAnimatedPropertyList::baseVal const):
        (WebCore::SVGAnimatedPropertyList::baseVal):
        (WebCore::SVGAnimatedPropertyList::animVal const):
        (WebCore::SVGAnimatedPropertyList::animVal):
        (WebCore::SVGAnimatedPropertyList::currentValue const):
        (WebCore::SVGAnimatedPropertyList::SVGAnimatedPropertyList):
        (WebCore::SVGAnimatedPropertyList::ensureAnimVal):
        * svg/properties/SVGAnimationAdditiveListFunction.h: Added.
        (WebCore::SVGAnimationAdditiveListFunction::SVGAnimationAdditiveListFunction):
        (WebCore::SVGAnimationAdditiveListFunction::toAtEndOfDuration const):
        (WebCore::SVGAnimationAdditiveListFunction::adjustAnimatedList):
        * svg/properties/SVGAnimationAdditiveListFunctionImpl.h: Added.
        (WebCore::SVGAnimationPointListFunction::progress):
        Define the animation function for animating SVGPointList.

        * svg/properties/SVGAttributeRegistry.h:
        * svg/properties/SVGPropertyList.h: Added.
        (WebCore::SVGPropertyList::SVGPropertyList):
        (WebCore::SVGPropertyList::~SVGPropertyList):
        * svg/properties/SVGPropertyOwnerRegistry.h:
        (WebCore::SVGPropertyOwnerRegistry::registerProperty):
        * svg/properties/SVGValuePropertyList.h: Added.
        (WebCore::SVGValuePropertyList::operator=):
        (WebCore::SVGValuePropertyList::operator Vector<typename PropertyType::ValueType> const):
        (WebCore::SVGValuePropertyList::resize):
        (WebCore::SVGValuePropertyList::SVGValuePropertyList):

2019-03-21  Said Abou-Hallawa  <said@apple.com>

        Remove the SVG property tear off objects for SVGAnimatedString
        https://bugs.webkit.org/show_bug.cgi?id=196065

        Reviewed by Simon Fraser.

        -- Define SVGAnimatedString to be SVGAnimatedPrimitiveProperty<String>.

        -- Add SVGAnimatedStringAccessor to associate an attribute name with a 
           pointer to an SVGAnimatedString member of an SVGElement. Given a 
           pointer to an SVGElement, this accessor will and create an animator
           for the animated property.

        -- Add SVGAnimatedStringAnimator to animated an SVGAnimatedString.

        -- Add SVGAnimationStringFunction which is a discrete function and is 
           responsible for progressing an animated String over a period of time.

        -- Define SVGStringAnimator to be SVGPrimitivePropertyAnimator<String,
           SVGAnimationStringFunction>. SVGStringAnimator is responsible for
           animating attributes with no reflecting animated properties, e.g.
           "font-family".

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::SVGAElement):
        (WebCore::SVGAElement::parseAttribute):
        (WebCore::SVGAElement::registerAttributes): Deleted.
        * svg/SVGAElement.h:
        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::hasValidAttributeType const):
        (WebCore::SVGAnimateElementBase::isDiscreteAnimator const):
        * svg/SVGAnimateElementBase.h:
        * svg/SVGAnimatedString.cpp: Removed.
        * svg/SVGAnimatedString.h: Removed.
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
        The animation controller has to tell whether the animator is discrete or
        not. The properties are now registered either in SVGAttributeRegistry which
        relies on the tear off objects to know the AnimatedPropertyType of the
        property. Or it is registered in SVGPropertyOwnerRegistry which creates
        the animators through the accessors. Each animator knows whether it is
        discrete or not.

        * svg/SVGAnimatorFactory.h:
        (WebCore::SVGAnimatorFactory::create):
        * svg/SVGAttributeAnimationController.cpp:
        (WebCore::SVGAttributeAnimationController::isDiscreteAnimator const):
        * svg/SVGAttributeAnimationController.h:
        * svg/SVGAttributeAnimationControllerBase.h:
        * svg/SVGCursorElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement):
        (WebCore::SVGElement::parseAttribute):
        (WebCore::SVGElement::registerAttributes): Deleted.
        * svg/SVGElement.h:
        (WebCore::SVGElement::isKnownAttribute):
        (WebCore::SVGElement::className const):
        (WebCore::SVGElement::classNameAnimated):
        (WebCore::SVGElement::attributeRegistry): Deleted.
        * svg/SVGExternalResourcesRequired.cpp:
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::SVGFEBlendElement):
        (WebCore::SVGFEBlendElement::registerAttributes):
        (WebCore::SVGFEBlendElement::parseAttribute):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        (WebCore::SVGFEColorMatrixElement::registerAttributes):
        (WebCore::SVGFEColorMatrixElement::parseAttribute):
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::SVGFEComponentTransferElement):
        (WebCore::SVGFEComponentTransferElement::parseAttribute):
        (WebCore::SVGFEComponentTransferElement::registerAttributes): Deleted.
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::SVGFECompositeElement):
        (WebCore::SVGFECompositeElement::registerAttributes):
        (WebCore::SVGFECompositeElement::parseAttribute):
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::SVGFEConvolveMatrixElement):
        (WebCore::SVGFEConvolveMatrixElement::registerAttributes):
        (WebCore::SVGFEConvolveMatrixElement::parseAttribute):
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement):
        (WebCore::SVGFEDiffuseLightingElement::parseAttribute):
        (WebCore::SVGFEDiffuseLightingElement::registerAttributes): Deleted.
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
        (WebCore::SVGFEDisplacementMapElement::registerAttributes):
        (WebCore::SVGFEDisplacementMapElement::parseAttribute):
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::SVGFEDropShadowElement):
        (WebCore::SVGFEDropShadowElement::parseAttribute):
        (WebCore::SVGFEDropShadowElement::svgAttributeChanged):
        (WebCore::SVGFEDropShadowElement::registerAttributes): Deleted.
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::SVGFEGaussianBlurElement):
        (WebCore::SVGFEGaussianBlurElement::registerAttributes):
        (WebCore::SVGFEGaussianBlurElement::parseAttribute):
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEMergeNodeElement.cpp:
        (WebCore::SVGFEMergeNodeElement::SVGFEMergeNodeElement):
        (WebCore::SVGFEMergeNodeElement::parseAttribute):
        (WebCore::SVGFEMergeNodeElement::registerAttributes): Deleted.
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::SVGFEMorphologyElement):
        (WebCore::SVGFEMorphologyElement::registerAttributes):
        (WebCore::SVGFEMorphologyElement::parseAttribute):
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::SVGFEOffsetElement):
        (WebCore::SVGFEOffsetElement::parseAttribute):
        (WebCore::SVGFEOffsetElement::svgAttributeChanged):
        (WebCore::SVGFEOffsetElement::registerAttributes): Deleted.
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::SVGFESpecularLightingElement):
        (WebCore::SVGFESpecularLightingElement::parseAttribute):
        (WebCore::SVGFESpecularLightingElement::registerAttributes): Deleted.
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::SVGFETileElement):
        (WebCore::SVGFETileElement::parseAttribute):
        (WebCore::SVGFETileElement::registerAttributes): Deleted.
        * svg/SVGFETileElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes):
        (WebCore::SVGFilterPrimitiveStandardAttributes::registerAttributes):
        (WebCore::SVGFilterPrimitiveStandardAttributes::parseAttribute):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::result const):
        (WebCore::SVGFilterPrimitiveStandardAttributes::resultAnimated):
        * svg/SVGLegacyAttributeAnimationController.cpp:
        (WebCore::SVGLegacyAttributeAnimationController::isDiscreteAnimator const):
        * svg/SVGLegacyAttributeAnimationController.h:
        * svg/SVGMPathElement.h:
        * svg/SVGScriptElement.h:
        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::SVGURIReference):
        (WebCore::SVGURIReference::isKnownAttribute):
        (WebCore::SVGURIReference::parseAttribute):
        (WebCore::SVGURIReference::registerAttributes): Deleted.
        (WebCore::SVGURIReference::href const): Deleted.
        (WebCore::SVGURIReference::hrefAnimated): Deleted.
        * svg/SVGURIReference.h:
        (WebCore::SVGURIReference::href const):
        (WebCore::SVGURIReference::hrefAnimated):
        * svg/properties/SVGAnimatedPropertyAccessorImpl.h:
        * svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
        * svg/properties/SVGAnimatedPropertyImpl.h:
        * svg/properties/SVGAttributeRegistry.h:
        * svg/properties/SVGPrimitivePropertyAnimatorImpl.h:
        * svg/properties/SVGPropertyAnimatorFactory.h:
        (WebCore::SVGPropertyAnimatorFactory::createStringAnimator):
        (WebCore::SVGPropertyAnimatorFactory::attributeAnimatorCreator):
        * svg/properties/SVGPropertyOwnerRegistry.h:
        (WebCore::SVGPropertyOwnerRegistry::registerProperty):

2019-03-21  Zalan Bujtas  <zalan@apple.com>

        Do not insert the first-letter anonymous container until after we've constructed the first-letter renderer.
        https://bugs.webkit.org/show_bug.cgi?id=195919
        <rdar://problem/48573434>

        Reviewed by Brent Fulgham.

        When the container is injected too early, we might end up removing it as part of the collapsing logic
        while the text renderer is being removed (replaced with the first letter + remaining text).

        Test: fast/css/first-letter-and-float-crash.html

        * rendering/updating/RenderTreeBuilderFirstLetter.cpp:
        (WebCore::RenderTreeBuilder::FirstLetter::createRenderers):

2019-03-21  Eric Carlson  <eric.carlson@apple.com>

        Add UI process WebRTC runtime logging.
        https://bugs.webkit.org/show_bug.cgi?id=196020
        <rdar://problem/49071443>

        Reviewed by Youenn Fablet.

        * inspector/agents/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::getLoggingChannels): Deleted.
        (WebCore::channelConfigurationForString): Deleted.
        (WebCore::WebConsoleAgent::setLoggingChannelLevel): Deleted.
        * inspector/agents/WebConsoleAgent.h:
        * inspector/agents/page/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::PageConsoleAgent): Change 'context' parameter from 
        WebAgentContext to PageAgentContext. Store the inspected page for later use.
        (WebCore::PageConsoleAgent::getLoggingChannels): Moved from WebConsoleAgent.
        (WebCore::channelConfigurationForString): Ditto.
        (WebCore::PageConsoleAgent::setLoggingChannelLevel): Moved from WebConsoleAgent.
        Call the inspected page to actually change the log channel configuration.
        * inspector/agents/page/PageConsoleAgent.h:
        * page/ChromeClient.h:
        * page/Page.cpp:
        (WebCore::Page::configureLoggingChannel): New.
        * page/Page.h:

2019-03-21  Andy Estes  <aestes@apple.com>

        [iOS] Apple Pay should be available in documents with no user agent scripts
        https://bugs.webkit.org/show_bug.cgi?id=196061
        <rdar://problem/48649391>

        Reviewed by Brady Eidson.

        On platforms that support APPLE_PAY_REMOTE_UI, we can enable Apple Pay JS and Payment Request
        by default in all WebKit clients.

        In order to protect the privacy of Apple Pay transactions, this patch implements the
        following restrictions on API usage:

        1. If user agent scripts have been evaluated in a document, Apple Pay APIs will no longer be
        available for the duration of the document's lifetime.
        2. If an Apple Pay transaction has started in a document, user agent scripts will no longer
        be evaluated for the duration of the document's lifetime.

        These restrictions are disabled for clients with the
        com.apple.private.WebKit.UnrestrictedApplePay entitlement and platforms that do support
        Apple Pay but don't support APPLE_PAY_REMOTE_UI.

        Added new API tests.

        * Modules/applepay/ApplePayRequestBase.cpp:
        (WebCore::convertAndValidate):
        * Modules/applepay/ApplePayRequestBase.h:
        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate):
        (WebCore::ApplePaySession::create):
        (WebCore::ApplePaySession::supportsVersion):
        (WebCore::ApplePaySession::canMakePayments):
        (WebCore::ApplePaySession::canMakePaymentsWithActiveCard):
        (WebCore::ApplePaySession::openPaymentSetup):
        (WebCore::ApplePaySession::begin):
        * Modules/applepay/ApplePaySession.h:
        * Modules/applepay/ApplePaySession.idl:
        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::supportsVersion const):
        (WebCore::PaymentCoordinator::canMakePayments):
        (WebCore::PaymentCoordinator::canMakePaymentsWithActiveCard):
        (WebCore::PaymentCoordinator::openPaymentSetup):
        (WebCore::PaymentCoordinator::beginPaymentSession):
        (WebCore::PaymentCoordinator::validatedPaymentNetwork const):
        (WebCore::PaymentCoordinator::shouldAllowApplePay const):
        (WebCore::PaymentCoordinator::shouldAllowUserAgentScripts const):
        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentCoordinatorClient.h:
        (WebCore::PaymentCoordinatorClient::supportsUnrestrictedApplePay const):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::show):
        (WebCore::ApplePayPaymentHandler::canMakePayment):
        (WebCore::ApplePayPaymentHandler::version const):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
        * Modules/paymentrequest/PaymentHandler.h:
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::show):
        (WebCore::PaymentRequest::canMakePayment):

        Plumbed a Document& through to the various places that call into PaymentCoordinator for use
        by shouldAllowApplePay and shouldAllowUserAgentScripts.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeUserAgentScriptInWorld):
        (WebCore::ScriptController::shouldAllowUserAgentScripts const):
        * bindings/js/ScriptController.h:

        Added executeUserAgentScriptInWorld, which calls executeScriptInWorld if allowed.

        * dom/Document.cpp:
        (WebCore::Document::ensurePlugInsInjectedScript):

        Changed to only evaluate the chrome client's plug-in extra script if allowed, and to mark
        the document as having evaluated user agent scripts.

        (WebCore::Document::hasEvaluatedUserAgentScripts const):
        (WebCore::Document::isRunningUserScripts const):
        (WebCore::Document::setAsRunningUserScripts):
        (WebCore::Document::setHasEvaluatedUserAgentScripts):
        (WebCore::Document::hasStartedApplePaySession const):
        (WebCore::Document::setHasStartedApplePaySession):
        * dom/Document.h:

        Added helper functions to set state on the top document.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):

        Removed call to topDocument() now that isRunningUserScripts() always checks the top document.

        * page/Frame.cpp:
        (WebCore::Frame::injectUserScriptImmediately):

        Changed to only inject the user script if allowed.

        * page/Settings.yaml:
        * page/SettingsDefaultValues.h:

        Enabled Apple Pay by default on platforms that enable APPLE_PAY_REMOTE_UI.

        * testing/Internals.cpp:
        (WebCore::Internals::setAsRunningUserScripts):
        (WebCore::Internals::setHasStartedApplePaySession):
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/MockPaymentCoordinator.h:
        * testing/MockPaymentCoordinator.idl:

        Added some internal interfaces for use by TestWebKitAPI.

2019-03-21  Alex Christensen  <achristensen@webkit.org>

        Add SPI to inform applications of WKContentRuleList actions
        https://bugs.webkit.org/show_bug.cgi?id=195965
        <rdar://problem/42664365>

        Reviewed by Geoff Garen.

        We already had SPI to inform the application of notifications.
        In order to inform it about other actions, I needed to put them in a different structure.
        Basically, instead of a Vector<Action> I use a Vector<Vector<Action>> that contains the same actions.
        That way we can give one callback per WKContentRuleList.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect):
        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/ContentExtensionActions.h:
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::loadEncodedRules):
        * contentextensions/ContentExtensionRule.cpp:
        (WebCore::ContentExtensions::Action::isolatedCopy const):
        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::Action::operator== const):
        (WebCore::ContentExtensions::Action::setExtensionIdentifier): Deleted.
        (WebCore::ContentExtensions::Action::extensionIdentifier const): Deleted.
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad const):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForLoad):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForPingLoad):
        (WebCore::ContentExtensions::applyResultsToRequest):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForLoad): Deleted.
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForPingLoad): Deleted.
        (WebCore::ContentExtensions::applyBlockedStatusToRequest): Deleted.
        * contentextensions/ContentExtensionsBackend.h:
        * contentextensions/ContentRuleListResults.h: Added.
        (WebCore::ContentRuleListResults::Result::shouldNotifyApplication const):
        (WebCore::ContentRuleListResults::shouldNotifyApplication const):
        (WebCore::ContentRuleListResults::encode const):
        (WebCore::ContentRuleListResults::decode):
        (WebCore::ContentRuleListResults::Result::encode const):
        (WebCore::ContentRuleListResults::Result::decode):
        (WebCore::ContentRuleListResults::Summary::encode const):
        (WebCore::ContentRuleListResults::Summary::decode):
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::subresourcesAllowReuse const):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/PingLoader.cpp:
        (WebCore::processContentRuleListsForLoad):
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::sendViolationReport):
        (WebCore::processContentExtensionRulesForLoad): Deleted.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequestInternal):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::applyResults):
        (WebCore::CachedResourceRequest::applyBlockedStatus): Deleted.
        * loader/cache/CachedResourceRequest.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::contentRuleListNotification):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::open):
        * page/UserContentProvider.cpp:
        (WebCore::UserContentProvider::processContentRuleListsForLoad):
        (WebCore::UserContentProvider::actionsForResourceLoad):
        (WebCore::UserContentProvider::processContentExtensionRulesForLoad): Deleted.
        * page/UserContentProvider.h:

2019-03-21  Simon Fraser  <simon.fraser@apple.com>

        Add an internal feature flag to disable the -webkit-overflow-scrolling CSS property
        https://bugs.webkit.org/show_bug.cgi?id=196058
        rdar://problem/49078202

        Reviewed by Antti Koivisto.

        Add an internal setting called "legacyOverflowScrollingTouchEnabled", initially
        on by default.

        When disabled, it makes the -webkit-overflow-scrolling property be unsupported.

        Tests: fast/scrolling/ios/overflow-scrolling-touch-disabled-stacking.html
               fast/scrolling/ios/overflow-scrolling-touch-enabled-stacking.html

        * css/parser/CSSParserContext.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        * css/parser/CSSParserContext.h:
        (WebCore::CSSParserContextHash::hash):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        * css/parser/CSSParserFastPaths.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        * page/Settings.yaml:

2019-03-21  Antti Koivisto  <antti@apple.com>

        UI-process hit-testing needs to know about containing block relationships
        https://bugs.webkit.org/show_bug.cgi?id=195845
        <rdar://problem/48949633>

        Reviewed by Simon Fraser.

        Test: fast/scrolling/ios/overflow-scroll-overlap-5.html

        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/cocoa/ScrollingTreePositionedNode.h:
        (WebCore::ScrollingTreePositionedNode::layer const):

2019-03-21  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Cleanup reset state.
        https://bugs.webkit.org/show_bug.cgi?id=196076
        <rdar://problem/49107931>

        Reviewed by Simon Fraser.

        stopObservingPendingActivities() is a subset of reset() and call it when we've observed a visible change.

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::willNotProceedWithClick):
        (WebCore::ContentChangeObserver::stopObservingPendingActivities):
        (WebCore::ContentChangeObserver::reset):
        (WebCore::ContentChangeObserver::didSuspendActiveDOMObjects):
        (WebCore::ContentChangeObserver::willDetachPage):
        (WebCore::ContentChangeObserver::adjustObservedState):
        (WebCore::ContentChangeObserver::cancelPendingActivities): Deleted.
        * page/ios/ContentChangeObserver.h:

2019-03-21  Zalan Bujtas  <zalan@apple.com>

        Unreviewed build fix.

        * page/ios/ContentChangeObserver.h:

2019-03-21  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Start tracking implicit transitions at mousemove
        https://bugs.webkit.org/show_bug.cgi?id=196054
        <rdar://problem/49093840>

        Reviewed by Simon Fraser.

        This patch fixes the hover menu issue on seriouseats.com. After tapping on the menu items, the submenus show up now.

        1. Start observing at mousemove
        2. Check if the style change is synchronous or not and start observing it accordingly.

        Tests: fast/events/touch/ios/content-observation/0ms-delay-0ms-transition-on-mousemove.html
               fast/events/touch/ios/content-observation/100ms-delay-10ms-transition-on-mousemove.html
               fast/events/touch/ios/content-observation/10ms-delay-0ms-transition-on-mousemove.html
               fast/events/touch/ios/content-observation/10ms-delay-0ms-transition-on-touch-start.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::adjustObservedState):

2019-03-21  Simon Fraser  <simon.fraser@apple.com>

        Absolute in stacking-context scroller jiggles when scrolled
        https://bugs.webkit.org/show_bug.cgi?id=196010

        Reviewed by Zalan Bujtas.

        Updating compositing layers after a scroll (in a compositing update on the main thread)
        failed to traverse to an absolute layer inside a stacking-context overflow:scroll,
        because the overflow's layer didn't have the "hasCompositingAncestor" bit set on it.

        This happened because childState.subtreeIsCompositing wasn't being set when indirect
        reasons trigger compositing. So clean up RenderLayerCompositor::computeCompositingRequirements()
        to set childState.subtreeIsCompositing for "late" compositing decisions, and move the
        "Subsequent layers in the parent stacking context also need to composite" chunk
        down to after the last compositing decision has been made.

        Test: compositing/overflow/absolute-in-overflow.html

        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::scrollTo):
        * page/scrolling/cocoa/ScrollingTreePositionedNode.mm:
        (WebCore::ScrollingTreePositionedNode::applyLayerPositions):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2019-03-21  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Start tracking implicit transitions at touchStart
        https://bugs.webkit.org/show_bug.cgi?id=196051
        <rdar://problem/49092952>

        Reviewed by Simon Fraser.

        This patch enables transition tracking on touchStart.

        1. Start observing for new transitions at touchStart
        2. Stop observing at touchEnd
        3. Check the next style recalc when the transition is finished (at onAnimationEnd we don't yet have the final computed style).
        4. Remove the tracked transition when it is canceled.

        Tests: fast/events/touch/ios/content-observation/0ms-transition-on-touch-start.html
               fast/events/touch/ios/content-observation/100ms-transition-on-touch-start.html
               fast/events/touch/ios/content-observation/10ms-delay-transition-on-touch-start.html
               fast/events/touch/ios/content-observation/transition-on-touch-start-and-remove.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::didAddTransition):
        (WebCore::ContentChangeObserver::didFinishTransition):
        (WebCore::ContentChangeObserver::didRemoveTransition):
        (WebCore::ContentChangeObserver::adjustObservedState):
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::setShouldObserveTransitions):
        (WebCore::ContentChangeObserver::clearObservedTransitions):
        (WebCore::ContentChangeObserver::hasObservedTransition const):
        (WebCore::ContentChangeObserver::hasPendingActivity const):

2019-03-21  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Track hidden elements only while transitioning.
        https://bugs.webkit.org/show_bug.cgi?id=196050
        <rdar://problem/49092037>

        Reviewed by Simon Fraser.

        Use the existing isConsideredHidden() logic to decide whether the current transition should be tracked.

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::isConsideredHidden):
        (WebCore::ContentChangeObserver::didAddTransition):
        (WebCore::ContentChangeObserver::StyleChangeScope::StyleChangeScope):
        (WebCore::ContentChangeObserver::StyleChangeScope::~StyleChangeScope):
        (WebCore::ContentChangeObserver::StyleChangeScope::isConsideredHidden const): Deleted.
        * page/ios/ContentChangeObserver.h:

2019-03-21  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Add support for observing implicit transitions
        https://bugs.webkit.org/show_bug.cgi?id=195914
        <rdar://problem/49091959>

        Reviewed by Simon Fraser.

        This patch is in preparation for observing elements with property "left" implicit transitions.

        This is not a continuous tracking, we are only interested in the start and the end state.
        The idea here is to register hidden elements only and check if they become visible by
        the end of the transition (and ignore if the transition gets "canceled").

        * page/animation/AnimationBase.h:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::ImplicitAnimation):
        (WebCore::ImplicitAnimation::~ImplicitAnimation):
        (WebCore::ImplicitAnimation::clear):
        (WebCore::ImplicitAnimation::onAnimationEnd):
        * page/animation/ImplicitAnimation.h:
        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::didAddTransition):
        (WebCore::ContentChangeObserver::removeTransitionIfNeeded):
        (WebCore::ContentChangeObserver::didFinishTransition):
        (WebCore::ContentChangeObserver::didRemoveTransition):
        (WebCore::ContentChangeObserver::didInstallDOMTimer):
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::isObservingTransitions const):
        (WebCore::ContentChangeObserver::isObservedPropertyForTransition const):

2019-03-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: Page: lazily create the agent
        https://bugs.webkit.org/show_bug.cgi?id=195592
        <rdar://problem/48791916>

        Reviewed by Timothy Hatcher.

        No change in functionality.

        Have more agents save the inspected `Page` so they don't need to access it via the
        `InspectorPageAgent`. Make some of `InspectorPageAgent`'s functions `static` so other
        agents can use them without needing to have access to an enabled `InspectorPageAgent`.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::createLazyAgents):

        * inspector/agents/InspectorPageAgent.h:
        (WebCore::InspectorPageAgent::page): Deleted.
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::reload):
        (WebCore::InspectorPageAgent::navigate):
        (WebCore::InspectorPageAgent::overrideSetting):
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::deleteCookie):
        (WebCore::InspectorPageAgent::getResourceTree):
        (WebCore::InspectorPageAgent::searchInResources):
        (WebCore::InspectorPageAgent::didPaint):
        (WebCore::InspectorPageAgent::didLayout):
        (WebCore::InspectorPageAgent::didScroll):
        (WebCore::InspectorPageAgent::didRecalculateStyle):
        (WebCore::InspectorPageAgent::setEmulatedMedia):
        (WebCore::InspectorPageAgent::setForcedAppearance):
        (WebCore::InspectorPageAgent::getCompositingBordersVisible):
        (WebCore::InspectorPageAgent::setCompositingBordersVisible):
        (WebCore::InspectorPageAgent::snapshotNode):
        (WebCore::InspectorPageAgent::snapshotRect):
        (WebCore::InspectorPageAgent::archive):
        (WebCore::InspectorPageAgent::mainFrame): Deleted.
        (WebCore::InspectorPageAgent::hasIdForFrame const): Deleted.

        * inspector/agents/InspectorApplicationCacheAgent.h:
        * inspector/agents/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        (WebCore::InspectorApplicationCacheAgent::updateApplicationCacheStatus):
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::assertFrameWithDocumentLoader):

        * inspector/agents/InspectorCanvasAgent.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::enable):

        * inspector/agents/InspectorDOMStorageAgent.h:
        * inspector/agents/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::findStorageArea):

        * inspector/agents/InspectorIndexedDBAgent.h:
        * inspector/agents/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::InspectorIndexedDBAgent):
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNames):
        (WebCore::InspectorIndexedDBAgent::requestDatabase):
        (WebCore::InspectorIndexedDBAgent::requestData):
        (WebCore::InspectorIndexedDBAgent::clearObjectStore):

        * inspector/agents/page/PageDebuggerAgent.h:
        * inspector/agents/page/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::PageDebuggerAgent):
        (WebCore::PageDebuggerAgent::sourceMapURLForScript):
        (WebCore::PageDebuggerAgent::breakpointActionLog):
        (WebCore::PageDebuggerAgent::injectedScriptForEval):

        * inspector/agents/page/PageNetworkAgent.h:
        * inspector/agents/page/PageNetworkAgent.cpp:
        (WebCore::PageNetworkAgent::PageNetworkAgent):
        (WebCore::PageNetworkAgent::loaderIdentifier):
        (WebCore::PageNetworkAgent::frameIdentifier):
        (WebCore::PageNetworkAgent::setResourceCachingDisabled):
        (WebCore::PageNetworkAgent::scriptExecutionContext):

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):

2019-03-21  Brent Fulgham  <bfulgham@apple.com>

        Hardening: Use WeakPtrs in VideoFullscreenInterface{Mac,AVKit}
        https://bugs.webkit.org/show_bug.cgi?id=196052
        <rdar://problem/48778571>

        Reviewed by Eric Carlson.

        The VideoFullscreenInterface{Mac,AVKit} implementations store their fullscreen model
        and fullscreen change observer members as bare pointers, something we've been working
        to eliminate.
        
        This patch corrects this oversight.

        No new tests since no changes in behavior.

        * platform/cocoa/VideoFullscreenChangeObserver.h:
        * platform/cocoa/VideoFullscreenModel.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::setVideoFullscreenModel):
        (VideoFullscreenInterfaceAVKit::setVideoFullscreenChangeObserver):
        (VideoFullscreenInterfaceAVKit::presentingViewController):
        (VideoFullscreenInterfaceAVKit::invalidate):
        (VideoFullscreenInterfaceAVKit::preparedToExitFullscreen):
        (VideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason):
        (VideoFullscreenInterfaceAVKit::doSetup):
        * platform/mac/VideoFullscreenInterfaceMac.h:
        (WebCore::VideoFullscreenInterfaceMac::videoFullscreenModel const):
        (WebCore::VideoFullscreenInterfaceMac::videoFullscreenChangeObserver const):
        * platform/mac/VideoFullscreenInterfaceMac.mm:
        (WebCore::VideoFullscreenInterfaceMac::setVideoFullscreenModel):
        (WebCore::VideoFullscreenInterfaceMac::setVideoFullscreenChangeObserver):
        (WebCore::VideoFullscreenInterfaceMac::enterFullscreen):
        (WebCore::VideoFullscreenInterfaceMac::invalidate):

2019-03-21  Megan Gardner  <megan_gardner@apple.com>

        Smart delete for paragraphs.
        https://bugs.webkit.org/show_bug.cgi?id=195837

        Reviewed by Ryosuke Niwa.

        Remove additional newlines to maintain spacing around paragraphs.

        Tests: editing/pasteboard/smart-delete-paragraph-001.html
               editing/pasteboard/smart-delete-paragraph-002.html
               editing/pasteboard/smart-delete-paragraph-003.html
               editing/pasteboard/smart-delete-paragraph-004.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::isBlankLine):
        (WebCore::DeleteSelectionCommand::initializePositionData):

2019-03-21  Cathie Chen  <cathiechen@igalia.com>

        Fixed ContentChangeObserver build error.
        https://bugs.webkit.org/show_bug.cgi?id=195993

        Reviewed by Rob Buis.

        EWS IOS compiler complains after adding new files in Bug 157743.
        ContentChangeObserver.h should have forward declaration for Element.

        * page/ios/ContentChangeObserver.cpp:
        * page/ios/ContentChangeObserver.h:

2019-03-21  Charlie Turner  <cturner@igalia.com>

        [GStreamer][EME][Clearkey] Take a lock in keys() method
        https://bugs.webkit.org/show_bug.cgi?id=195900

        Reviewed by Xabier Rodriguez-Calvar.

        This isn't ideal, since we're taking a lock for every frame to
        decode. But there's no good way around it when keys can be
        made unavailable at any time via an update() call, so we can't
        cache key IDs in the decryptor.

        Covered by test imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey.https.html

        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMInstanceClearKey::keys const): This method is called
        from GStreamer's decode() method, which runs off the main thread,
        therefore we need to take a lock.
        * platform/encryptedmedia/clearkey/CDMClearKey.h:

2019-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API to provide geolocation information
        https://bugs.webkit.org/show_bug.cgi?id=195940

        Reviewed by Michael Catanzaro.

        Replace ENABLE(GEOLOCATION) with USE(GEOCLUE).

        * PlatformGTK.cmake:
        * platform/geoclue/GeolocationProviderGeoclue.cpp:
        * platform/geoclue/GeolocationProviderGeoclue.h:
        * platform/geoclue/GeolocationProviderGeoclueClient.h:

2019-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Confusing messages in stderr when surfaceless context is not supported
        https://bugs.webkit.org/show_bug.cgi?id=195742

        Reviewed by Žan Doberšek.

        The messages shown are:

        Cannot create EGL surfaceless context: missing EGL_KHR_surfaceless_{context,opengl} extension.
        Cannot create EGL WPE context: EGL_SUCCESS

        It seems like there's anything wrong, while there isn't. It's also confusing an error message where the error is
        EGL_SUCCESS. I think we should not show those messages at all, not suporting surfaceless contexts is not an
        error and it's correctly handled. Failing to get a native window handle from render backend offscreen egl target
        is not an error either, since most of the backends don't implement the interface (they actually have an empty
        implementation).

        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::createSurfacelessContext): Remove the message when extensions are not present
        * platform/graphics/egl/GLContextEGLLibWPE.cpp:
        (WebCore::GLContextEGL::createWPEContext): Handle the case of wpe_renderer_backend_egl_offscreen_target_create()
        returning nullptr, which can happen if the backend doesn't implement the interface. Move the context creation
        after the target initialization, to avoid leaking the context when the target doesn't have a native window.

2019-03-20  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use finalizer in JSGlobalLexicalEnvironment and JSGlobalObject
        https://bugs.webkit.org/show_bug.cgi?id=195992

        Reviewed by Keith Miller and Mark Lam.

        Use cellHeapCellType since JSSegmentedVariableObject already set finalizer.

        * bindings/js/WebCoreJSClientData.cpp:
        (WebCore::JSVMClientData::JSVMClientData):

2019-03-20  Youenn Fablet  <youenn@apple.com>

        Compute quota after network process restart based on default quota and space used
        https://bugs.webkit.org/show_bug.cgi?id=195804

        Reviewed by Chris Dumez.

        At creation of quota manager, a default quota will be assigned.
        This value is the same for all origins.
        Some origins may have been granted a bigger quota by the user.
        In that case, the space used might be greater for these origins.
        Update at initialization time the quota according the space used as follows:
        - If space used is below default quota, stick with default quota.
        - If space used is above, set quota to space used rounded by one tenth of the default quota.
        The rounding ensures that quota requests will not happen too quickly after a page is loaded.

        Test: http/wpt/cache-storage/cache-quota-after-restart.any.html

        * Modules/cache/CacheStorageConnection.h:
        (WebCore::CacheStorageConnection::setQuotaBasedOnSpaceUsage):
        * storage/StorageQuotaManager.cpp:
        (WebCore::StorageQuotaManager::setQuotaBasedOnSpaceUsage):
        (WebCore::StorageQuotaManager::addUser):
        * storage/StorageQuotaManager.h:
        * testing/Internals.cpp:
        (WebCore::Internals::updateQuotaBasedOnSpaceUsage):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-03-20  Simon Fraser  <simon.fraser@apple.com>

        Rename ENABLE_ACCELERATED_OVERFLOW_SCROLLING macro to ENABLE_OVERFLOW_SCROLLING_TOUCH
        https://bugs.webkit.org/show_bug.cgi?id=196049

        Reviewed by Tim Horton.

        This macro is about the -webkit-overflow-scrolling CSS property, not accelerated
        overflow scrolling in general, so rename it.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/StyleBuilderConverter.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * dom/Element.cpp:
        * dom/Element.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::canUseCompositedScrolling const):
        * rendering/style/RenderStyle.cpp:
        (WebCore::rareInheritedDataChangeRequiresLayout):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/WillChangeData.cpp:
        (WebCore::WillChangeData::propertyCreatesStackingContext):

2019-03-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: DOM: lazily create the agent
        https://bugs.webkit.org/show_bug.cgi?id=195589
        <rdar://problem/48791742>

        Reviewed by Timothy Hatcher.

        No change in functionality.

        * inspector/agents/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::DOMListener): Deleted.
        (WebCore::InspectorDOMAgent::pageAgent): Deleted.
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::unbind):
        (WebCore::InspectorDOMAgent::setSearchingForNode):
        (WebCore::InspectorDOMAgent::highlightSelector):
        (WebCore::InspectorDOMAgent::highlightFrame):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::didModifyDOMAttr):
        (WebCore::InspectorDOMAgent::didRemoveDOMAttr):
        (WebCore::InspectorDOMAgent::styleAttributeInvalidated):
        (WebCore::InspectorDOMAgent::didInvalidateStyleAttr):
        (WebCore::InspectorDOMAgent::setDOMListener): Deleted.

        * inspector/agents/InspectorCSSAgent.h:
        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorCSSAgent::reset):
        (WebCore::InspectorCSSAgent::enable):
        (WebCore::InspectorCSSAgent::disable):
        (WebCore::InspectorCSSAgent::forcePseudoState):
        (WebCore::InspectorCSSAgent::collectAllStyleSheets):
        (WebCore::InspectorCSSAgent::setStyleSheetText):
        (WebCore::InspectorCSSAgent::setStyleText):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::createStyleSheet):
        (WebCore::InspectorCSSAgent::addRule):
        (WebCore::InspectorCSSAgent::asInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::elementForId):
        (WebCore::InspectorCSSAgent::bindStyleSheet):
        (WebCore::InspectorCSSAgent::~InspectorCSSAgent): Deleted.
        (WebCore::InspectorCSSAgent::discardAgent): Deleted.
        (WebCore::InspectorCSSAgent::resetNonPersistentData): Deleted.
        * inspector/InspectorStyleSheet.cpp:

        * inspector/agents/InspectorDOMDebuggerAgent.h:
        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::setDOMBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeDOMBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent):
        (WebCore::InspectorDOMDebuggerAgent::willHandleEvent):

        * inspector/agents/page/PageConsoleAgent.h:
        * inspector/agents/page/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::PageConsoleAgent):
        (WebCore::PageConsoleAgent::clearMessages):

        * inspector/InspectorController.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::createLazyAgents):
        (WebCore::InspectorController::inspect):
        (WebCore::InspectorController::hideHighlight):

2019-03-20  Youenn Fablet  <youenn@apple.com>

        Include WAL and SHM file size in IDB database size computation
        https://bugs.webkit.org/show_bug.cgi?id=195688

        Reviewed by Brady Eidson.

        Count WAL and SHM files as part of IDB quota checks.
        This makes some IDB tests go over the testing quota which then
        triggers some IDB tasks to happen sooner than other write IDB tasks.
        The IDB implementation requires these tasks to remain ordered.
        In case a write task is pending quota check, queue all tasks,
        write or read, to keep the order.

        This patch specials case aborting a transaction.
        In case it is called as part of clearing a database,
        the task should not be queued and all pending tasks are errored.
        When transaction is aborted by the web page, queue the task.

        When we can make a decision to run tasks with size 0,
        do not check quota. This ensures that read operations
        succeed even if we are above quota.

        Covered by existing tests.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::waitForRequestSpaceCompletion):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::clearObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::getRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::getAllRecords):
        (WebCore::IDBServer::UniqueIDBDatabase::getCount):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::openCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::iterateCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::commitTransaction):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::usage):
        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::getDatabaseFileSize):
        * storage/StorageQuotaManager.h:
        * storage/StorageQuotaManager.cpp:
        (WebCore::StorageQuotaManager::requestSpace):

2019-03-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timeline should show when events preventDefault() was called on an event or not
        https://bugs.webkit.org/show_bug.cgi?id=176824
        <rdar://problem/34290931>

        Reviewed by Timothy Hatcher.

        Original patch by Joseph Pecoraro <pecoraro@apple.com>.

        Tests: inspector/timeline/timeline-event-CancelAnimationFrame.html
               inspector/timeline/timeline-event-EventDispatch.html
               inspector/timeline/timeline-event-FireAnimationFrame.html
               inspector/timeline/timeline-event-RequestAnimationFrame.html
               inspector/timeline/timeline-event-TimerFire.html
               inspector/timeline/timeline-event-TimerInstall.html
               inspector/timeline/timeline-event-TimerRemove.html

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::innerInvokeEventListeners):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchEvent):
        Include `defaultPrevented` when notifying inspector.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didDispatchEvent):
        (WebCore::InspectorInstrumentation::didDispatchEventOnWindow):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didDispatchEventImpl):
        (WebCore::InspectorInstrumentation::didDispatchEventOnWindowImpl):
        Pass `defaultPrevented` on to agent.

        * inspector/agents/InspectorTimelineAgent.h:
        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didDispatchEvent):
        Append a boolean `defaultPrevented` property on the `EventDispatch` timeline record's data.

2019-03-20  Antoine Quint  <graouts@apple.com>

        DumpRenderTree crashes under WebAnimation::isRelevant when running imported/mozilla/css-transitions/test_document-get-animations.html in GuardMalloc
        https://bugs.webkit.org/show_bug.cgi?id=196028
        <rdar://problem/46842707>

        Reviewed by Dean Jackson.

        Instead of keeping a ListHashSet of raw pointers, we are now using a Vector of WeakPtrs.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::forgetAnimation):
        (WebCore::AnimationTimeline::animationTimingDidChange):
        (WebCore::AnimationTimeline::cancelDeclarativeAnimation):
        * animation/AnimationTimeline.h:
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::getAnimations const):

2019-03-20  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Remove the SVG property tear off objects for SVGAnimatedNumber
        https://bugs.webkit.org/show_bug.cgi?id=196037

        Reviewed by Simon Fraser.

        -- Define SVGAnimatedNumber to be SVGAnimatedPrimitiveProperty<float>.

        -- Add SVGAnimatedNumberAccessor to associate an attribute name with a 
           pointer to an SVGAnimatedNumber. Given a pointer to an SVGElement,
           this accessor will and create an animator for the animated property.

        -- Add SVGAnimatedNumberPairAccessor to associate an attribute name
           with a pair of pointers to SVGAnimatedNumbers. Given a pointer to an
           SVGElement, this accessor will and create an animator for these
           animated properties.

        -- Add SVGAnimatedNumberAnimator to animated an SVGAnimatedNumber.

        -- Add SVGAnimatedNumberPairAnimator to animated a pair of SVGAnimatedNumbers.

        -- Add SVGAnimationNumberFunction which will be responsible for progressing
           a float over a period of time.

        -- Define SVGNumberAnimator to be SVGPrimitivePropertyAnimator<float,
           SVGAnimationNumberFunction>. SVGNumberAnimator will be responsible 
           for animating attributes with no reflecting animated properties, e.g.
           "fill-opacity".

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAnimatedLength.cpp:
        * svg/SVGAnimatedLengthList.cpp:
        * svg/SVGAnimatedNumber.cpp: Removed.
        * svg/SVGAnimatedNumber.h: Removed.
        * svg/SVGAnimatedNumberList.cpp:
        * svg/SVGAnimatedNumberOptionalNumber.cpp: Removed.
        * svg/SVGAnimatedNumberOptionalNumber.h: Removed.
        * svg/SVGAnimatedTransformList.cpp:
        * svg/SVGAnimatorFactory.h:
        (WebCore::SVGAnimatorFactory::create):
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
        (WebCore::SVGComponentTransferFunctionElement::registerAttributes):
        (WebCore::SVGComponentTransferFunctionElement::parseAttribute):
        * svg/SVGComponentTransferFunctionElement.h:
        (WebCore::SVGComponentTransferFunctionElement::slope const):
        (WebCore::SVGComponentTransferFunctionElement::intercept const):
        (WebCore::SVGComponentTransferFunctionElement::amplitude const):
        (WebCore::SVGComponentTransferFunctionElement::exponent const):
        (WebCore::SVGComponentTransferFunctionElement::offset const):
        (WebCore::SVGComponentTransferFunctionElement::slopeAnimated):
        (WebCore::SVGComponentTransferFunctionElement::interceptAnimated):
        (WebCore::SVGComponentTransferFunctionElement::amplitudeAnimated):
        (WebCore::SVGComponentTransferFunctionElement::exponentAnimated):
        (WebCore::SVGComponentTransferFunctionElement::offsetAnimated):
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::SVGFECompositeElement):
        (WebCore::SVGFECompositeElement::registerAttributes):
        (WebCore::SVGFECompositeElement::parseAttribute):
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::SVGFEConvolveMatrixElement):
        (WebCore::SVGFEConvolveMatrixElement::registerAttributes):
        (WebCore::SVGFEConvolveMatrixElement::parseAttribute):
        (WebCore::SVGFEConvolveMatrixElement::setKernelUnitLength):
        (WebCore::SVGFEConvolveMatrixElement::kernelUnitLengthXIdentifier): Deleted.
        (WebCore::SVGFEConvolveMatrixElement::kernelUnitLengthYIdentifier): Deleted.
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement):
        (WebCore::SVGFEDiffuseLightingElement::registerAttributes):
        (WebCore::SVGFEDiffuseLightingElement::parseAttribute):
        (WebCore::SVGFEDiffuseLightingElement::kernelUnitLengthXIdentifier): Deleted.
        (WebCore::SVGFEDiffuseLightingElement::kernelUnitLengthYIdentifier): Deleted.
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
        (WebCore::SVGFEDisplacementMapElement::registerAttributes):
        (WebCore::SVGFEDisplacementMapElement::parseAttribute):
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::SVGFEDropShadowElement):
        (WebCore::SVGFEDropShadowElement::setStdDeviation):
        (WebCore::SVGFEDropShadowElement::registerAttributes):
        (WebCore::SVGFEDropShadowElement::parseAttribute):
        (WebCore::SVGFEDropShadowElement::stdDeviationXIdentifier): Deleted.
        (WebCore::SVGFEDropShadowElement::stdDeviationYIdentifier): Deleted.
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::SVGFEGaussianBlurElement):
        (WebCore::SVGFEGaussianBlurElement::setStdDeviation):
        (WebCore::SVGFEGaussianBlurElement::registerAttributes):
        (WebCore::SVGFEGaussianBlurElement::parseAttribute):
        (WebCore::SVGFEGaussianBlurElement::stdDeviationXIdentifier): Deleted.
        (WebCore::SVGFEGaussianBlurElement::stdDeviationYIdentifier): Deleted.
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::SVGFELightElement):
        (WebCore::SVGFELightElement::parseAttribute):
        (WebCore::SVGFELightElement::svgAttributeChanged):
        (WebCore::SVGFELightElement::registerAttributes): Deleted.
        * svg/SVGFELightElement.h:
        (WebCore::SVGFELightElement::azimuth const):
        (WebCore::SVGFELightElement::elevation const):
        (WebCore::SVGFELightElement::x const):
        (WebCore::SVGFELightElement::y const):
        (WebCore::SVGFELightElement::z const):
        (WebCore::SVGFELightElement::pointsAtX const):
        (WebCore::SVGFELightElement::pointsAtY const):
        (WebCore::SVGFELightElement::pointsAtZ const):
        (WebCore::SVGFELightElement::specularExponent const):
        (WebCore::SVGFELightElement::limitingConeAngle const):
        (WebCore::SVGFELightElement::azimuthAnimated):
        (WebCore::SVGFELightElement::elevationAnimated):
        (WebCore::SVGFELightElement::xAnimated):
        (WebCore::SVGFELightElement::yAnimated):
        (WebCore::SVGFELightElement::zAnimated):
        (WebCore::SVGFELightElement::pointsAtXAnimated):
        (WebCore::SVGFELightElement::pointsAtYAnimated):
        (WebCore::SVGFELightElement::pointsAtZAnimated):
        (WebCore::SVGFELightElement::specularExponentAnimated):
        (WebCore::SVGFELightElement::limitingConeAngleAnimated):
        (WebCore::SVGFELightElement::attributeRegistry): Deleted.
        (WebCore::SVGFELightElement::isKnownAttribute): Deleted.
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::SVGFEMorphologyElement):
        (WebCore::SVGFEMorphologyElement::setRadius):
        (WebCore::SVGFEMorphologyElement::registerAttributes):
        (WebCore::SVGFEMorphologyElement::parseAttribute):
        (WebCore::SVGFEMorphologyElement::radiusXIdentifier): Deleted.
        (WebCore::SVGFEMorphologyElement::radiusYIdentifier): Deleted.
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::SVGFEOffsetElement):
        (WebCore::SVGFEOffsetElement::registerAttributes):
        (WebCore::SVGFEOffsetElement::parseAttribute):
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::SVGFESpecularLightingElement):
        (WebCore::SVGFESpecularLightingElement::registerAttributes):
        (WebCore::SVGFESpecularLightingElement::parseAttribute):
        (WebCore::SVGFESpecularLightingElement::kernelUnitLengthXIdentifier): Deleted.
        (WebCore::SVGFESpecularLightingElement::kernelUnitLengthYIdentifier): Deleted.
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::SVGFETurbulenceElement):
        (WebCore::SVGFETurbulenceElement::registerAttributes):
        (WebCore::SVGFETurbulenceElement::parseAttribute):
        (WebCore::SVGFETurbulenceElement::baseFrequencyXIdentifier): Deleted.
        (WebCore::SVGFETurbulenceElement::baseFrequencyYIdentifier): Deleted.
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGGeometryElement.cpp:
        (WebCore::SVGGeometryElement::SVGGeometryElement):
        (WebCore::SVGGeometryElement::parseAttribute):
        (WebCore::SVGGeometryElement::registerAttributes): Deleted.
        * svg/SVGGeometryElement.h:
        (WebCore::SVGGeometryElement::pathLength const):
        (WebCore::SVGGeometryElement::pathLengthAnimated):
        (WebCore::SVGGeometryElement::attributeRegistry): Deleted.
        (WebCore::SVGGeometryElement::isKnownAttribute): Deleted.
        * svg/SVGPathElement.h:
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::SVGStopElement):
        (WebCore::SVGStopElement::parseAttribute):
        (WebCore::SVGStopElement::registerAttributes): Deleted.
        * svg/SVGStopElement.h:
        * svg/properties/SVGAnimatedPropertyAccessorImpl.h:
        * svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
        * svg/properties/SVGAnimatedPropertyImpl.h:
        * svg/properties/SVGAnimatedPropertyPairAccessorImpl.h:
        * svg/properties/SVGAnimatedPropertyPairAnimatorImpl.h:
        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
        (WebCore::SVGAnimationNumberFunction::progress):
        * svg/properties/SVGAttributeRegistry.h:
        * svg/properties/SVGPrimitivePropertyAnimatorImpl.h:
        * svg/properties/SVGPropertyAnimatorCreator.h:
        (WebCore::SVGPropertyAnimatorCreator::createNumberAnimator):
        (WebCore::SVGPropertyAnimatorCreator::attributeAnimatorCreator):
        * svg/properties/SVGPropertyOwnerRegistry.h:
        (WebCore::SVGPropertyOwnerRegistry::registerProperty):

2019-03-20  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Remove the SVG tear off objects for SVGColorAnimator
        https://bugs.webkit.org/show_bug.cgi?id=196025

        Reviewed by Simon Fraser.

        SVG attributes like "fill" and "stroke" do not have reflecting properties
        in SVGElement but they are animatable by SMIL. Animating such attributes
        is different from animating the SVG animated properties. These new classes
        will be added to handle the first type of this kind of attribute: the Color:

        -- SVGPropertyAnimatorCreator is added to SVGElement. It is responsible 
           for creating SVGPropertyAnimators for the attribute which do not have
           reflecting animated properties stored by SVGElement. It will maintain
           a HashMap for the animated values for these attributes which is indexed
           by the attribute name. The animated values has to be RefCounted because
           the same attribute can be animated by multiple animators. So the values
           of this HashMap will be of type Ref<SVGProperty>, e.g.
            <circle cx="80" cy="120" r="35">
                <animate attributeName="fill" values="#080" begin="2s" />
                <animate attributeName="fill" values="#602;#004" begin="4s" dur="5s"/>
            </circle>

        -- SVGPropertyAnimator is the a new type which animates an attribute with
           no reflecting animated property.

        -- SVGPrimitivePropertyAnimator is a template class which is responsible
           for animating attributes with primitive types, e.g. Color, string and 
           float. It is derived form SVGPropertyAnimator and it is initialized 
           with a Ref<SVGValueProperty<PropertyType>> which is created and maintained
           by SVGPropertyAnimatorFactory.

        -- SVGAnimationColorFunction is the animation function that animates the
           attributes whose type are Color. Note the conversion form String to 
           Color in this class has to handle the case when its value is "attributeName="
           e.g. <animate attributeName="fill" from="attributeName="r"/>

        -- SVGColorAnimator will be defined to be
           SVGPrimitivePropertyAnimator<Color, SVGAnimationColorFunction>.

        The life cycle of the RefCounted properties can be explained as follows:

        -- SVGPropertyAnimatorFactory checks whether its HashMap has an entry
           for the given attribute name. If it does not have, it will create a
           new value through the value creation method for this attribute.

        -- SVGPropertyAnimatorFactory passes the shared animated value to the
           animator creation method. So multiple animators will be accessing the
           same value through their RefCounted pointers.

        -- When the animator is about to be deleted, it will notify the target
           SVGElement which will notify its SVGPropertyAnimatorFactory.
           SVGPropertyAnimatorFactory will check its HashMap and retrieves the
           entry for the given attribute name. If the refCount is 2, it is going
           to remove the entry form the HashMap.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAnimateColorElement.cpp:
        (WebCore::attributeValueIsCurrentColor): Deleted.
        (WebCore::SVGAnimateColorElement::determinePropertyValueTypes): Deleted.
        * svg/SVGAnimateColorElement.h:
        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::attributeAnimationController):
        * svg/SVGAnimatedColor.cpp: Removed.
        * svg/SVGAnimatedColor.h: Removed.
        * svg/SVGAnimatorFactory.h:
        (WebCore::SVGAnimatorFactory::create):
        * svg/SVGAttributeAnimationController.cpp:
        (WebCore::SVGAttributeAnimationController::~SVGAttributeAnimationController):
        * svg/SVGAttributeAnimationController.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement):
        (WebCore::SVGElement::isAnimatedAttribute const):
        (WebCore::SVGElement::createAnimator):
        (WebCore::SVGElement::animatorWillBeDeleted):
        * svg/SVGElement.h:
        (WebCore::SVGElement::propertyAnimatorFactory):
        * svg/SVGFitToViewBox.h:
        * svg/SVGMPathElement.cpp:
        * svg/graphics/filters/SVGFEImage.h:
        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.cpp: Added.
        (WebCore::SVGAnimationColorFunction::colorFromString):
        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
        (WebCore::SVGAnimationColorFunction::progress):
        * svg/properties/SVGAnimationFunction.h:
        * svg/properties/SVGAttributeAnimator.cpp:
        (WebCore::SVGAttributeAnimator::applyAnimatedStylePropertyChange):
        (WebCore::SVGAttributeAnimator::removeAnimatedStyleProperty):
        * svg/properties/SVGAttributeAnimator.h:
        * svg/properties/SVGPrimitivePropertyAnimator.h: Added.
        (WebCore::SVGPrimitivePropertyAnimator::create):
        (WebCore::SVGPrimitivePropertyAnimator::SVGPrimitivePropertyAnimator):
        * svg/properties/SVGPrimitivePropertyAnimatorImpl.h: Added.
        * svg/properties/SVGPropertyAnimator.h: Added.
        (WebCore::SVGPropertyAnimator::SVGPropertyAnimator):
        (WebCore::SVGPropertyAnimator::adjustForInheritance const):
        (WebCore::SVGPropertyAnimator::computeCSSPropertyValue const):
        (WebCore::SVGPropertyAnimator::computeInheritedCSSPropertyValue const):
        * svg/properties/SVGPropertyAnimatorFactory.h: Added.
        (WebCore::SVGPropertyAnimatorFactory::isKnownAttribute):
        (WebCore::SVGPropertyAnimatorFactory::createAnimator):
        (WebCore::SVGPropertyAnimatorFactory::animatorWillBeDeleted):
        (WebCore::SVGPropertyAnimatorFactory::createColorAnimator):
        (WebCore::SVGPropertyAnimatorFactory::attributeAnimatorCreator):

2019-03-20  Alex Christensen  <achristensen@webkit.org>

        Use WeakPtr instead of storing raw pointers in WebSocket code
        https://bugs.webkit.org/show_bug.cgi?id=196034

        Reviewed by Geoff Garen.

        This could prevent using freed memory if we forget to reset a pointer somewhere.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::connect):
        (WebCore::WebSocketChannel::fail):
        (WebCore::WebSocketChannel::disconnect):
        (WebCore::WebSocketChannel::didOpenSocketStream):
        (WebCore::WebSocketChannel::didCloseSocketStream):
        (WebCore::WebSocketChannel::didFailSocketStream):
        (WebCore::WebSocketChannel::processBuffer):
        (WebCore::WebSocketChannel::processFrame):
        (WebCore::WebSocketChannel::processOutgoingFrameQueue):
        (WebCore::WebSocketChannel::sendFrame):
        * Modules/websockets/WebSocketChannel.h:
        * Modules/websockets/WebSocketChannelClient.h:
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::WebSocketHandshake):
        * Modules/websockets/WebSocketHandshake.h:

2019-03-20  Dean Jackson  <dino@apple.com>

        [iOS] Crash in WebCore::Node::renderRect
        https://bugs.webkit.org/show_bug.cgi?id=196035
        <rdar://problem/49076783>

        Reviewed by Antoine Quint.

        When renderRect was called on an HTMLAreaElement, it would
        ASSERT because it doesn't have a renderer. We hadn't noticed
        this before because none of our tests were hitting this in
        debug mode.

        The fix is to ask the corresponding HTMLImageElement for
        its renderer, and use that for the returned rectangle.

        Covered by these tests that had become flakey:
            fast/images/imagemap-in-shadow-tree.html
            http/tests/download/area-download.html

        * dom/Node.cpp:
        (WebCore::Node::renderRect):

2019-03-20  Youenn Fablet  <youenn@apple.com>

        Have smaller default quotas for third party frames
        https://bugs.webkit.org/show_bug.cgi?id=195841

        Reviewed by Geoffrey Garen.

        Test: http/wpt/cache-storage/quota-third-party.https.html

        * storage/StorageQuotaManager.h:
        (WebCore::StorageQuotaManager::defaultQuota):
        Change default quota to 1GB.

2019-03-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: DOM: include window as part of any event listener chain
        https://bugs.webkit.org/show_bug.cgi?id=195730
        <rdar://problem/48916872>

        Reviewed by Timothy Hatcher.

        Test: inspector/dom/getEventListenersForNode.html

        * inspector/agents/InspectorDOMAgent.h:
        (WebCore::EventListenerInfo::EventListenerInfo): Deleted.
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        (WebCore::InspectorDOMAgent::getEventListeners): Deleted.

2019-03-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Runtime: lazily create the agent
        https://bugs.webkit.org/show_bug.cgi?id=195972
        <rdar://problem/49039655>

        Reviewed by Timothy Hatcher.

        No change in functionality.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::createLazyAgents):

        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::createLazyAgents):

        * inspector/agents/page/PageRuntimeAgent.h:
        * inspector/agents/page/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::PageRuntimeAgent):
        (WebCore::PageRuntimeAgent::enable):
        (WebCore::PageRuntimeAgent::disable):
        (WebCore::PageRuntimeAgent::didCreateMainWorldContext):
        (WebCore::PageRuntimeAgent::reportExecutionContextCreation):
        (WebCore::PageRuntimeAgent::didCreateFrontendAndBackend): Deleted.
        (WebCore::PageRuntimeAgent::willDestroyFrontendAndBackend): Deleted.

        * inspector/agents/worker/WorkerRuntimeAgent.h:
        * inspector/agents/worker/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::didCreateFrontendAndBackend): Deleted.
        (WebCore::WorkerRuntimeAgent::willDestroyFrontendAndBackend): Deleted.

2019-03-19  Ryosuke Niwa  <rniwa@webkit.org>

        [CSS OM] StyledElementInlineStylePropertyMap creates a Ref cycle with its owner element
        https://bugs.webkit.org/show_bug.cgi?id=195987

        Reviewed by Simon Fraser.

        StyledElementInlineStylePropertyMap was leaking every element for which it was created because due to
        a reference cycle. The StyledElementInlineStylePropertyMap holds onto its element using Ref and
        the element also stores StyledElementInlineStylePropertyMap in ElementRareData using RefPtr.

        Fixed the cycle by making the reference from StyledElementInlineStylePropertyMap weak. For now we use
        a raw pointer because we can't create a WeakPtr of an element yet.

        Test: css-typedom/attribute-style-map-should-not-leak-every-element.html

        * css/typedom/StylePropertyMap.h:
        (WebCore::StylePropertyMap): Added clearElement as a virtual function.
        * dom/Element.cpp:
        (WebCore::Element::~Element): Clear the element pointer in StyledElementInlineStylePropertyMap.
        * dom/StyledElement.cpp:
        (WebCore::StyledElementInlineStylePropertyMap::get): Added a null check for m_element.
        (WebCore::StyledElementInlineStylePropertyMap::StyledElementInlineStylePropertyMap):
        (WebCore::StyledElementInlineStylePropertyMap::clearElement): Added.
        (WebCore::StyledElementInlineStylePropertyMap): Use a raw pointer instead of Ref to StyledElement
        to avoid the leak.
        * platform/graphics/CustomPaintImage.cpp:
        (WebCore::HashMapStylePropertyMap::clearElement): Added.

2019-03-19  Ryosuke Niwa  <rniwa@webkit.org>

        appendChild should throw when inserting an ancestor of a template into its content adopted to another document
        https://bugs.webkit.org/show_bug.cgi?id=195984

        Reviewed by Darin Adler.

        The WPT test caught a bug that appendChild and other DOM insertion functions were incorrectly assuming that
        any node that's in a HTML template element has the current document's template document as its owner.
        The assumption is wrong when the template element's content DocumentFragment is adopted to another document.

        Fixed the bug by always checking the ancestor host elements in checkAcceptChild. Also

        Test: fast/dom/insert-template-parent-into-adopted-content.html

        * dom/ContainerNode.cpp:
        (WebCore::isInTemplateContent): Deleted. This code is simply wrong.
        (WebCore::containsConsideringHostElements): Deleted. Call sites are updated to use containsIncludingHostElements.
        (WebCore::containsIncludingHostElements): Moved from Node.cpp and optimized this code a bit. It's more efficient
        to get the parent node and check for ShadowRoot and DocumentFragment only when the parent is null than to check
        for those two node types before getting the parent node.
        (WebCore::checkAcceptChild): Merged two code paths to call containsIncludingHostElements. The early return for
        a pseudo element is there only to prevent tree corruption in release build even in the presence of a major bug
        so it shouldn't be an spec compliance issue.
        * dom/Node.cpp:
        (WebCore::Node::containsIncludingHostElements const): Deleted.
        * dom/Node.h:

2019-03-20  Timothy Hatcher  <timothy@apple.com>

        Unreviewed followup to r243169 to fix test failures.

        * DerivedSources.make: Add HAVE_OS_DARK_MODE_SUPPORT to FEATURE_AND_PLATFORM_DEFINES.

2019-03-20  Keith Rollin  <krollin@apple.com>

        Update the location for XProtect.meta.plist file
        https://bugs.webkit.org/show_bug.cgi?id=195764

        Reviewed by Alexey Proskuryakov.

        The location of this file is changing in the future, so adjust for
        that.

        No new tests since there should be no observable behavior difference.

        * platform/mac/BlacklistUpdater.mm:

2019-03-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Database: lazily create the agent
        https://bugs.webkit.org/show_bug.cgi?id=195587
        <rdar://problem/48791735>

        Reviewed by Timothy Hatcher.

        No change in functionality.

        * inspector/agents/InspectorDatabaseAgent.h:
        * inspector/agents/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didCommitLoad): Added.
        (WebCore::InspectorDatabaseAgent::didOpenDatabase):
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::enable):
        (WebCore::InspectorDatabaseAgent::disable):
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        (WebCore::InspectorDatabaseAgent::executeSQL):
        (WebCore::InspectorDatabaseAgent::databaseId):
        (WebCore::InspectorDatabaseAgent::findByFileName):
        (WebCore::InspectorDatabaseAgent::databaseForId):
        (WebCore::InspectorDatabaseAgent::clearResources): Deleted.
        (WebCore::InspectorDatabaseAgent::~InspectorDatabaseAgent): Deleted.
        * inspector/InspectorDatabaseResource.h:
        (WebCore::InspectorDatabaseResource::database const):
        (WebCore::InspectorDatabaseResource::setDatabase):
        (WebCore::InspectorDatabaseResource::database): Deleted.
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::create):
        (WebCore::InspectorDatabaseResource::InspectorDatabaseResource):
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didOpenDatabase):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::didOpenDatabaseImpl):
        Pass the `Database` as a reference instead of a pointer. Retrieve any information directly
        from the `Database`, rather than using the arguments that were used to create it.

        * Modules/webdatabase/Database.h:
        (WebCore::Database::expectedVersion const): Deleted.
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::expectedVersion const): Added.
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabase):
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::closeAllDatabases):
        (WebCore::DatabaseTracker::openDatabases): Added.
        Expose various values used by `InspectorDatabaseAgent` and `InspectorDatabaseResource`.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::createLazyAgents):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):

        * inspector/CommandLineAPIHost.h:
        (WebCore::CommandLineAPIHost::init):
        * inspector/CommandLineAPIHost.cpp:
        (WebCore::CommandLineAPIHost::disconnect):
        (WebCore::CommandLineAPIHost::inspect):
        (WebCore::CommandLineAPIHost::clearConsoleMessages):
        (WebCore::CommandLineAPIHost::databaseId):
        (WebCore::CommandLineAPIHost::storageId):
        Rather than pass each agent individually, pass the entire `InstrumentingAgents` so that the
        current agent can be used instead of whatever was initially created.

2019-03-20  Oriol Brufau  <obrufau@igalia.com>

        [css-grid] Always consider baseline shim for the minimum contribution
        https://bugs.webkit.org/show_bug.cgi?id=195964

        Reviewed by Javier Fernandez.

        Tests: imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-minimum-contribution-baseline-shim-vertical-lr.html
               imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-minimum-contribution-baseline-shim-vertical-rl.html
               imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-minimum-contribution-baseline-shim.html

        Before this patch, the shim used for baseline alignment is not taken
        into consideration when calculating the minimum contribution of a grid
        item if its preferred size is auto, its minimum size is auto, and the
        max track sizing function is a fixed small value. In this case, the
        auto minimum size can produce a smaller track than if it was 0.

        The specification needs to clarify how baseline shims interact with
        minimum contributions (https://github.com/w3c/csswg-drafts/issues/3660),
        but the above doesn't make sense.

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const):

2019-03-20  Simon Fraser  <simon.fraser@apple.com>

        Some elements lag behind async overflow scrolling on palace-games.com
        https://bugs.webkit.org/show_bug.cgi?id=195934

        Reviewed by Zalan Bujtas.

        The logic added in r242997 was wrong for an absolutely-positioned layer whose containig block was
        inside an overflow:scroll, but whose compositing ancestor was outside. This is a case where
        we need to make a Positioning node for the absolute layer, because it needs to move along
        with the scrolled content.
        
        There are six permutations of overflow, containing block and compositing ancestor that we care about.
        Showing renderer (aka DOM) order, they are (where <- indicates child <- parent):
        
        layer <- cb <- ca <- os -- no positioned node required
        layer <- cb <- os <- ca -- compositing parent skips overflow, need a "Moved" Positioned node.
        layer <- ov <- cb <- ca -- no positioned node required
        layer <- ov <- ca <- cb -- no positioned node required
        layer <- ca <- cb <- ov -- no positioned node required
        layer <- ca <- ov <- cb -- containing block skips overflow, need a "Stationary" Positioned node.
        
        [cb = containing block, ca = compositing ancestor, ov = overflow scroll]

        Test: scrollingcoordinator/scrolling-tree/positioned-nodes-complex.html

        * rendering/RenderLayer.cpp:
        (WebCore::outputPaintOrderTreeRecursive):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::layerParentedAcrossCoordinatedScrollingBoundary):
        (WebCore::RenderLayerCompositor::computeCoordinatedPositioningForLayer const):

2019-03-20  Simon Fraser  <simon.fraser@apple.com>

        Explicitly trigger compositing for layers that need to be moved by ScrollingTreePositionedNodes
        https://bugs.webkit.org/show_bug.cgi?id=195710
        <rdar://problem/48867502>

        Reviewed by Zalan Bujtas.

        A position:absolute layer whose containing block is outside an enclosing overflow:scroll, but
        whose compositing ancestor is the overflow or is inside it, needs to be composited so that
        we can make a Positioning scrolling tree node for it.

        Handle this case as a "OverflowScrollPositioning" indirect compositing reason.

        Test: compositing/layer-creation/absolute-in-async-overflow-scroll.html

        * inspector/agents/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::reasonsForCompositingLayer):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore const):
        (WebCore::RenderLayerCompositor::reasonsForCompositing const):
        (WebCore::RenderLayerCompositor::logReasonsForCompositing):
        (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason const):
        (WebCore::RenderLayerCompositor::layerContainingBlockCrossesCoordinatedScrollingBoundary):
        (WebCore::layerContainingBlockCrossesCoordinatedScrollingBoundary): Deleted.
        * rendering/RenderLayerCompositor.h: Generalize OverflowScrollingTouch to OverflowScrolling.

2019-03-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Search: allow DOM searches to be case sensitive
        https://bugs.webkit.org/show_bug.cgi?id=194673
        <rdar://problem/48087577>

        Reviewed by Timothy Hatcher.

        Tests: inspector/dom/dom-search.html
               inspector/dom/dom-search-caseSensitive.html

        Since `DOM.performSearch` also searches by selector and XPath, some results may appear
        as unexpected. As an example, searching for "BoDy" will still return the <body> as a result,
        as although the literal node name ("BODY") didn't match, it did match via selector/XPath.

        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::performSearch):

        * inspector/InspectorNodeFinder.h:
        * inspector/InspectorNodeFinder.cpp:
        (WebCore::InspectorNodeFinder::InspectorNodeFinder):
        (WebCore::InspectorNodeFinder::searchUsingDOMTreeTraversal):
        (WebCore::InspectorNodeFinder::checkEquals): Added.
        (WebCore::InspectorNodeFinder::checkContains): Added.
        (WebCore::InspectorNodeFinder::checkStartsWith): Added.
        (WebCore::InspectorNodeFinder::checkEndsWith): Added.
        (WebCore::InspectorNodeFinder::matchesAttribute):
        (WebCore::InspectorNodeFinder::matchesElement):
        (WebCore::InspectorNodeFinder::searchUsingXPath):
        (WebCore::InspectorNodeFinder::searchUsingCSSSelectors):

2019-03-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove copyRef() calls added in r243163
        https://bugs.webkit.org/show_bug.cgi?id=195962

        Reviewed by Chris Dumez.

        The first two cases here can just directly return the RefPtr.

        In the third case, we have to work around a GCC 6 bug because GCC 6 is unable to pick the
        right constructor to use, unlike modern compilers.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::bodyAsFormData const):
        (WebCore::FetchBody::take):

2019-03-20  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Fix handling of resolution changes in AppendPipeline
        https://bugs.webkit.org/show_bug.cgi?id=195855

        Reviewed by Xabier Rodriguez-Calvar.

        MediaSample instances produced by the AppendPipeline were not
        accounting for resolution changes. The causes of this are twofold:

        1) m_presentationSize is set by connectDemuxerSrcPadToAppsink() (by
        calling parseDemuxerSrcPadCaps()), but not by appsinkCapsChanged().

        2) appsinkCapsChanged() was being called in the main thread as an
        asynchronous task. In consequence, even if m_presentationSize is set
        there, many samples with the new resolution would still be wrapped in
        a MediaSampleGStreamer using the old resolution by the main thread
        running consumeAppsinkAvailableSamples() before appsinkCapsChanged()
        is dispatched.

        This patch fixes these problems by updating m_presentationSize in
        appsinkCapsChanged() and making the streaming thread block until the
        main thread has dispatched appsinkCapsChanged(). This way the handling
        of caps changes is serialized with the handling of frames.

        Test: media/media-source/media-source-samples-resolution-change.html

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::AppendPipeline):
        (WebCore::AppendPipeline::appsinkCapsChanged):

2019-03-20  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Implement support for new meter ARIA role
        https://bugs.webkit.org/show_bug.cgi?id=195966

        Reviewed by Chris Fleizach.

        Add the new ARIA role to the internal rolemap so that it is treated
        in the same fashion as its HTML element counterpart.

        No new tests. Instead add the role to the existing role-exposure tests.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isMeter const):
        (WebCore::initializeRoleMap):
        (WebCore::AccessibilityObject::computedRoleString const):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2019-03-20  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Switch back to webkitwebsrc for adaptive streaming fragments downloading
        https://bugs.webkit.org/show_bug.cgi?id=195948

        Reviewed by Xabier Rodriguez-Calvar.

        The webkitwebsrc element now behaves much better when used through
        GStreamer's adaptivedemux, so use it for all WebKit media
        downloads. The MediaPlayer needed by the webkitwebsrc element now
        travels through GstContext messages and queries so that it can be
        shared by multiple elements, typically the first webkitwebsrc
        element downloads the HLS manifest and then adaptivedemux, through
        uridownloader, will create new webkitwebsrc elements for fragments
        downloading. Those new elements will query the first webkitwebsrc
        element for its context.

        The previous hack used to check SecurityOrigins can
        also be cleaned-up. The origins are now cached upon reception of
        the HTTP headers message from webkitwebsrc.

        No new tests, existing http/tests/media/hls tests cover this change.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setPlaybinURL):
        (WebCore::MediaPlayerPrivateGStreamer::loadFull):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::loadNextLocation):
        (WebCore::MediaPlayerPrivateGStreamer::wouldTaintOrigin const):
        (WebCore::convertToInternalProtocol): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::handleSyncMessage):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_class_init):
        (webKitWebSrcSetContext):
        (webKitWebSrcStart):
        (webKitWebSrcGetProtocols):
        (webKitWebSrcSetUri):
        (CachedResourceStreamingClient::responseReceived):
        (convertPlaybinURI): Deleted.
        (webKitSrcWouldTaintOrigin): Deleted.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.h:

2019-03-20  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC]: Refactor to make the encoding happen synchronously
        https://bugs.webkit.org/show_bug.cgi?id=195674

        This simplifies the code and make sure that everything is called from the right
        thread. It also makes it so we follow the same way of doing things as other libwebrtc
        encoders.

        Also "s/codecSpecifiInfos/codecSpecificInfos/"

        Reviewed by Philippe Normand.

        No new test as this is just a refactoring

        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::InitEncode):
        (WebCore::GStreamerVideoEncoder::returnFromFlowReturn):

2019-03-20  Tim Horton  <timothy_horton@apple.com>

        Add an platform-driven spell-checking mechanism
        https://bugs.webkit.org/show_bug.cgi?id=195795

        Reviewed by Ryosuke Niwa.

        * dom/Document.cpp:
        (WebCore::Document::textInserted):
        PlatformTextChecking markers are not expected
        to propagate to newly inserted text, so remove them.

        * dom/DocumentMarker.h:
        (WebCore::DocumentMarker::allMarkers):
        Add a new type of DocumentMarker, PlatformTextChecking,
        and a new data variant that stores a key value pair of strings.

        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addPlatformTextCheckingMarker):
        (WebCore::DocumentMarkerController::removeMarkers):
        (WebCore::DocumentMarkerController::filterMarkers):
        (WebCore::shouldInsertAsSeparateMarker):
        * dom/DocumentMarkerController.h:
        Export some things.
        Add addPlatformTextCheckingMarker, like the others.
        Make it possible to filter out markers of a particular type
        in a range with a predicate function.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers):
        Propagate PlatformTextChecking data.
        A future change should probably make it possible for
        any DocumentMarker to copy its data here, instead of
        special-casing each type that is important.

        * editing/Editor.cpp:
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::markMisspellingsAndBadGrammar):
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar):
        (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange const):
        (WebCore::platformDrivenTextCheckerEnabled):
        * editing/TextCheckingHelper.h:
        Bail from traditional spell checking if this mechanism is
        enabled. (I wrote it this way to make it runtime switchable
        in the near future, and to be similar to unifiedTextCheckerEnabled).

2019-03-19  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Implement FIDO AppID extension
        https://bugs.webkit.org/show_bug.cgi?id=143491
        <rdar://problem/48298273>

        Reviewed by Brent Fulgham.

        This patch adds support for FIDO AppID extension: https://www.w3.org/TR/webauthn/#sctn-appid-extension.
        To be noticed, this implementation follows what spec suggested in the 'Note' session and what Chrome/Firefox
        do in practice to avoid some unnecessary steps of
        https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-appid-and-facets-v2.0-id-20180227.html#determining-if-a-caller-s-facetid-is-authorized-for-an-appid.

        In fido::convertToU2fSignCommand, the checkOnly flag is deleted as it is never used.

        Covered by new tests in existing files.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webauthn/AuthenticationExtensionsClientInputs.h: Copied from Source/WebCore/Modules/webauthn/PublicKeyCredential.idl.
        (WebCore::AuthenticationExtensionsClientInputs::encode const):
        (WebCore::AuthenticationExtensionsClientInputs::decode):
        * Modules/webauthn/AuthenticationExtensionsClientInputs.idl: Copied from Source/WebCore/Modules/webauthn/PublicKeyCredentialRequestOptions.idl.
        * Modules/webauthn/AuthenticatorCoordinator.cpp:
        (WebCore::AuthenticatorCoordinatorInternal::processAppIdExtension):
        (WebCore::AuthenticatorCoordinator::create const):
        (WebCore::AuthenticatorCoordinator::discoverFromExternalSource const):
        * Modules/webauthn/PublicKeyCredential.cpp:
        (WebCore::PublicKeyCredential::tryCreate):
        (WebCore::PublicKeyCredential::PublicKeyCredential):
        (WebCore::PublicKeyCredential::getClientExtensionResults const):
        (WebCore::PublicKeyCredential::create): Deleted.
        * Modules/webauthn/PublicKeyCredential.h:
        * Modules/webauthn/PublicKeyCredential.idl:
        * Modules/webauthn/PublicKeyCredentialCreationOptions.h:
        * Modules/webauthn/PublicKeyCredentialCreationOptions.idl:
        * Modules/webauthn/PublicKeyCredentialData.h:
        (WebCore::PublicKeyCredentialData::encode const):
        (WebCore::PublicKeyCredentialData::decode):
        * Modules/webauthn/PublicKeyCredentialRequestOptions.h:
        (WebCore::PublicKeyCredentialRequestOptions::encode const):
        (WebCore::PublicKeyCredentialRequestOptions::decode):
        * Modules/webauthn/PublicKeyCredentialRequestOptions.idl:
        * Modules/webauthn/fido/DeviceResponseConverter.cpp:
        (fido::readCTAPMakeCredentialResponse):
        (fido::readCTAPGetAssertionResponse):
        * Modules/webauthn/fido/U2fCommandConstructor.cpp:
        (fido::convertToU2fSignCommand):
        * Modules/webauthn/fido/U2fCommandConstructor.h:
        * Modules/webauthn/fido/U2fResponseConverter.cpp:
        (fido::readU2fRegisterResponse):
        (fido::readU2fSignResponse):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-03-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debugger: lazily create the agent
        https://bugs.webkit.org/show_bug.cgi?id=195973
        <rdar://problem/49039674>

        Reviewed by Joseph Pecoraro.

        No change in functionality.

        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::createLazyAgents):

        * inspector/agents/WebDebuggerAgent.cpp:
        (WebCore::WebDebuggerAgent::disable):

        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::discardAgent):

2019-03-18  Maciej Stachowiak  <mjs@apple.com>

        Simplify Cocoa platform user agent logic by using string constants instead of function calls for the frozen parts
        https://bugs.webkit.org/show_bug.cgi?id=195936

        Reviewed by Dean Jackson.

        No new tests because no behavior changes. Existing behavior is tested by fast/dom/navigator-userAgent-frozen.html

        * platform/UserAgent.h: Remove prototype of removed function.
        * platform/cocoa/UserAgentCocoa.mm:
        (WebCore::userAgentBundleVersion): Deleted.
        * platform/ios/UserAgentIOS.mm:
        * platform/ios/UserAgentIOS.mm:
        (WebCore::osNameForUserAgent): Use WTF String instead of NSString
        (WebCore::deviceNameForUserAgent): dutto
        (WebCore::standardUserAgentWithApplicationName): Simplify this
        function to account for WebKit version now being frozen. Also
        use String instead of NSString.
        * platform/mac/UserAgentMac.mm:
        (WebCore::standardUserAgentWithApplicationName): Simplify this
        function to account for CPU and WEbKit version now being
        frozen. Also avoid two separate but very similar calls to
        makeString().

2019-03-19  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed adjustment to r242842 per Darin's request.

        * platform/win/LoggingWin.cpp:
        (WebCore::logLevelString):

2019-03-19  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Remove the SVG property tear off objects of SVGAnimatedPreserveAspectRatio
        https://bugs.webkit.org/show_bug.cgi?id=195960

        Reviewed by Simon Fraser.

        -- Define SVGAnimatedPreserveAspectRatio to be SVGAnimatedValueProperty<
           SVGPreserveAspectRatio>.

        -- Make SVGPreserveAspectRatio be derived form SVGValueProperty<
           SVGPreserveAspectRatioValue>.

        -- Add SVGAnimatedPreserveAspectRatioAccessor to access the animated 
           property.

        -- Add SVGAnimatedPreserveAspectRatioAnimator to animate the animated
           property of the target element and all its instances.

        -- Add SVGAnimationPreserveAspectRatioFunction to progress animVal of
           animated property in a period of time.

        SVGFilterPrimitiveStandardAttributes::build() should be const function.
        This is required for this patch because SVGFEImageElement::build() calls
        SVGFEImageElement::preserveAspectRatio() which is const.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAnimatedPreserveAspectRatio.cpp: Removed.
        * svg/SVGAnimatedPreserveAspectRatio.h: Removed.
        * svg/SVGAnimatorFactory.h:
        (WebCore::SVGAnimatorFactory::create):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::build const):
        (WebCore::SVGFEBlendElement::build): Deleted.
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::build const):
        (WebCore::SVGFEColorMatrixElement::build): Deleted.
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::build const):
        (WebCore::SVGFEComponentTransferElement::build): Deleted.
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::build const):
        (WebCore::SVGFECompositeElement::build): Deleted.
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::build const):
        (WebCore::SVGFEConvolveMatrixElement::build): Deleted.
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::build const):
        (WebCore::SVGFEDiffuseLightingElement::build): Deleted.
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::build const):
        (WebCore::SVGFEDisplacementMapElement::build): Deleted.
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::build const):
        (WebCore::SVGFEDropShadowElement::build): Deleted.
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::build const):
        (WebCore::SVGFEFloodElement::build): Deleted.
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::build const):
        (WebCore::SVGFEGaussianBlurElement::build): Deleted.
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::SVGFEImageElement):
        (WebCore::SVGFEImageElement::parseAttribute):
        (WebCore::SVGFEImageElement::build const):
        (WebCore::SVGFEImageElement::registerAttributes): Deleted.
        (WebCore::SVGFEImageElement::build): Deleted.
        * svg/SVGFEImageElement.h:
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::build const):
        (WebCore::SVGFEMergeElement::build): Deleted.
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::build const):
        (WebCore::SVGFEMorphologyElement::build): Deleted.
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::build const):
        (WebCore::SVGFEOffsetElement::build): Deleted.
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::build const):
        (WebCore::SVGFESpecularLightingElement::build): Deleted.
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::build const):
        (WebCore::SVGFETileElement::build): Deleted.
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::build const):
        (WebCore::SVGFETurbulenceElement::build): Deleted.
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::SVGFitToViewBox):
        (WebCore::SVGFitToViewBox::parseViewBox):
        (WebCore::SVGFitToViewBox::registerAttributes): Deleted.
        * svg/SVGFitToViewBox.h:
        (WebCore::SVGFitToViewBox::preserveAspectRatio const):
        (WebCore::SVGFitToViewBox::preserveAspectRatioAnimated):
        (WebCore::SVGFitToViewBox::setPreserveAspectRatio):
        (WebCore::SVGFitToViewBox::resetPreserveAspectRatio):
        (WebCore::SVGFitToViewBox::preserveAspectRatioString const):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        (WebCore::SVGImageElement::registerAttributes):
        (WebCore::SVGImageElement::parseAttribute):
        * svg/SVGImageElement.h:
        * svg/SVGMarkerElement.h:
        * svg/SVGPatternElement.h:
        * svg/SVGPreserveAspectRatio.h:
        (WebCore::SVGPreserveAspectRatio::create):
        (WebCore::SVGPreserveAspectRatio::align const):
        (WebCore::SVGPreserveAspectRatio::setAlign):
        (WebCore::SVGPreserveAspectRatio::meetOrSlice const):
        (WebCore::SVGPreserveAspectRatio::setMeetOrSlice):
        (WebCore::SVGPreserveAspectRatio::align): Deleted.
        (WebCore::SVGPreserveAspectRatio::meetOrSlice): Deleted.
        (WebCore::SVGPreserveAspectRatio::SVGPreserveAspectRatio): Deleted.
        * svg/SVGSVGElement.h:
        * svg/SVGStringList.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGViewSpec.h:
        * svg/properties/SVGAnimatedPropertyAccessorImpl.h:
        * svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
        * svg/properties/SVGAnimatedPropertyImpl.h:
        * svg/properties/SVGAnimationDiscreteFunctionImpl.h:
        * svg/properties/SVGAttributeRegistry.h:
        * svg/properties/SVGPropertyOwnerRegistry.h:
        (WebCore::SVGPropertyOwnerRegistry::registerProperty):

2019-03-19  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Remove the SVG property tear off objects of SVGAnimatedRect
        https://bugs.webkit.org/show_bug.cgi?id=195949

        Reviewed by Simon Fraser.

        SVGRect is an SVG type, so we need to introduce two classes to represent
        it and its animated property SVGAnimatedRect.

        -- SVGValueProperty: It is derived from SVGProperty and it will be the 
           base class of all the SVG type based properties. It is basically a
           RefCounted object with m_value member. For SVGRect, m_value will be
           of type FloatRect.

        -- SVGAnimatedValueProperty: It is derived from SVGAnimatedProperty and
           it will be the base class of all the animated SVG type based properties.
           It is RefCounted object with two RefCounted members: baseVal and animVal.
           These two members are of type SVGValueProperty. For SVGAnimatedRect,
           baseVal and animVal will be of type SVGRect.

        SVGAnimatedValueProperty will be responsible for:

        1) Providing access to its baseVal and animVal. Note the same interface
           is used internally and used by the DOM.

        2) Managing the animation of the property by starting and stopping it.

        3) Coordinating the changes in its baseVal and animVal with the owner
           element.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAnimatedRect.cpp: Removed.
        * svg/SVGAnimatedRect.h: Removed.
        * svg/SVGAnimatorFactory.h:
        (WebCore::SVGAnimatorFactory::create):
        * svg/SVGAttributeAnimationController.cpp:
        (WebCore::SVGAttributeAnimationController::calculateAnimatedValue):
        This is a bug from r243036. The <set> can be the tag of m_animationElement
        not m_targetElement.
        * svg/SVGAttributeAnimationController.h:
        * svg/SVGAttributeAnimationControllerBase.h:
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::SVGFitToViewBox):
        (WebCore::SVGFitToViewBox::registerAttributes):
        (WebCore::SVGFitToViewBox::setViewBox):
        (WebCore::SVGFitToViewBox::resetViewBox):
        * svg/SVGFitToViewBox.h:
        (WebCore::SVGFitToViewBox::viewBox const):
        (WebCore::SVGFitToViewBox::viewBoxAnimated):
        (WebCore::SVGFitToViewBox::viewBoxString const):
        * svg/SVGMarkerElement.h:
        * svg/SVGPatternElement.h:
        * svg/SVGRect.h:
        (WebCore::SVGRect::create):
        (WebCore::SVGRect::x):
        (WebCore::SVGRect::setX):
        (WebCore::SVGRect::y):
        (WebCore::SVGRect::setY):
        (WebCore::SVGRect::width):
        (WebCore::SVGRect::setWidth):
        (WebCore::SVGRect::height):
        (WebCore::SVGRect::setHeight):
        (WebCore::SVGRect::SVGRect): Deleted.
        * svg/SVGSVGElement.cpp:
        (WebCore::checkIntersectionWithoutUpdatingLayout):
        (WebCore::checkEnclosureWithoutUpdatingLayout):
        * svg/SVGSVGElement.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::SVGViewSpec):
        * svg/SVGViewSpec.h:
        * svg/properties/SVGAnimatedPropertyAccessorImpl.h:
        * svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
        * svg/properties/SVGAnimatedPropertyImpl.h:
        * svg/properties/SVGAnimatedValueProperty.h: Added.
        (WebCore::SVGAnimatedValueProperty::create):
        (WebCore::SVGAnimatedValueProperty::~SVGAnimatedValueProperty):
        (WebCore::SVGAnimatedValueProperty::setBaseValInternal):
        (WebCore::SVGAnimatedValueProperty::baseVal const):
        (WebCore::SVGAnimatedValueProperty::baseVal):
        (WebCore::SVGAnimatedValueProperty::setAnimVal):
        (WebCore::SVGAnimatedValueProperty::animVal const):
        (WebCore::SVGAnimatedValueProperty::animVal):
        (WebCore::SVGAnimatedValueProperty::currentValue const):
        (WebCore::SVGAnimatedValueProperty::SVGAnimatedValueProperty):
        (WebCore::SVGAnimatedValueProperty::ensureAnimVal):
        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
        (WebCore::SVGAnimationRectFunction::progress):
        * svg/properties/SVGAttributeRegistry.h:
        * svg/properties/SVGPropertyOwnerRegistry.h:
        (WebCore::SVGPropertyOwnerRegistry::registerProperty):
        * svg/properties/SVGValueProperty.h: Added.
        (WebCore::SVGValueProperty::create):
        (WebCore::SVGValueProperty::value const):
        (WebCore::SVGValueProperty::setValue):
        (WebCore::SVGValueProperty::value):
        (WebCore::SVGValueProperty::SVGValueProperty):

2019-03-19  John Wilander  <wilander@apple.com>

        Resource Load Statistics (experimental): Clear non-cookie website data for sites that have been navigated to, with link decoration, by a prevalent resource
        https://bugs.webkit.org/show_bug.cgi?id=195923
        <rdar://problem/49001272>

        Reviewed by Alex Christensen.

        Adds a new experimental feature.

        Test: http/tests/resourceLoadStatistics/website-data-removal-for-site-navigated-to-with-link-decoration.html

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setIsITPFirstPartyWebsiteDataRemovalEnabled):
        (WebCore::RuntimeEnabledFeatures::isITPFirstPartyWebsiteDataRemovalEnabled const):

2019-03-19  Ryosuke Niwa  <rniwa@webkit.org>

        Reparenting during a mutation event inside appendChild could result in a circular DOM tree
        https://bugs.webkit.org/show_bug.cgi?id=192825

        Reviewed by Zalan Bujtas.

        The bug was caused by appendChildWithoutPreInsertionValidityCheck, insertBefore and replaceChild
        checking the circular dependency against newChild instead of targets even though when newChild
        is a document fragment, appendChildWithoutPreInsertionValidityCheck inserts the children of
        the document fragment. Fixed the bug by checking the circular dependency against each target child.

        Also fixed the bug that checkAcceptChildGuaranteedNodeTypes was not considering shadow inclusive
        ancestors or template host elements.

        Tests: fast/dom/append-child-with-mutation-event-removal-and-circular-insertion.html
               fast/dom/append-child-with-mutation-event-removal-and-circular-shadow-insertion.html
               fast/dom/append-child-with-mutation-event-removal-and-circular-template-insertion.html
               fast/dom/insert-child-with-mutation-event-removal-and-circular-insertion.html
               fast/dom/insert-child-with-mutation-event-removal-and-circular-shadow-insertion.html
               fast/dom/insert-child-with-mutation-event-removal-and-circular-template-insertion.html
               fast/dom/replace-child-with-mutation-event-removal-and-circular-insertion.html
               fast/dom/replace-child-with-mutation-event-removal-and-circular-shadow-insertion.html
               fast/dom/replace-child-with-mutation-event-removal-and-circular-template-insertion.html

        * dom/ContainerNode.cpp:
        (WebCore::checkAcceptChildGuaranteedNodeTypes):
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChildWithoutPreInsertionValidityCheck):

2019-03-19  Brent Fulgham  <bfulgham@apple.com>

        Add default prompt implementation for the Storage Access API
        https://bugs.webkit.org/show_bug.cgi?id=195866
        <rdar://problem/45150009>

        Reviewed by Chris Dumez.

        * en.lproj/Localizable.strings: Update with new strings used by the
        Storage Access API dialog.

2019-03-19  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Create sps/pps for all frames to please libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=195677

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/mediastream/libwebrtc/GStreamerVideoEncoder.cpp:
        (gst_webrtc_video_encoder_set_format):
        (register_known_encoder):
        (setup_x264enc):
        (setup_openh264enc):
        (setup_omxh264enc):
        (set_bitrate_bit_per_sec):
        (gst_webrtc_video_encoder_class_init):

2019-03-19  Timothy Hatcher  <timothy@apple.com>

        REGRESSION (r239904): Update dark mode defines in a few places that got missed.
        https://bugs.webkit.org/show_bug.cgi?id=195958

        Reviewed by Megan Gardner.

        * DerivedSources.make: Support HAVE_OS_DARK_MODE_SUPPORT in html.css.
        * css/html.css: Update dark mode defines.
        * page/FrameView.cpp:
        (WebCore::FrameView::updateBackgroundRecursively): Ditto.

2019-03-19  Chris Dumez  <cdumez@apple.com>

        media/track/track-in-band-style.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=195922

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processCueAttributes):
        Small optimization: some of the if checks were missing their "continue;"
        statement. This would cause us to keep checking following keys even though
        we already got a match.

2019-03-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Build cleanly with GCC 9
        https://bugs.webkit.org/show_bug.cgi?id=195920

        Reviewed by Chris Dumez.

        WebKit triggers three new GCC 9 warnings:

        """
        -Wdeprecated-copy, implied by -Wextra, warns about the C++11 deprecation of implicitly
        declared copy constructor and assignment operator if one of them is user-provided.
        """

        Solution is to either add a copy constructor or copy assignment operator, if required, or
        else remove one if it is redundant.

        """
        -Wredundant-move, implied by -Wextra, warns about redundant calls to std::move.
        -Wpessimizing-move, implied by -Wall, warns when a call to std::move prevents copy elision.
        """

        These account for most of this patch. Solution is to just remove the bad WTFMove().

        Additionally, -Wclass-memaccess has been enhanced to catch a few cases that GCC 8 didn't.
        These are solved by casting nontrivial types to void* before using memcpy. (Of course, it
        would be safer to not use memcpy on nontrivial types, but that's too complex for this
        patch. Searching for memcpy used with static_cast<void*> will reveal other cases to fix.)

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::getSupportedConfiguration):
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::createSession):
        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::listDirectoryWithMetadata):
        (WebCore::toFileSystemEntries):
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::fromFormData):
        (WebCore::FetchBody::bodyAsFormData const):
        (WebCore::FetchBody::take):
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::create):
        (WebCore::FetchRequest::clone):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::create):
        (WebCore::FetchResponse::redirect):
        (WebCore::FetchResponse::clone):
        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::deleteFunction):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBDatabaseIdentifier.h:
        (WebCore::IDBDatabaseIdentifier::decode):
        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyData::decode):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        * Modules/indexeddb/IDBValue.h:
        (WebCore::IDBValue::decode):
        * Modules/indexeddb/shared/IDBError.cpp:
        (WebCore::IDBError::operator=): Deleted.
        * Modules/indexeddb/shared/IDBError.h:
        * Modules/indexeddb/shared/IDBResultData.h:
        (WebCore::IDBResultData::decode):
        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::create):
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::addSourceBuffer):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::iceServersFromConfiguration):
        (WebCore::RTCPeerConnection::certificatesFromConfiguration):
        (WebCore::certificateTypeFromAlgorithmIdentifier):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::getStats):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::addTrack):
        (WebCore::LibWebRTCPeerConnectionBackend::addUnifiedPlanTransceiver):
        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::create):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createMediaElementSource):
        (WebCore::AudioContext::createMediaStreamSource):
        (WebCore::AudioContext::createScriptProcessor):
        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::create):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::tryToOpenDatabaseBackend):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::retryCanEstablishDatabase):
        * Modules/webdatabase/SQLResultSetRowList.cpp:
        (WebCore::SQLResultSetRowList::item const):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::create):
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::rangeForNodeContents):
        (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets):
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::create):
        (WebCore::KeyframeEffect::backingAnimationForCompositedRenderer const):
        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::JSCustomElementInterface::constructElementWithFallback):
        * bindings/js/JSDOMConvertVariadic.h:
        (WebCore::VariadicConverter::convert):
        (WebCore::convertVariadicArguments):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readDOMPointInit):
        (WebCore::transferArrayBuffers):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallbackImplementationContent):
        * bindings/scripts/test/JS/JSTestCallbackFunction.cpp:
        (WebCore::JSTestCallbackFunction::handleEvent):
        * bindings/scripts/test/JS/JSTestCallbackFunctionRethrow.cpp:
        (WebCore::JSTestCallbackFunctionRethrow::handleEvent):
        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        (WebCore::JSTestCallbackInterface::callbackWithAReturnValue):
        (WebCore::JSTestCallbackInterface::callbackThatRethrowsExceptions):
        (WebCore::JSTestCallbackInterface::callbackThatSkipsInvokeCheck):
        (WebCore::JSTestCallbackInterface::callbackWithThisObject):
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::getStringList):
        (WebCore::ContentExtensions::loadTrigger):
        (WebCore::ContentExtensions::loadEncodedRules):
        (WebCore::ContentExtensions::parseRuleList):
        * crypto/SubtleCrypto.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        * crypto/gcrypt/CryptoAlgorithmHMACGCrypt.cpp:
        (WebCore::calculateSignature):
        * crypto/keys/CryptoKeyEC.cpp:
        (WebCore::CryptoKeyEC::exportJwk const):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedTransform):
        (WebCore::ComputedStyleExtractor::valueForShadow):
        (WebCore::ComputedStyleExtractor::valueForFilter):
        (WebCore::specifiedValueForGridTrackSize):
        (WebCore::valueForGridTrackList):
        (WebCore::valueForGridPosition):
        (WebCore::willChangePropertyValue):
        (WebCore::fontVariantLigaturesPropertyValue):
        (WebCore::fontVariantNumericPropertyValue):
        (WebCore::fontVariantEastAsianPropertyValue):
        (WebCore::touchActionFlagsToCSSValue):
        (WebCore::renderTextDecorationFlagsToCSSValue):
        (WebCore::renderEmphasisPositionFlagsToCSSValue):
        (WebCore::speakAsToCSSValue):
        (WebCore::hangingPunctuationToCSSValue):
        (WebCore::fillRepeatToCSSValue):
        (WebCore::fillSizeToCSSValue):
        (WebCore::counterToCSSValue):
        (WebCore::fontVariantFromStyle):
        (WebCore::fontSynthesisFromStyle):
        (WebCore::shapePropertyValue):
        (WebCore::paintOrder):
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        (WebCore::ComputedStyleExtractor::getCSSPropertyValuesFor2SidesShorthand):
        (WebCore::ComputedStyleExtractor::getCSSPropertyValuesFor4SidesShorthand):
        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::matchingFacesExcludingPreinstalledFonts):
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::image):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::rules):
        * css/DOMMatrixReadOnly.cpp:
        (WebCore::DOMMatrixReadOnly::parseStringIntoAbstractMatrix):
        * css/FontFace.cpp:
        (WebCore::FontFace::create):
        * css/FontVariantBuilder.cpp:
        (WebCore::computeFontVariant):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::removeProperty):
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::strokeDashArrayToCSSValueList):
        (WebCore::ComputedStyleExtractor::adjustSVGPaintForCurrentColor const):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertReflection):
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::create):
        (WebCore::WebKitCSSMatrix::multiply const):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontVariationSettings):
        (WebCore::consumeBasicShapePath):
        (WebCore::consumeImplicitGridAutoFlow):
        * cssjit/StackAllocator.h:
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * dom/Document.cpp:
        (WebCore::Document::cloneNodeInternal):
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::cloneNodeInternal):
        * dom/Element.cpp:
        (WebCore::Element::setAttributeNode):
        (WebCore::Element::setAttributeNodeNS):
        (WebCore::Element::removeAttributeNode):
        (WebCore::Element::parseAttributeName):
        (WebCore::Element::animate):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::disentanglePorts):
        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::nextNode):
        (WebCore::NodeIterator::previousNode):
        * dom/Range.cpp:
        (WebCore::Range::processContents):
        (WebCore::processContentsBetweenOffsets):
        (WebCore::processAncestorsAndTheirSiblings):
        * dom/RangeBoundaryPoint.h:
        * dom/ScriptDisallowedScope.h:
        (WebCore::ScriptDisallowedScope::operator=):
        * dom/Text.cpp:
        (WebCore::Text::splitText):
        * dom/TextDecoder.cpp:
        (WebCore::TextDecoder::create):
        (WebCore::TextDecoder::decode):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertBlockPlaceholder):
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
        * editing/Editing.cpp:
        (WebCore::createTabSpanElement):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::styleAtSelectionStart):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::rangeFromLocationAndLength):
        * editing/VisibleSelection.cpp:
        (WebCore::makeSearchRange):
        * editing/markup.cpp:
        (WebCore::styleFromMatchedRulesAndInlineDecl):
        (WebCore::createFragmentForInnerOuterHTML):
        (WebCore::createContextualFragment):
        * html/FormController.cpp:
        (WebCore::deserializeFormControlState):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::captureStream):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerCreateResourceLoader):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::createForJSConstructor):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::createElementRenderer):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::createSharedCellStyle):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::insertCell):
        * html/ImageData.cpp:
        (WebCore::ImageData::create):
        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::transferToImageBitmap):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::createLinearGradient):
        (WebCore::CanvasRenderingContext2DBase::createRadialGradient):
        * html/canvas/OESVertexArrayObject.cpp:
        (WebCore::OESVertexArrayObject::createVertexArrayOES):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::createBuffer):
        (WebCore::WebGLRenderingContextBase::createFramebuffer):
        (WebCore::WebGLRenderingContextBase::createTexture):
        (WebCore::WebGLRenderingContextBase::createProgram):
        (WebCore::WebGLRenderingContextBase::createRenderbuffer):
        (WebCore::WebGLRenderingContextBase::createShader):
        (WebCore::WebGLRenderingContextBase::getContextAttributes):
        (WebCore::WebGLRenderingContextBase::getUniform):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerContainer::resolveCustomStyle):
        (WebCore::TextControlPlaceholderElement::resolveCustomStyle):
        * html/track/BufferedLineReader.cpp:
        (WebCore::BufferedLineReader::nextLine):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::getCueAsHTML):
        (WebCore::VTTCue::createCueRenderingTree):
        * html/track/WebVTTElement.cpp:
        (WebCore::WebVTTElement::cloneElementWithoutAttributesAndChildren):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::asCSSRuleList):
        (WebCore::InspectorStyle::buildObjectForStyle const):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildArrayForPseudoElements):
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildObjectForResourceResponse):
        * loader/FetchOptions.h:
        (WebCore::FetchOptions::decode):
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::requestResource):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::loadCache):
        (WebCore::ApplicationCacheStorage::manifestURLs):
        * loader/archive/mhtml/MHTMLParser.cpp:
        (WebCore::MHTMLParser::parseArchiveWithHeader):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules const):
        * page/DragController.cpp:
        (WebCore::documentFragmentFromDragData):
        * page/EventSource.cpp:
        (WebCore::EventSource::create):
        * page/PerformanceUserTiming.cpp:
        (WebCore::UserTiming::mark):
        (WebCore::UserTiming::measure):
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::decode):
        * page/scrolling/ScrollingConstraints.h:
        (WebCore::FixedPositionViewportConstraints::FixedPositionViewportConstraints):
        (WebCore::LayoutConstraints::LayoutConstraints): Deleted.
        * platform/Length.h:
        (WebCore::Length::Length):
        * platform/animation/TimingFunction.cpp:
        (WebCore::TimingFunction::createFromCSSText):
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::parseLicenseFormat):
        * platform/graphics/FloatPoint3D.h:
        * platform/graphics/Font.cpp:
        (WebCore::createAndFillGlyphPage):
        * platform/graphics/GLContext.cpp:
        (WebCore::GLContext::createContextForWindow):
        (WebCore::GLContext::createSharingContext):
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/HEVCUtilities.cpp:
        (WebCore::parseHEVCCodecParameters):
        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::loadImageFromGResource):
        (WebCore::loadMissingImageIconFromTheme):
        * platform/graphics/wayland/PlatformDisplayWayland.cpp:
        (WebCore::PlatformDisplayWayland::create):
        * platform/mediastream/MediaConstraints.h:
        (WebCore::MediaTrackConstraintSetMap::decode):
        * platform/mediastream/MediaStreamRequest.h:
        (WebCore::MediaStreamRequest::decode):
        * platform/mediastream/gstreamer/GStreamerVideoFrameLibWebRTC.cpp:
        (WebCore::GStreamerSampleFromLibWebRTCVideoFrame):
        * platform/mediastream/gstreamer/RealtimeIncomingAudioSourceLibWebRTC.cpp:
        (WebCore::RealtimeIncomingAudioSource::create):
        * platform/mediastream/gstreamer/RealtimeIncomingVideoSourceLibWebRTC.cpp:
        (WebCore::RealtimeIncomingVideoSource::create):
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::captureDeviceWithPersistentID):
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockMediaSample::createNonDisplayingCopy const):
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::createResourceHandle):
        * platform/network/CookieRequestHeaderFieldProxy.h:
        (WebCore::CookieRequestHeaderFieldProxy::decode):
        * platform/network/FormData.h:
        (WebCore::FormData::decode):
        * platform/network/MIMEHeader.cpp:
        (WebCore::MIMEHeader::parseHeader):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::create):
        * platform/network/soup/DNSResolveQueueSoup.cpp:
        (WebCore::DNSResolveQueueSoup::takeCompletionAndCancelHandlers):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):
        (WebCore::Shape::createBoxShape):
        * 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::BasicShapeRadius::BasicShapeRadius):
        * rendering/style/ContentData.cpp:
        (WebCore::ImageContentData::createContentRenderer const):
        (WebCore::TextContentData::createContentRenderer const):
        (WebCore::QuoteContentData::createContentRenderer const):
        * rendering/style/ContentData.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::createInlineFlowBox):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::createTextBox):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::createRootInlineBox):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::build):
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::build):
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::build):
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::build):
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::build):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::build):
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::build):
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::build):
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::build):
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::build):
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::build):
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::build):
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::build):
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::build):
        * svg/SVGTransformList.h:
        * svg/properties/SVGList.h:
        (WebCore::SVGList::initialize):
        (WebCore::SVGList::insertItemBefore):
        (WebCore::SVGList::replaceItem):
        (WebCore::SVGList::removeItem):
        (WebCore::SVGList::appendItem):
        * svg/properties/SVGListProperty.h:
        (WebCore::SVGListProperty::initializeValuesAndWrappers):
        (WebCore::SVGListProperty::insertItemBeforeValuesAndWrappers):
        (WebCore::SVGListProperty::replaceItemValuesAndWrappers):
        (WebCore::SVGListProperty::removeItemValues):
        (WebCore::SVGListProperty::appendItemValuesAndWrappers):
        * svg/properties/SVGPrimitiveList.h:
        * testing/Internals.cpp:
        (WebCore::Internals::elementRenderTreeAsText):
        (WebCore::parseFindOptions):
        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::resolveURL):
        * workers/Worker.cpp:
        (WebCore::Worker::create):
        * workers/service/ServiceWorkerJobData.h:
        (WebCore::ServiceWorkerJobData::decode):
        * xml/DOMParser.cpp:
        (WebCore::DOMParser::parseFromString):
        * xml/XPathExpression.cpp:
        (WebCore::XPathExpression::evaluate):

2019-03-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Provide $event in the console when paused on an event listener
        https://bugs.webkit.org/show_bug.cgi?id=188672

        Reviewed by Timothy Hatcher.

        Implement similiar methods/logic as to the way that `$exception` is set.

        * inspector/CommandLineAPIModuleSource.js:
        (CommandLineAPI):

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willHandleEvent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willHandleEventImpl):
        (WebCore::InspectorInstrumentation::didHandleEventImpl):

        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        * inspector/agents/InspectorDOMDebuggerAgent.h:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::willHandleEvent):
        (WebCore::InspectorDOMDebuggerAgent::didHandleEvent): Added.

2019-03-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: ScriptProfiler: lazily create the agent
        https://bugs.webkit.org/show_bug.cgi?id=195591
        <rdar://problem/48791756>

        Reviewed by Joseph Pecoraro.

        No change in functionality.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::createLazyAgents):

2019-03-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: DOMStorage: lazily create the agent
        https://bugs.webkit.org/show_bug.cgi?id=195588
        <rdar://problem/48791878>

        Reviewed by Joseph Pecoraro.

        No change in functionality.

        Make functions used by `CommandLineAPIHost` static so that an `InspectorDOMStorageAgent`
        doesn't need to be created to call them.

        * inspector/agents/InspectorDOMStorageAgent.h:
        * inspector/agents/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::enable):
        (WebCore::InspectorDOMStorageAgent::disable):
        (WebCore::InspectorDOMStorageAgent::storageId):
        (WebCore::InspectorDOMStorageAgent::didDispatchDOMStorageEvent):
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        (WebCore::InspectorDOMStorageAgent::~InspectorDOMStorageAgent): Deleted.

        * inspector/CommandLineAPIHost.h:
        (WebCore::CommandLineAPIHost::init):
        * inspector/CommandLineAPIHost.cpp:
        (WebCore::CommandLineAPIHost::disconnect):
        (WebCore::CommandLineAPIHost::storageId):

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::createLazyAgents):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):

2019-03-19  Youenn Fablet  <youenn@apple.com>

        REGRESSION: Layout Test http/tests/security/cross-origin-indexeddb.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=195779

        Reviewed by Chris Dumez.

        When requesting space, we might delay execution of the task.
        In such a case, a task to close the database might be done before the task continues.
        Check that the database is not closing to continue the task.
        This should ensure that the cross thread queue is not already killed.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::requestSpace):

2019-03-19  Zalan Bujtas  <zalan@apple.com>

        RenderElement::startAnimation should take const Animation&
        https://bugs.webkit.org/show_bug.cgi?id=195929

        Reviewed by Daniel Bates.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::applyPendingAcceleratedActions):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::startAnimation):
        (WebCore::KeyframeAnimation::endAnimation):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::startAnimation):
        (WebCore::RenderElement::animationFinished):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::startAnimation):
        (WebCore::RenderLayerModelObject::animationFinished):
        * rendering/RenderLayerModelObject.h:

2019-03-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Heap: lazily create the agent
        https://bugs.webkit.org/show_bug.cgi?id=195590
        <rdar://problem/48791750>

        Reviewed by Joseph Pecoraro.

        No change in functionality.

        * inspector/agents/page/PageHeapAgent.cpp:
        (WebCore::PageHeapAgent::disable):
        * inspector/agents/WebHeapAgent.h:
        * inspector/agents/WebHeapAgent.cpp:
        (WebCore::WebHeapAgent::WebHeapAgent):
        (WebCore::WebHeapAgent::enable): Added.
        (WebCore::WebHeapAgent::disable):

        * inspector/agents/page/PageConsoleAgent.h:
        * inspector/agents/page/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::PageConsoleAgent):
        * inspector/agents/WebConsoleAgent.h:
        * inspector/agents/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::WebConsoleAgent):
        * inspector/agents/worker/WorkerConsoleAgent.h:
        * inspector/agents/worker/WorkerConsoleAgent.cpp:
        (WebCore::WorkerConsoleAgent::WorkerConsoleAgent):

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::createLazyAgents):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::createLazyAgents):

2019-03-19  Simon Fraser  <simon.fraser@apple.com>

        Fix GraphicsLayer-related crashes after r243129
        https://bugs.webkit.org/show_bug.cgi?id=195953

        Reviewed by Dean Jackson.

        Extending the lifetime of GraphicsLayers by referencing them in the scrolling tree (r243129)
        revealed a bug where RenderLayerCompositor was failing to clear itself as the client of
        GraphicsLayers that it owned, causing crashes.

        Fix by using the GraphicsLayer::unparentAndClear() helper to clean up all the GraphicsLayers
        owned by RenderLayerCompositor.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::~RenderLayerCompositor):
        * rendering/RenderLayerCompositor.h:

2019-03-19  Simon Fraser  <simon.fraser@apple.com>

        [Async overflow] Handle positioned nodes in a few more places
        https://bugs.webkit.org/show_bug.cgi?id=195946

        Reviewed by Zalan Bujtas.

        When I added support for positioned nodes in the scrolling tree I missed handling
        the ScrollCoordinationRole::Positioning in a few places.

        I wasn't able to come up with a test for this; when a positioned node toggles between
        tiled and non-tiled, hitting the code in didChangePlatformLayerForLayer(), we already
        update the node with the new layer.

        * rendering/RenderLayer.cpp:
        (WebCore::outputPaintOrderTreeRecursive): Logging.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::operator<<): Logging.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::didChangePlatformLayerForLayer): Update the node's layer.
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayer): Handle detaching of this node type.

2019-03-19  Alex Christensen  <achristensen@webkit.org>

        Make WTFLogChannelState and WTFLogLevel enum classes
        https://bugs.webkit.org/show_bug.cgi?id=195904

        Reviewed by Eric Carlson.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::removeSamplesFromTrackBuffer):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::OnStatsDelivered):
        (WebCore::LibWebRTCMediaEndpoint::statsLogInterval const):
        * dom/Document.cpp:
        (WebCore::messageLevelFromWTFLogLevel):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocument::FTPDirectoryDocument):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::seekTask):
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        (WebCore::HTMLMediaElement::sourceWasAdded):
        (WebCore::HTMLMediaElement::sourceWasRemoved):
        * inspector/agents/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::getLoggingChannels):
        (WebCore::channelConfigurationForString):
        * platform/Logging.cpp:
        (WebCore::isLogChannelEnabled):
        (WebCore::setLogChannelToAccumulate):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::initializePeerConnectionFactoryAndThreads):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::compositingLogEnabled):

2019-03-19  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r243058): [GStreamer] 3 tests now timing out
        https://bugs.webkit.org/show_bug.cgi?id=195888

        Reviewed by Xabier Rodriguez-Calvar.

        A breaking change was introduced in r243058. Now on-disk-buffering
        is disabled when the reported Content-Length is 0 or not present
        at all. This broke the progress event logic in didLoadProgress()
        because leading to progress events not being fired as expected.

        The proposed solution is to make webkitwebsrc notify the player
        every time the network process receives data from the network. So
        the player can now easily determine if the load progressed by
        checking the reported statistics.

        No new tests, existing media tests cover this change.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::didLoadingProgress const):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (CachedResourceStreamingClient::dataReceived):

2019-03-19  Alicia Boya García  <aboya@igalia.com>

        [MSE] Use tolerance in eraseBeginTime
        https://bugs.webkit.org/show_bug.cgi?id=195911

        Reviewed by Jer Noble.

        https://bugs.webkit.org/show_bug.cgi?id=190085 introduced tolerance
        when erasing frames during the Coded Frame Processing algorithm in
        such a way that, in files with less than perfect timestamps, a frame
        existing before after the current append is not erased accidentally
        due to small overlaps.

        This patch takes care of the opposite problem: we don't want an old
        frame being accidentally NOT erased by a new one with the same
        timestamps just because these overlaps make
        highestPresentationTimestamp very slightly higher than the frame PTS.

        This bug in practice causes some frames of the old quality to not be
        erased when the new quality is appended, resulting in some seemingly
        still frames from a different quality appearing at some points during
        WebM video in presence of quality changes.

        This bug can be reduced to this minimal test case that illustrates the
        timestamp imprecission of a typical WebM file:

        function sampleRun(generation) {
            return concatenateSamples([
                makeASample(     0,      0, 166667, 1000000, 1, SAMPLE_FLAG.SYNC, generation),
                makeASample(167000, 167000, 166667, 1000000, 1, SAMPLE_FLAG.NONE, generation),
                makeASample(333000, 333000, 166667, 1000000, 1, SAMPLE_FLAG.SYNC, generation), // overlaps previous frame
                makeASample(500000, 500000, 166667, 1000000, 1, SAMPLE_FLAG.NONE, generation),
            ]);
        }

        After appending this twice it would be expected that the second
        generation takes fully over the first, since the timestamps are
        completely the same. Due to the bug, sync frames with an overlap, like
        the third one in that list, actually persist from the first
        generation, due to lack of tolerance when comparing the start of a new
        frame with highestPresentationTimestamp.

        This patch introduces the tolerance in that case too to fix this
        problem.

        Test: media/media-source/media-source-append-twice-overlapping-sync-frame.html

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):

2019-03-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed GTK build fix
        https://bugs.webkit.org/show_bug.cgi?id=195863
        <rdar://problem/49006248>

        Patch by Diego Pino.

        * svg/SVGTests.h:

2019-03-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r243132.

        Broke GTK build

        Reverted changeset:

        "Make WTFLogChannelState and WTFLogLevel enum classes"
        https://bugs.webkit.org/show_bug.cgi?id=195904
        https://trac.webkit.org/changeset/243132

2019-03-19  Antti Koivisto  <antti@apple.com>

        Layer with no backing store should still hit-test over a scroller
        https://bugs.webkit.org/show_bug.cgi?id=195378
        <rdar://problem/48652078>

        Reviewed by Simon Fraser.

        Tests: fast/scrolling/ios/overflow-scroll-overlap-3.html
               fast/scrolling/ios/overflow-scroll-overlap-4.html

        Move collecting event region from paint to compositing update time.
        This solves a number of problems including regions for non-painting layers.

        * platform/graphics/GraphicsLayer.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):

        Use the existing visibleToHitTesting() helper.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):

        Use flag for event region collecting, don't paint content.

        (WebCore::RenderLayer::paintList):

        We can bail out immediately if there is no overflow.

        (WebCore::RenderLayer::paintForegroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase):
        (WebCore::RenderLayer::collectEventRegionForFragments):

        Move to a separate function.

        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):

        Update event region on backing configuration update. This is called after anything interesting changes on a sublayer.

        (WebCore::RenderLayerBacking::updateEventRegion):
        (WebCore::RenderLayerBacking::paintIntoLayer):
        * rendering/RenderLayerBacking.h:

2019-03-18  Alex Christensen  <achristensen@webkit.org>

        Make WTFLogChannelState and WTFLogLevel enum classes
        https://bugs.webkit.org/show_bug.cgi?id=195904

        Reviewed by Eric Carlson.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::removeSamplesFromTrackBuffer):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::OnStatsDelivered):
        (WebCore::LibWebRTCMediaEndpoint::statsLogInterval const):
        * dom/Document.cpp:
        (WebCore::messageLevelFromWTFLogLevel):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocument::FTPDirectoryDocument):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::seekTask):
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        (WebCore::HTMLMediaElement::sourceWasAdded):
        (WebCore::HTMLMediaElement::sourceWasRemoved):
        * inspector/agents/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::getLoggingChannels):
        (WebCore::channelConfigurationForString):
        * platform/Logging.cpp:
        (WebCore::isLogChannelEnabled):
        (WebCore::setLogChannelToAccumulate):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::initializePeerConnectionFactoryAndThreads):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::compositingLogEnabled):

2019-03-18  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Remove the SVG property tear off objects for SVGStringList
        https://bugs.webkit.org/show_bug.cgi?id=195863

        Reviewed by Simon Fraser.

        SVGStringList is not animated list. So we need to introduce two new classes:

        -- SVGProperty: This will be the base of all the non-animated properties.
           Like the SVGAnimatedProperty, SVGProperty will be registered with the
           attribute name in SVGPropertyRegistery. It will also commit changes
           to the reflecting attribute. And it will provide a synchronize string
           for lazy attribute update.

        -- SVGList: It will be the base of all the list properties. It can hold
           primitive types or SVG types. In this patch primitive types will be 
           supported only. To do that, a superclass called SVGPrimitiveList is
           added. Its items are of primitive type such as String type.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::synchronizeAnimatedSVGAttribute const):
        (WebCore::SVGElement::commitPropertyChange):
        * svg/SVGElement.h:
        * svg/SVGStringList.h:
        * svg/SVGStringListValues.cpp: Removed.
        * svg/SVGStringListValues.h: Removed.
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::SVGTests):
        (WebCore::SVGTests::isKnownAttribute):
        (WebCore::SVGTests::isValid const):
        (WebCore::SVGTests::parseAttribute):
        (WebCore::SVGTests::registerAttributes): Deleted.
        (WebCore::SVGTests::requiredFeatures): Deleted.
        (WebCore::SVGTests::requiredExtensions): Deleted.
        (WebCore::SVGTests::systemLanguage): Deleted.
        * svg/SVGTests.h:
        (WebCore::SVGTests::requiredFeatures):
        (WebCore::SVGTests::requiredExtensions):
        (WebCore::SVGTests::systemLanguage):
        (): Deleted.
        * svg/SVGTests.idl:
        * svg/SVGTextPositioningElement.h:
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::SVGViewElement):
        (WebCore::SVGViewElement::parseAttribute):
        (WebCore::SVGViewElement::viewTarget): Deleted.
        * svg/SVGViewElement.h:
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        * svg/properties/SVGAnimatedPrimitiveProperty.h:
        (WebCore::SVGAnimatedPrimitiveProperty::setBaseVal):
        * svg/properties/SVGAnimatedProperty.cpp:
        (WebCore::SVGAnimatedProperty::commitPropertyChange):
        * svg/properties/SVGAnimatedProperty.h:
        * svg/properties/SVGAttributeRegistry.h:
        * svg/properties/SVGList.h: Added.
        (WebCore::SVGList::numberOfItems const):
        (WebCore::SVGList::clear):
        (WebCore::SVGList::getItem):
        (WebCore::SVGList::initialize):
        (WebCore::SVGList::insertItemBefore):
        (WebCore::SVGList::replaceItem):
        (WebCore::SVGList::removeItem):
        (WebCore::SVGList::appendItem):
        (WebCore::SVGList::items):
        (WebCore::SVGList::items const):
        (WebCore::SVGList::size const):
        (WebCore::SVGList::isEmpty const):
        (WebCore::SVGList::clearItems):
        (WebCore::SVGList::canAlterList const):
        (WebCore::SVGList::canGetItem):
        (WebCore::SVGList::canReplaceItem):
        (WebCore::SVGList::canRemoveItem):
        (WebCore::SVGList::detachItems):
        * svg/properties/SVGMemberAccessor.h:
        (WebCore::SVGMemberAccessor::matches const):
        * svg/properties/SVGPrimitiveList.h: Added.
        * svg/properties/SVGProperty.h:
        (WebCore::SVGProperty::isAttached const):
        (WebCore::SVGProperty::attach):
        (WebCore::SVGProperty::detach):
        (WebCore::SVGProperty::contextElement const):
        (WebCore::SVGProperty::commitChange):
        (WebCore::SVGProperty::access const):
        (WebCore::SVGProperty::isReadOnly const):
        (WebCore::SVGProperty::isDirty const):
        (WebCore::SVGProperty::setDirty):
        (WebCore::SVGProperty::synchronize):
        (WebCore::SVGProperty::valueAsString const):
        (WebCore::SVGProperty::SVGProperty):
        * svg/properties/SVGPropertyAccessor.h: Added.
        * svg/properties/SVGPropertyAccessorImpl.h: Added.
        * svg/properties/SVGPropertyOwner.h:
        (WebCore::SVGPropertyOwner::commitPropertyChange):
        * svg/properties/SVGPropertyOwnerRegistry.h:
        (WebCore::SVGPropertyOwnerRegistry::registerProperty):
        * svg/properties/SVGPropertyRegistry.h:
        * svg/properties/SVGStaticListPropertyTearOff.h: Removed.

2019-03-18  Simon Fraser  <simon.fraser@apple.com>

        Unreviewed followup to r243126.

        LayerRepresentation operator=() needs to copy m_graphicsLayer now that it doesn't
        share a pointer with m_typelessPlatformLayer. Also make the LayerRepresentation construction
        from a GraphiscLayer* explicit.

        * page/scrolling/ScrollingStateNode.h:
        (WebCore::LayerRepresentation::operator=):
        (WebCore::LayerRepresentation::toRepresentation const):

2019-03-18  Simon Fraser  <simon.fraser@apple.com>

        Scrolling state nodes should hold references to GraphicsLayers
        https://bugs.webkit.org/show_bug.cgi?id=195844
        <rdar://problem/48949634>

        Reviewed by Tim Horton.

        GraphicsLayers are refcounted, and the scrolling tree keeps GraphicsLayer pointers,
        so for safely the scrolling tree should store RefPtr<GraphicsLayer> instead.

        I removed the union (since it would be weird with a RefPtr and raw pointer). This code
        should probably use WTF::Variant<> in future.

        * page/scrolling/ScrollingStateNode.h:
        (WebCore::LayerRepresentation::LayerRepresentation):
        (WebCore::LayerRepresentation::operator GraphicsLayer* const):

2019-03-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r243092 and r243096.
        https://bugs.webkit.org/show_bug.cgi?id=195926

        Caused assertions in tests (Requested by smfr on #webkit).

        Reverted changesets:

        "Layer with no backing store should still hit-test over a
        scroller"
        https://bugs.webkit.org/show_bug.cgi?id=195378
        https://trac.webkit.org/changeset/243092

        "Try to fix Windows build."
        https://trac.webkit.org/changeset/243096

2019-03-18  Megan Gardner  <megan_gardner@apple.com>

        Smart Insert for paragraphs.
        https://bugs.webkit.org/show_bug.cgi?id=194880

        Reviewed by Ryosuke Niwa.

        Add additional newlines to maintain spacing around paragraphs.

        Tests: editing/pasteboard/smart-paste-paragraph-001.html
               editing/pasteboard/smart-paste-paragraph-002.html
               editing/pasteboard/smart-paste-paragraph-003.html
               editing/pasteboard/smart-paste-paragraph-004.html

        * dom/Document.cpp:
        (WebCore::Document::editingBehavior const):
        * dom/Document.h:

        Expose editing behaviour through document so that is can be access from the selection commands
        and allow the editing behaviour to be used.

        * editing/CompositeEditCommand.h:
        * editing/EditingBehavior.h:
        (WebCore::EditingBehavior::shouldSmartInsertDeleteParagraphs const):

        Only have editing insert paragraphs on iOS and in editing elements that support multiple lines.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::shouldPerformSmartParagraphReplace const):
        (WebCore::ReplaceSelectionCommand::addNewLinesForSmartReplace):
        * editing/ReplaceSelectionCommand.h:

        Add addititional newlines when pasting full paragraphs to maintian two newlines between paragraphs
        if that is what the original document had. If there are not multiple lines between paragraphs, do not
        add additional new lines.

2019-03-18  Ryosuke Niwa  <rniwa@webkit.org>

        Reduce the size of Node::deref by eliminating an explicit parentNode check
        https://bugs.webkit.org/show_bug.cgi?id=195776

        Reviewed by Geoffrey Garen.

        This patch eliminates the nullity check of m_parentNode in Node::deref as well as the store to
        m_refCount in the case of invoking Node::removedLastRef() as done for RefCounted in r30042.
        Together, this patch shrinks WebCore's size by 46KB or ~0.7%.

        To do this, we take we take a similar approach as WTF::String by using the lowest bit of m_refCount
        to indicate whether a node has a parent or not. Regular ref-counting is done on the upper 31 bits.
        Node::setParentNode updates this flag, and Node::deref() would only `delete this` if m_refCount
        is identically equal to 0.

        For a Document, we set m_refCounted to 0 before in the case of non-zero m_referencingNodeCount
        since decrementReferencingNodeCount needs to be able to tell if there is an outstanding Ref/RefPtr
        or not when m_referencingNodeCount becomes 0.

        No new tests since there should be no behavioral change.

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        * dom/Document.h:
        (WebCore::Document::decrementReferencingNodeCount):
        * dom/Node.cpp:
        (WebCore::Node::Node): Moved the initialization of m_refCount to the member variable declaration.
        (WebCore::Node::~Node):
        (WebCore::Node::removedLastRef):
        * dom/Node.h:
        (WebCore::Node): Changed the type of m_refCount from signed int to uint32_t. It was changed from
        unsigned int to signed int back in r11492 but I don't think the signedness is needed.
        (WebCore::Node::ref): Increment the ref count by 2 (upper 31-bit).
        (WebCore::Node::deref): Implemented the optimization. This is what shrinks the WebCore binary size.
        (WebCore::Node::hasOneRef const):
        (WebCore::Node::refCount const): Ignore the lowest bit. Without this fix, the optimization in
        replaceChildrenWithFragment to avoid replacing the text node is disabled whenever there is a parent.
        (WebCore::Node::setParentNode): Sets the lowest bit to 1 if the node has a parent and 0 otherwise.

2019-03-18  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Remove the SVG property tear off objects for SVGAnimatedBoolean
        https://bugs.webkit.org/show_bug.cgi?id=195862

        Reviewed by Simon Fraser.

        -- SVGAnimatedBoolean will be defined as SVGAnimatedPrimitiveProperty<bool>.
        -- SVGAnimatedBooleanAccessor is added to access a member of this type.
        -- A function registerProperty() is added to SVGPropertyOwnerRegistry
           to register this type.
        -- SVGAnimatedBooleanAnimator is added to animate a member of this type.
        -- SVGAnimationBooleanFunction is added to handle the progress of this
           new type over a period of time.

        SVGAnimationDiscreteFunction is the base class of SVGAnimationBooleanFunction.
        It will be the base class of all the discrete animation function types:
        string, bool, enum and PreserveAspectRatio types.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAnimationElement.h:
        * svg/SVGAnimatorFactory.h:
        (WebCore::SVGAnimatorFactory::create):
        * svg/SVGClipPathElement.h:
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.h:
        * svg/SVGExternalResourcesRequired.cpp:
        (WebCore::SVGExternalResourcesRequired::SVGExternalResourcesRequired):
        (WebCore::SVGExternalResourcesRequired::parseAttribute):
        (WebCore::SVGExternalResourcesRequired::registerAttributes): Deleted.
        * svg/SVGExternalResourcesRequired.h:
        (WebCore::SVGExternalResourcesRequired::externalResourcesRequired const):
        (WebCore::SVGExternalResourcesRequired::externalResourcesRequiredAnimated):
        (WebCore::SVGExternalResourcesRequired::setExternalResourcesRequired): Deleted.
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::SVGFEConvolveMatrixElement):
        (WebCore::SVGFEConvolveMatrixElement::registerAttributes):
        (WebCore::SVGFEConvolveMatrixElement::parseAttribute):
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEImageElement.h:
        * svg/SVGFontElement.h:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.h:
        * svg/SVGGradientElement.h:
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.h:
        * svg/SVGPathElement.h:
        * svg/SVGPatternElement.h:
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.h:
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGTextContentElement.h:
        * svg/SVGUseElement.h:
        * svg/properties/SVGAnimatedPropertyAccessorImpl.h:
        * svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
        * svg/properties/SVGAnimatedPropertyImpl.h:
        * svg/properties/SVGAnimationDiscreteFunction.h: Added.
        (WebCore::SVGAnimationDiscreteFunction::SVGAnimationDiscreteFunction):
        (WebCore::SVGAnimationDiscreteFunction::progress):
        * svg/properties/SVGAnimationDiscreteFunctionImpl.h: Added.
        * svg/properties/SVGAttributeRegistry.h:
        * svg/properties/SVGPropertyOwnerRegistry.h:
        (WebCore::SVGPropertyOwnerRegistry::registerProperty):

2019-03-18  Simon Fraser  <simon.fraser@apple.com>

        Crash when reloading test with async overflow scrolling
        https://bugs.webkit.org/show_bug.cgi?id=195629
        <rdar://problem/48814045>

        Reviewed by Antoine Quint.

        RenderLayerCompositor::removeFromScrollCoordinatedLayers needs to pass the Positioning
        bit to make sure we remove RenderLayers added m_scrollingNodeToLayerMap for Positioning
        scrolling nodes.

        Fixes crashes seen in compositing/clipping/border-radius-async-overflow-non-stacking.html
        and scrollingcoordinator/scrolling-tree/remove-coordinated-frame.html.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::~RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::removeFromScrollCoordinatedLayers):

2019-03-18  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timeline: lazily create the agent
        https://bugs.webkit.org/show_bug.cgi?id=195865
        <rdar://problem/48965403>

        Reviewed by Joseph Pecoraro.

        No change in functionality.

        * inspector/agents/InspectorTimelineAgent.h:
        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::toggleScriptProfilerInstrument):
        (WebCore::InspectorTimelineAgent::toggleHeapInstrument):
        (WebCore::InspectorTimelineAgent::setFrameIdentifier):

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::startProfiling):
        (WebCore::InspectorInstrumentation::stopProfiling):
        (WebCore::InspectorInstrumentation::didRequestAnimationFrame):
        (WebCore::InspectorInstrumentation::didCancelAnimationFrame):

        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::inspectorScriptProfilerAgent const): Added.
        (WebCore::InstrumentingAgents::setInspectorScriptProfilerAgent): Added.
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::reset):

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::createLazyAgents):

2019-03-18  Darin Adler  <darin@apple.com>

        Cut down on use of StringBuffer, possibly leading toward removing it entirely
        https://bugs.webkit.org/show_bug.cgi?id=195870

        Reviewed by Daniel Bates.

        * dom/Document.cpp:
        (WebCore::canonicalizedTitle): Fixed all the problems mentioned in "FIXME".
        Made this a single function rather than a function template. Switch to
        StringBuilder instead of StringBuffer. Return the original string if the
        canonicalize operation doesn't change anything.
        (WebCore::Document::updateTitle): Updated for the change above.

        * platform/Length.cpp:
        (WebCore::newCoordsArray): Use createUninitialized instead of StringBuffer.
        Also got rid of unneeded use of upconvertedCharacters on a temporary string
        that we explicitly created with 16-bit characters. The performance of this
        function could be considerably simplified by not copying the original string
        at all, but didn't do that at this time.

        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::decode): Use createUninitialized instead of
        StringBuffer. Also renamed numChars to numCodeUnits to both switch to complete
        words and to be slightly more accurate.

        * rendering/RenderText.cpp:
        (WebCore::convertNoBreakSpace): Added.
        (WebCore::capitalize): Use Vector instead of StringBuffer. Simplify code by
        using convertNoBreakSpace function. Removed code that was using StringImpl
        directly for a tiny speed boost; if we want to optimize the performance of
        this function we would need to do more than that. Return the original string
        if it happens to already be capitalized.

2019-03-18  Timothy Hatcher  <timothy@apple.com>

        WKWebView.GetContentsShouldReturnAttributedString is crashing on iOS Simulator.
        https://bugs.webkit.org/show_bug.cgi?id=195916

        Reviewed by Tim Horton.

        * WebCore.xcodeproj/project.pbxproj: Make ColorIOS.h a private header.
        * platform/ios/ColorIOS.h: Export colorFromUIColor.

2019-03-18  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Define the type of SVGPropertyOwnerRegistry for all SVG elements
        https://bugs.webkit.org/show_bug.cgi?id=195859

        Reviewed by Simon Fraser.

        SVGPropertyOwnerRegistry will eventually replace SVGAttributeOwnerProxyImpl.

        * svg/SVGAElement.h:
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.h:
        * svg/SVGComponentTransferFunctionElement.h:
        (WebCore::SVGComponentTransferFunctionElement::attributeRegistry):
        (WebCore::SVGComponentTransferFunctionElement::isKnownAttribute):
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.h:
        * svg/SVGElement.h:
        * svg/SVGEllipseElement.h:
        * svg/SVGExternalResourcesRequired.h:
        (WebCore::SVGExternalResourcesRequired::isKnownAttribute):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.h:
        (WebCore::SVGFELightElement::attributeRegistry):
        (WebCore::SVGFELightElement::isKnownAttribute):
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::svgAttributeChanged):
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::isKnownAttribute):
        * svg/SVGFitToViewBox.h:
        (WebCore::SVGFitToViewBox::isKnownAttribute):
        * svg/SVGFontElement.h:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.h:
        * svg/SVGGeometryElement.h:
        (WebCore::SVGGeometryElement::isKnownAttribute):
        * svg/SVGGlyphRefElement.h:
        * svg/SVGGradientElement.h:
        (WebCore::SVGGradientElement::isKnownAttribute):
        * svg/SVGGraphicsElement.h:
        (WebCore::SVGGraphicsElement::isKnownAttribute):
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.h:
        * svg/SVGPathElement.h:
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.h:
        (WebCore::SVGPolyElement::attributeRegistry):
        (WebCore::SVGPolyElement::isKnownAttribute):
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.h:
        * svg/SVGStopElement.h:
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.h:
        * svg/SVGTests.h:
        * svg/SVGTextContentElement.h:
        (WebCore::SVGTextContentElement::isKnownAttribute):
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.h:
        (WebCore::SVGTextPositioningElement::isKnownAttribute):
        * svg/SVGURIReference.h:
        * svg/SVGUseElement.h:
        * svg/SVGViewElement.h:
        * svg/SVGViewSpec.h:
        * svg/SVGZoomAndPan.cpp:
        (WebCore::SVGZoomAndPan::parseZoomAndPan):
        (WebCore::SVGZoomAndPan::parseAttribute):
        (WebCore::SVGZoomAndPan::SVGZoomAndPan): Deleted.
        (WebCore::SVGZoomAndPan::registerAttributes): Deleted.
        * svg/SVGZoomAndPan.h:
        (WebCore::SVGZoomAndPan::zoomAndPan const):
        (WebCore::SVGZoomAndPan::setZoomAndPan):
        (WebCore::SVGZoomAndPan::reset):
        (WebCore::SVGZoomAndPan::attributeRegistry): Deleted.
        (WebCore::SVGZoomAndPan::isKnownAttribute): Deleted.

2019-03-18  Timothy Hatcher  <timothy@apple.com>

        Add new NSAttributedString API for converting HTML.
        https://bugs.webkit.org/show_bug.cgi?id=195636
        rdar://problem/45055697

        Reviewed by Tim Horton.

        * en.lproj/Localizable.strings: Updated.

2019-03-18  Zalan Bujtas  <zalan@apple.com>

        Call transition and animation callbacks on non-composited renderers too.
        https://bugs.webkit.org/show_bug.cgi?id=195907

        Reviewed by Simon Fraser.

        These callbacks are not composited specific functions.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::freezeAtTime):
        (WebCore::AnimationBase::compositedRenderer const): Deleted.
        * page/animation/AnimationBase.h:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::startAnimation):
        (WebCore::ImplicitAnimation::pauseAnimation):
        (WebCore::ImplicitAnimation::endAnimation):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::startAnimation):
        (WebCore::KeyframeAnimation::pauseAnimation):
        (WebCore::KeyframeAnimation::endAnimation):
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::startTransition):
        (WebCore::RenderLayerModelObject::transitionPaused):
        (WebCore::RenderLayerModelObject::transitionFinished):
        (WebCore::RenderLayerModelObject::startAnimation):
        (WebCore::RenderLayerModelObject::animationPaused):
        (WebCore::RenderLayerModelObject::animationSeeked):
        (WebCore::RenderLayerModelObject::animationFinished):
        (WebCore::RenderLayerModelObject::suspendAnimations):

2019-03-18  Jer Noble  <jer.noble@apple.com>

        Add experimental "alphaChannel" property to VideoConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=195853

        Reviewed by Eric Carlson.

        Test: media/mediacapabilities/mock-decodingInfo-alphaChannel.html

        Add a new, experimental addition to Media Capabilities to allow pages to query for
        alpha channel support.

        * Modules/mediacapabilities/MediaCapabilities.cpp:
        (WebCore::MediaCapabilities::decodingInfo):
        * Modules/mediacapabilities/MediaCapabilities.h:
        * Modules/mediacapabilities/MediaCapabilities.idl:
        * Modules/mediacapabilities/VideoConfiguration.idl:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/VideoToolboxSoftLink.cpp:
        * platform/cocoa/VideoToolboxSoftLink.h:
        * platform/graphics/cocoa/HEVCUtilitiesCocoa.h:
        * platform/graphics/cocoa/HEVCUtilitiesCocoa.mm: Renamed from Source/WebCore/platform/graphics/cocoa/HEVCUtilitiesCocoa.cpp.
        (WebCore::validateHEVCParameters):
        * platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp:
        (WebCore::createMediaPlayerDecodingConfigurationCocoa):
        * platform/mediacapabilities/VideoConfiguration.h:
        * platform/mock/MediaEngineConfigurationFactoryMock.cpp:
        (WebCore::canDecodeMedia):
        (WebCore::canEncodeMedia):

2019-03-18  Ryosuke Niwa  <rniwa@webkit.org>

        Remove unused webkitEditableContentChanged event
        https://bugs.webkit.org/show_bug.cgi?id=195909

        Reviewed by Wenson Hsieh.

        Removed webkitEditableContentChanged event which is no longer used after r206944.

        Note that only WebKit's C++ code can fire events in TextControlInnerElements
        since the element is an implementation detail of input and textarea elements.

        * dom/EventNames.h:
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerTextElement::defaultEventHandler):

2019-03-18  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Hook up the compiler to our WebGPU implementation
        https://bugs.webkit.org/show_bug.cgi?id=195509

        Unreviewed.

        Update after r243091.

        * Modules/webgpu/WHLSL/WHLSLSynthesizeConstructors.cpp:
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::trySetWHLSLFunctionsForPipelineDescriptor):

2019-03-18  Chris Dumez  <cdumez@apple.com>

        REGRESSION(r236862): early frame decoupling leaves JSC ArrayBuffer objects lingering
        https://bugs.webkit.org/show_bug.cgi?id=195322

        Reviewed by Ryosuke Niwa.

        Since r236862, DOMWindow objects get disconnected from their Frame object as soon as
        their iframe element gets removed from the document. Previously, DOMWindow was a
        FrameDestructionObserver and would stay connected to its frame until the frame died.

        This means that some of the work that we were doing in DOMWindow::frameDestroyed() and
        Document::willDetachPage() no longer happens for subframe windows because they get
        disconnected from their frame because they get a chance to get such notifications.
        To address this issue, we now also do this work in DOMWindow::willDetachDocumentFromFrame()
        which gets called when the iframe gets removed from the document and the document / window
        get disconnected from the Frame element.

        No new tests, verified locally that the leak is gone on JetStream.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::willDetachDocumentFromFrame):

2019-03-18  Zalan Bujtas  <zalan@apple.com>

        Move animation and transition functions from RenderBoxModelObject to RenderElement
        https://bugs.webkit.org/show_bug.cgi?id=195903

        Reviewed by Simon Fraser.

        Transitions and animations do not require RenderBoxModelObject. Move these functions to RenderElement and override them at RenderLayerModelObject to support
        composition related callbacks.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::compositedRenderer const):
        * page/animation/AnimationBase.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::startTransition): Deleted.
        (WebCore::RenderBoxModelObject::transitionPaused): Deleted.
        (WebCore::RenderBoxModelObject::transitionFinished): Deleted.
        (WebCore::RenderBoxModelObject::startAnimation): Deleted.
        (WebCore::RenderBoxModelObject::animationPaused): Deleted.
        (WebCore::RenderBoxModelObject::animationSeeked): Deleted.
        (WebCore::RenderBoxModelObject::animationFinished): Deleted.
        (WebCore::RenderBoxModelObject::suspendAnimations): Deleted.
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::startTransition):
        (WebCore::RenderElement::transitionPaused):
        (WebCore::RenderElement::transitionFinished):
        (WebCore::RenderElement::startAnimation):
        (WebCore::RenderElement::animationPaused):
        (WebCore::RenderElement::animationSeeked):
        (WebCore::RenderElement::animationFinished):
        (WebCore::RenderElement::suspendAnimations):
        * rendering/RenderElement.h:

2019-03-18  Antti Koivisto  <antti@apple.com>

        Try to fix Windows build.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateEventRegion):

2019-03-18  Antti Koivisto  <antti@apple.com>

        Layer with no backing store should still hit-test over a scroller
        https://bugs.webkit.org/show_bug.cgi?id=195378
        <rdar://problem/48652078>

        Reviewed by Simon Fraser.

        Tests: fast/scrolling/ios/overflow-scroll-overlap-3.html
               fast/scrolling/ios/overflow-scroll-overlap-4.html

        Move collecting event region from paint to compositing update time.
        This solves a number of problems including regions for non-painting layers.

        * platform/graphics/GraphicsLayer.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):

        Use the existing visibleToHitTesting() helper.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):

        Use flag for event region collecting, don't paint content.

        (WebCore::RenderLayer::paintList):

        We can bail out immediately if there is no overflow.

        (WebCore::RenderLayer::paintForegroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase):
        (WebCore::RenderLayer::collectEventRegionForFragments):

        Move to a separate function.

        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):

        Update event region on backing configuration update. This is called after anything interesting changes on a sublayer.

        (WebCore::RenderLayerBacking::updateEventRegion):
        (WebCore::RenderLayerBacking::paintIntoLayer):
        * rendering/RenderLayerBacking.h:

2019-03-18  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Hook up the compiler to our WebGPU implementation
        https://bugs.webkit.org/show_bug.cgi?id=195509

        Reviewed by Dean Jackson.

        This represents a collection of changes necessary to compile and run the first WHLSL program in WebKit.

        Because WHLSL isn't fully implemented yet, this patch doesn't remove the existing method for supplying
        Metal shaders to WebGPU. Instead, it adds a new boolean to WebGPUShaderModuleDescriptor, "isWHLSL" which
        causes us to run the WHLSL compiler.

        More details below.

        Test: webgpu/whlsl.html

        * Modules/webgpu/WHLSL/AST/WHLSLCallExpression.h: Use raw pointer instead of Optional<std::reference_wrapper>.
        (WebCore::WHLSL::AST::CallExpression::setCastData):
        (WebCore::WHLSL::AST::CallExpression::isCast):
        (WebCore::WHLSL::AST::CallExpression::castReturnType):
        * Modules/webgpu/WHLSL/AST/WHLSLNativeTypeDeclaration.h:
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isAtomic const):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsAtomic):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::name const): Deleted. The parent class already has a name string.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::name): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLReturn.h:
        * Modules/webgpu/WHLSL/AST/WHLSLTypeReference.h:
        (WebCore::WHLSL::AST::TypeReference::cloneTypeReference const): When cloning a type reference, make sure to
        clone the pointer to its resolved type, too.
        * Modules/webgpu/WHLSL/AST/WHLSLVariableReference.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp: Incorporate resolution from
        https://github.com/gpuweb/gpuweb/pull/188.
        (WebCore::WHLSL::Metal::EntryPointScaffolding::EntryPointScaffolding):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::resourceHelperTypes):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::resourceSignature):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::helperTypes):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::unpack):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::pack): Support semantics being placed directly on the
        entry point, instead of being placed on a structure member.
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::helperTypes):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::pack): Ditto.
        (WebCore::WHLSL::Metal::EntryPointScaffolding::mappedBindGroups const): Deleted.
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        (WebCore::WHLSL::Metal::RenderFunctionDefinitionWriter::createEntryPointScaffolding):
        (WebCore::WHLSL::Metal::ComputeFunctionDefinitionWriter::createEntryPointScaffolding):
        (WebCore::WHLSL::Metal::metalFunctions):
        (WebCore::WHLSL::Metal::RenderFunctionDefinitionWriter::takeVertexMappedBindGroups): Deleted. After
        https://github.com/gpuweb/gpuweb/pull/188, we don't need the mappings.
        (WebCore::WHLSL::Metal::RenderFunctionDefinitionWriter::takeFragmentMappedBindGroups): Deleted. Ditto.
        (WebCore::WHLSL::Metal::ComputeFunctionDefinitionWriter::takeMappedBindGroups): Deleted. Ditto.
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.h: Ditto.
        * Modules/webgpu/WHLSL/Metal/WHLSLMetalCodeGenerator.cpp: Ditto.
        (WebCore::WHLSL::Metal::generateMetalCodeShared):
        (WebCore::WHLSL::Metal::generateMetalCode):
        * Modules/webgpu/WHLSL/Metal/WHLSLMetalCodeGenerator.h: Ditto.
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp: Support compiler-generated functions. Change
        CRASH() to notImplemented().
        (WebCore::WHLSL::Metal::writeNativeFunction):
        (WebCore::WHLSL::Metal::getNativeName): Deleted.
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeTypeWriter.cpp:
        (WebCore::WHLSL::Metal::writeNativeType): 
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp: The dependency graph needs to track all unnamed types. Also,
        we need to track types that are the results of expressions (not just types literally spelled out in the
        program). Enumerations need to be emitted after their base types are emitted.
        (WebCore::WHLSL::Metal::TypeNamer::visit):
        (WebCore::WHLSL::Metal::MetalTypeDeclarationWriter::MetalTypeDeclarationWriter):
        (WebCore::WHLSL::Metal::TypeNamer::metalTypeDeclarations):
        (WebCore::WHLSL::Metal::TypeNamer::emitUnnamedTypeDefinition):
        (WebCore::WHLSL::Metal::TypeNamer::emitNamedTypeDefinition):
        (WebCore::WHLSL::Metal::TypeNamer::emitAllUnnamedTypeDefinitions):
        (WebCore::WHLSL::Metal::TypeNamer::metalTypeDefinitions):
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.h:
        * Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp:
        (WebCore::WHLSL::checkDuplicateFunctions):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp: Wrap ResolvingType in a class to make sure it plays nicely with
        HashMap. Also, use raw pointers instead of Optional<std::reference_wrapper>s.
        (WebCore::WHLSL::resolveWithReferenceComparator):
        (WebCore::WHLSL::resolveByInstantiation):
        (WebCore::WHLSL::checkOperatorOverload):
        (WebCore::WHLSL::Checker::assignTypes):
        (WebCore::WHLSL::Checker::checkShaderType):
        (WebCore::WHLSL::Checker::visit):
        (WebCore::WHLSL::matchAndCommit):
        (WebCore::WHLSL::Checker::recurseAndGetInfo):
        (WebCore::WHLSL::Checker::assignType):
        (WebCore::WHLSL::Checker::forwardType):
        (WebCore::WHLSL::getUnnamedType):
        (WebCore::WHLSL::Checker::finishVisitingPropertyAccess):
        (WebCore::WHLSL::Checker::isBoolType):
        * Modules/webgpu/WHLSL/WHLSLGatherEntryPointItems.cpp:
        (WebCore::WHLSL::Gatherer::visit):
        * Modules/webgpu/WHLSL/WHLSLInferTypes.cpp:
        (WebCore::WHLSL::inferTypesForCall):
        * Modules/webgpu/WHLSL/WHLSLInferTypes.h:
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.cpp:
        (WebCore::WHLSL::Intrinsics::addPrimitive):
        (WebCore::WHLSL::Intrinsics::addFullTexture):
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.h:
        (WebCore::WHLSL::Intrinsics::ucharType const):
        (WebCore::WHLSL::Intrinsics::ushortType const):
        (WebCore::WHLSL::Intrinsics::charType const):
        (WebCore::WHLSL::Intrinsics::shortType const):
        (WebCore::WHLSL::Intrinsics::intType const):
        (WebCore::WHLSL::Intrinsics::uchar2Type const):
        (WebCore::WHLSL::Intrinsics::uchar4Type const):
        (WebCore::WHLSL::Intrinsics::ushort2Type const):
        (WebCore::WHLSL::Intrinsics::ushort4Type const):
        (WebCore::WHLSL::Intrinsics::uint2Type const):
        (WebCore::WHLSL::Intrinsics::uint4Type const):
        (WebCore::WHLSL::Intrinsics::char2Type const):
        (WebCore::WHLSL::Intrinsics::char4Type const):
        (WebCore::WHLSL::Intrinsics::short2Type const):
        (WebCore::WHLSL::Intrinsics::short4Type const):
        (WebCore::WHLSL::Intrinsics::int2Type const):
        (WebCore::WHLSL::Intrinsics::int4Type const):
        * Modules/webgpu/WHLSL/WHLSLLexer.cpp:
        (WebCore::WHLSL::Lexer::recognizeKeyword):
        * Modules/webgpu/WHLSL/WHLSLNameContext.cpp:
        (WebCore::WHLSL::NameContext::add):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:
        (WebCore::WHLSL::NameResolver::visit): Don't visit recursive types.
        Also, make sure we preserve the CurrentFunction in our recursive scopes.
        * Modules/webgpu/WHLSL/WHLSLNameResolver.h:
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::fail):
        (WebCore::WHLSL::Parser::peek):
        (WebCore::WHLSL::Parser::parseType):
        (WebCore::WHLSL::Parser::parseBuiltInSemantic):
        * Modules/webgpu/WHLSL/WHLSLParser.h:
        * Modules/webgpu/WHLSL/WHLSLPipelineDescriptor.h:
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        (WebCore::WHLSL::prepareShared):
        (WebCore::WHLSL::prepare):
        * Modules/webgpu/WHLSL/WHLSLPrepare.h:
        * Modules/webgpu/WHLSL/WHLSLRecursiveTypeChecker.cpp: Move big inline functions out-of-line.
        (WebCore::WHLSL::RecursiveTypeChecker::visit):
        (WebCore::WHLSL::checkRecursiveTypes):
        (): Deleted.
        * Modules/webgpu/WHLSL/WHLSLResolveOverloadImpl.cpp:
        (WebCore::WHLSL::conversionCost):
        (WebCore::WHLSL::resolveFunctionOverloadImpl):
        * Modules/webgpu/WHLSL/WHLSLResolveOverloadImpl.h:
        * Modules/webgpu/WHLSL/WHLSLResolvingType.h:
        (WebCore::WHLSL::ResolvingType::ResolvingType):
        (WebCore::WHLSL::ResolvingType::operator=):
        (WebCore::WHLSL::ResolvingType::getUnnamedType):
        (WebCore::WHLSL::ResolvingType::visit):
        * Modules/webgpu/WHLSL/WHLSLScopedSetAdder.h: Renamed from Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLMappedBindings.h.
        (WebCore::WHLSL::ScopedSetAdder::ScopedSetAdder):
        (WebCore::WHLSL::ScopedSetAdder::~ScopedSetAdder):
        (WebCore::WHLSL::ScopedSetAdder::isNewEntry const):
        * Modules/webgpu/WHLSL/WHLSLSemanticMatcher.cpp:
        (WebCore::WHLSL::isAcceptableFormat):
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt: Turns out a bunch of texture types don't exist in MSL.
        * Modules/webgpu/WHLSL/WHLSLSynthesizeArrayOperatorLength.cpp:
        (WebCore::WHLSL::synthesizeArrayOperatorLength):
        * Modules/webgpu/WHLSL/WHLSLSynthesizeArrayOperatorLength.h:
        * Modules/webgpu/WHLSL/WHLSLSynthesizeConstructors.cpp: Adding to the program can fail.
        (WebCore::WHLSL::synthesizeConstructors): Some constructors shouldn't be generated for "void" and for atomic types.
        * Modules/webgpu/WHLSL/WHLSLSynthesizeConstructors.h: Adding to the program can fail.
        * Modules/webgpu/WHLSL/WHLSLSynthesizeEnumerationFunctions.cpp: Ditto.
        (WebCore::WHLSL::synthesizeEnumerationFunctions):
        * Modules/webgpu/WHLSL/WHLSLSynthesizeEnumerationFunctions.h: Ditto.
        * Modules/webgpu/WHLSL/WHLSLSynthesizeStructureAccessors.cpp: Ditto.
        (WebCore::WHLSL::synthesizeStructureAccessors):
        * Modules/webgpu/WHLSL/WHLSLSynthesizeStructureAccessors.h: Ditto.
        * Modules/webgpu/WHLSL/WHLSLVisitor.cpp:
        (WebCore::WHLSL::Visitor::visit):
        * Modules/webgpu/WebGPUDevice.cpp: Add flag that triggers the WHLSL compiler.
        (WebCore::WebGPUDevice::createShaderModule const):
        * Modules/webgpu/WebGPUShaderModuleDescriptor.h: Ditto.
        * Modules/webgpu/WebGPUShaderModuleDescriptor.idl: Ditto.
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/GPUPipelineLayout.h:
        (WebCore::GPUPipelineLayout::bindGroupLayouts const):
        * platform/graphics/gpu/GPUShaderModule.h: Add a string that represents the WHLSL shader source. The compiler currently
        needs the rest of the pipeline state descriptor, so we defer compilation until create*Pipeline().
        (WebCore::GPUShaderModule::platformShaderModule const):
        (WebCore::GPUShaderModule::whlslSource const):
        * platform/graphics/gpu/GPUShaderModuleDescriptor.h:
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm: Convert GPU types into WHLSL types, and invoke the compiler.
        (WebCore::convertVertexFormat):
        (WebCore::convertShaderStageFlags):
        (WebCore::convertBindingType):
        (WebCore::convertTextureFormat):
        (WebCore::convertLayout):
        (WebCore::convertRenderPipelineDescriptor):
        (WebCore::trySetMetalFunctionsForPipelineDescriptor):
        (WebCore::trySetWHLSLFunctionsForPipelineDescriptor):
        (WebCore::trySetFunctionsForPipelineDescriptor):
        (WebCore::tryCreateMtlRenderPipelineState):
        * platform/graphics/gpu/cocoa/GPUShaderModuleMetal.mm:
        (WebCore::GPUShaderModule::create):
        (WebCore::GPUShaderModule::GPUShaderModule):

2019-03-18  Justin Fan  <justin_fan@apple.com>

        [Web GPU] GPUAdapter.createDevice -> GPUAdapter.requestDevice
        https://bugs.webkit.org/show_bug.cgi?id=195781

        Reviewed by Myles C. Maxfield.

        A Web GPU device is now acquired via a promise returned from GPUAdapter.requestDevice().

        Existing tests updated for new behavior.

        * Modules/webgpu/WebGPUAdapter.cpp:
        (WebCore::WebGPUAdapter::requestDevice const):
        (WebCore::WebGPUAdapter::createDevice): Deleted.
        * Modules/webgpu/WebGPUAdapter.h:
        * Modules/webgpu/WebGPUAdapter.idl:
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::tryCreate):
        (WebCore::WebGPUDevice::WebGPUDevice):
        (WebCore::WebGPUDevice::create): Deleted.
        * Modules/webgpu/WebGPUDevice.h:
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/cocoa/GPUDeviceMetal.mm:
        (WebCore::GPUDevice::tryCreate):
        (WebCore::GPUDevice::create): Deleted.

2019-03-18  Justin Fan  <justin_fan@apple.com>

        [Web GPU] API updates: GPUTexture.createDefaultView and type-safe GPURenderPassEncoder.setPipeline
        https://bugs.webkit.org/show_bug.cgi?id=195896

        Reviewed by Jon Lee.

        Rename createDefaultTextureView -> createDefaultView and move setPipeline from GPUProgrammablePassEncoder to GPURenderPassEncoder.

        Existing tests updated for createDefaultView name.

        * Modules/webgpu/WebGPUProgrammablePassEncoder.cpp:
        (WebCore::WebGPUProgrammablePassEncoder::setPipeline): Deleted.
        * Modules/webgpu/WebGPUProgrammablePassEncoder.h:
        * Modules/webgpu/WebGPUProgrammablePassEncoder.idl:
        * Modules/webgpu/WebGPURenderPassEncoder.cpp:
        (WebCore::WebGPURenderPassEncoder::setPipeline):
        * Modules/webgpu/WebGPURenderPassEncoder.h:
        * Modules/webgpu/WebGPURenderPassEncoder.idl:
        * Modules/webgpu/WebGPUTexture.cpp:
        (WebCore::WebGPUTexture::createDefaultView):
        (WebCore::WebGPUTexture::createDefaultTextureView): Deleted.
        * Modules/webgpu/WebGPUTexture.h:
        * Modules/webgpu/WebGPUTexture.idl:
        * platform/graphics/gpu/GPUProgrammablePassEncoder.h:
        * platform/graphics/gpu/GPURenderPassEncoder.h:

2019-03-18  Chris Dumez  <cdumez@apple.com>

        [iOS] The network process sometimes gets killed for trying to suspend while holding locked files
        https://bugs.webkit.org/show_bug.cgi?id=195890
        <rdar://problem/48934338>

        Reviewed by Geoffrey Garen.

        The network process sometimes gets killed for trying to suspend while holding locked files while
        under SQLiteDatabase::open(). The SQLiteDatabaseTracker normally keeps tracking of "transactions"
        in progress so we know that we're holding locked files and the WebSQLiteDatabaseTracker takes
        care of notifying the UIProcess via IPC that it should hold a background assertion on our behalf
        to avoid trying to suspend while holding locked files.
        However, we were missing a SQLiteTransactionInProgressAutoCounter when trying to execute the
        PRAGMA statement.

        Note that we have a similar SQLiteTransactionInProgressAutoCounter in SQLiteDatabase::useWALJournalMode()
        when executing such PRAGMA statement already.

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

2019-03-18  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r243037.

        Broke the Windows build

        Reverted changeset:

        "Reduce the size of Node::deref by eliminating an explicit
        parentNode check"
        https://bugs.webkit.org/show_bug.cgi?id=195776
        https://trac.webkit.org/changeset/243037

2019-03-18  Eric Carlson  <eric.carlson@apple.com>

        Change some logging levels
        https://bugs.webkit.org/show_bug.cgi?id=195861
        <rdar://problem/48961669>

        Reviewed by Jer Noble.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::dispatchEvent):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::addInput):
        (WebCore::AudioNode::addOutput):
        (WebCore::AudioNode::connect):
        (WebCore::AudioNode::disconnect):
        * Modules/webaudio/AudioParam.cpp:
        (WebCore::AudioParam::connect):
        (WebCore::AudioParam::disconnect):
        * Modules/webaudio/WaveShaperNode.cpp:
        (WebCore::WaveShaperNode::setOversample):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType const):
        (WebCore::HTMLMediaElement::seekTask):
        (WebCore::HTMLMediaElement::dispatchEvent):
        (WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript):
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot):
        (WebCore::HTMLMediaElement::setMediaControlsDependOnPageScaleFactor):
        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::addGenericCue):
        (WebCore::InbandGenericTextTrack::removeGenericCue):
        (WebCore::InbandGenericTextTrack::newCuesParsed):
        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::newCuesParsed):
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::newCuesAvailable):
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::removeCue):
        * inspector/agents/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::getLoggingChannels):
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processAttributedStrings):
        (WebCore::InbandTextTrackPrivateAVF::removeCompletedCues):
        (WebCore::InbandTextTrackPrivateAVF::processNativeSamples):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageForTimeInRect):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastImage):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekWithTolerance):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isCurrentPlaybackTargetWireless const):

2019-03-15  Antoine Quint  <graouts@apple.com>

        Make mouse event simulation a quirk
        https://bugs.webkit.org/show_bug.cgi?id=195218
        <rdar://problem/48516794>

        Reviewed by Dean Jackson.

        Add new quirks to control whether we should dispatch simulated mouse events and whether we should assume
        preventDefault() was called when a simulated "mousemove" event was handled. Currently both return false
        but will be made to return more interesting results as we determine heuristics or specific sites that
        may require such quirks.

        * page/Quirks.cpp:
        (WebCore::Quirks::shouldDispatchSimulateMouseEvents const):
        (WebCore::Quirks::shouldMousemoveEventHandlingPreventDefault const):
        * page/Quirks.h:

2019-03-18  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Rewrite HTTP source element using pushsrc base class
        https://bugs.webkit.org/show_bug.cgi?id=195631

        Reviewed by Xabier Rodriguez-Calvar.

        If we want to use webkitwebsrc in adaptivedemux (HLS, DASH, etc)
        we need a source element that behaves like souphttpsrc, which is
        implemented using pushsrc. This rewrite might also fix some seek
        issues.

        No new tests, existing http/tests/media tests cover this patch.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_class_init):
        (webkitWebSrcReset):
        (webkit_web_src_init):
        (webKitWebSrcCreate):
        (webKitWebSrcStart):
        (webKitWebSrcCloseSession):
        (webKitWebSrcStop):
        (webKitWebSrcGetSize):
        (webKitWebSrcIsSeekable):
        (webKitWebSrcDoSeek):
        (webKitWebSrcQuery):
        (webKitWebSrcUnLock):
        (webKitWebSrcUnLockStop):
        (webKitWebSrcChangeState):
        (CachedResourceStreamingClient::checkUpdateBlocksize):
        (CachedResourceStreamingClient::responseReceived):
        (CachedResourceStreamingClient::dataReceived):
        (CachedResourceStreamingClient::accessControlCheckFailed):
        (CachedResourceStreamingClient::loadFailed):
        (CachedResourceStreamingClient::loadFinished):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.h:

2019-03-18  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [WPE][GTK] Fix a build warning because of missing to handle an enum value
        https://bugs.webkit.org/show_bug.cgi?id=195876

        Reviewed by Žan Doberšek.

        When building WPE or GTK port, there is a build warning. The switch-case needs to
        handle *Positioned* enum value as well in order to avoid the build warning.

        * page/scrolling/nicosia/ScrollingTreeNicosia.cpp:
        (WebCore::ScrollingTreeNicosia::createScrollingTreeNode): Add case ScrollingNodeType::Positioned.

2019-03-17  Yusuke Suzuki  <ysuzuki@apple.com>

        REGRESSION: !vm.isInitializingObject() void* JSC::tryAllocateCellHelper<JSC::Structure> JSC::Structure::create
        https://bugs.webkit.org/show_bug.cgi?id=195858

        Reviewed by Mark Lam.

        Changed the accessor names.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readTerminal):

2019-03-16  Darin Adler  <darin@apple.com>

        Improve normalization code, including moving from unorm.h to unorm2.h
        https://bugs.webkit.org/show_bug.cgi?id=195330

        Reviewed by Michael Catanzaro.

        * editing/TextIterator.cpp: Include unorm2.h.
        (WebCore::normalizeCharacters): Rewrote to use unorm2_normalize rather than
        unorm_normalize, but left the logic otherwise the same.

        * platform/graphics/SurrogatePairAwareTextIterator.cpp: Include unorm2.h.
        (WebCore::SurrogatePairAwareTextIterator::normalizeVoicingMarks):
        Use unorm2_composePair instead of unorm_normalize.

        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (characterSequenceIsEmoji): Changed to use existing SurrogatePairAwareTextIterator.
        (FontCascade::fontForCombiningCharacterSequence): Use normalizedNFC instead of
        calling unorm2_normalize directly.

        * WebCore/platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        Removed unneeded include of <unicode/normlzr.h>.

        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::encode const): Use normalizedNFC instead of the
        code that was here. The normalizedNFC function is better in multiple ways,
        but primarily it handles 8-bit strings and other already-normalized
        strings much more efficiently.

2019-03-16  Jer Noble  <jer.noble@apple.com>

        Unreviewed unified-build fix; GPUBindGroupMetal uses symbols from the Metal.framework; it should import it.

        * platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm:

2019-03-16  Jer Noble  <jer.noble@apple.com>

        Add a new MediaCapabilitiesExtensionsEnabled setting
        https://bugs.webkit.org/show_bug.cgi?id=195843

        Reviewed by Geoffrey Garen.

        Add a new setting, MediaCapabilitiesExtensionsEnabled, which controls whether extensions
        to the Media Capabilities API are available.

        Drive-by fix: make sure that the configuration is passed through to MediaCapabilitiesInfo
        when no factory can support the configuration.

        * Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl:
        * Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryImplementationContent):
        * bindings/scripts/IDLAttributes.json:
        * page/Settings.yaml:
        * platform/mediacapabilities/MediaEngineConfigurationFactory.cpp:
        (WebCore::MediaEngineConfigurationFactory::createDecodingConfiguration):

2019-03-16  Zalan Bujtas  <zalan@apple.com>

        [iOS] Unable to close trending window on naver.com.
        https://bugs.webkit.org/show_bug.cgi?id=195842
        <rdar://problem/48067338>

        This patch issues a synthetic mouse move to the tap location after we decided to hover.
        It ensures that the node under the mouse is up-to-date and when a new tap comes in we can
        send the mouseout event to the correct node. It fixes the case when the hover content is positioned over
        the tap target so that the tap target is no longer "under the mouse".
        On desktop this "transition" happens automatically since the mouse is always present. 

        Reviewed by Simon Fraser.

        Tests: fast/events/touch/ios/content-observation/new-content-covers-tap-target.html
               fast/events/touch/ios/content-observation/prevent-default-on-touch-start.html

        * page/EventHandler.h:
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::dispatchSyntheticMouseMove):

2019-03-16  Sihui Liu  <sihui_liu@apple.com>

        Layout tests imported/w3c/web-platform-tests/IndexedDB/*-exception-order.html are failing
        https://bugs.webkit.org/show_bug.cgi?id=195650

        Reviewed by Ryosuke Niwa.

        Fix some exception orders in IDB.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        Step 6 of https://www.w3.org/TR/IndexedDB-2/#dom-idbdatabase-createobjectstore.

        (WebCore::IDBDatabase::transaction):
        Step 1 of https://www.w3.org/TR/IndexedDB-2/#dom-idbdatabase-transaction.

        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::doOpenCursor):
        (WebCore::IDBIndex::openCursor):
        Step 5 of https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-opencursor.

        (WebCore::IDBIndex::doOpenKeyCursor):
        (WebCore::IDBIndex::openKeyCursor):
        Step 5 of https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-openkeycursor.

        (WebCore::IDBIndex::count):
        Step 5 of https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-count.

        (WebCore::IDBIndex::doCount):
        (WebCore::IDBIndex::get):
        Step 5 of https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-get.

        (WebCore::IDBIndex::doGet):
        (WebCore::IDBIndex::getKey):
        Step 5 of https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-getkey.

        (WebCore::IDBIndex::doGetKey):
        (WebCore::IDBIndex::doGetAll):
        (WebCore::IDBIndex::getAll):
        Step 5 of https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-getkey.
        (WebCore::IDBIndex::doGetAllKeys):
        (WebCore::IDBIndex::getAllKeys):
        Step 5 of https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-getallkeys.

        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::doOpenCursor):
        (WebCore::IDBObjectStore::openCursor):
        Step 5 of https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-opencursor.

        (WebCore::IDBObjectStore::doOpenKeyCursor):
        (WebCore::IDBObjectStore::openKeyCursor):
        Step 5 of https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-openkeycursor.

        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore::IDBObjectStore::doDelete):
        (WebCore::IDBObjectStore::count):
        Step 5 of https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-count.

        (WebCore::IDBObjectStore::doCount):
        (WebCore::IDBObjectStore::doGetAll):
        (WebCore::IDBObjectStore::getAll):
        Step 5 of https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getall.

        (WebCore::IDBObjectStore::doGetAllKeys):
        (WebCore::IDBObjectStore::getAllKeys):
        Step 5 of https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getallkeys.
        * Modules/indexeddb/IDBObjectStore.h:

2019-03-16  Ryosuke Niwa  <rniwa@webkit.org>

        Reduce the size of Node::deref by eliminating an explicit parentNode check
        https://bugs.webkit.org/show_bug.cgi?id=195776

        Reviewed by Geoffrey Garen.

        This patch eliminates the nullity check of m_parentNode in Node::deref as well as the store to
        m_refCount in the case of invoking Node::removedLastRef() as done for RefCounted in r30042.
        Together, this patch shrinks WebCore's size by 46KB or ~0.7%.

        To do this, we take we take a similar approach as WTF::String by using the lowest bit of m_refCount
        to indicate whether a node has a parent or not. Regular ref-counting is done on the upper 31 bits.
        Node::setParentNode updates this flag, and Node::deref() would only `delete this` if m_refCount
        is identically equal to 0.

        For a Document, we set m_refCounted to 0 before in the case of non-zero m_referencingNodeCount
        since decrementReferencingNodeCount needs to be able to tell if there is an outstanding Ref/RefPtr
        or not when m_referencingNodeCount becomes 0.

        No new tests since there should be no behavioral change.

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        * dom/Document.h:
        (WebCore::Document::decrementReferencingNodeCount):
        * dom/Node.cpp:
        (WebCore::Node::Node): Moved the initialization of m_refCount to the member variable declaration.
        (WebCore::Node::~Node):
        (WebCore::Node::removedLastRef):
        * dom/Node.h:
        (WebCore::Node): Changed the type of m_refCount from signed int to uint32_t. It was changed from
        unsigned int to signed int back in r11492 but I don't think the signedness is needed.
        (WebCore::Node::ref): Increment the ref count by 2 (upper 31-bit).
        (WebCore::Node::deref): Implemented the optimization. This is what shrinks the WebCore binary size.
        (WebCore::Node::hasOneRef const):
        (WebCore::Node::refCount const): Ignore the lowest bit. Without this fix, the optimization in
        replaceChildrenWithFragment to avoid replacing the text node is disabled whenever there is a parent.
        (WebCore::Node::setParentNode): Sets the lowest bit to 1 if the node has a parent and 0 otherwise.

2019-03-16  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Remove the SVG property tear off objects for SVGAnimatedInteger
        https://bugs.webkit.org/show_bug.cgi?id=195722

        Reviewed by Simon Fraser.

        Instead of saving a raw integer value in the SVGElement and then wrapping
        the pointer to this raw data in a tear off object, we will represent the
        integer as Ref<SVGAnimatedInteger> in SVGElement. This will make the 
        representation of the property in IDL file match the C++ header file.

        When the DOM requests the SVGAnimatedInteger, we get return a reference
        to the new animated property. When the rendering code asks for the current
        value of the this animated property, we return the animVal() or the
        baseVal() depending on whether the property is animating or not.

        A pointer to a member in the SVGElement will be registered along with the
        associated attribute name in SVGPropertyRegistry. Registering the property
        creates an SVGMemberAccessor and links to the associated attribute. The
        function of SVGMemberAccessor is to retrieve the value of the property
        given a pointer to an SVGElement.

        SVGPropertyRegistry manages all the properties of SVGElement. It takes
        into account the inherited properties as well.

        SVGElement will have a virtual method called propertyRegistry(). Every
        superclass will override this method to return a reference to its registry
        which includes all the registered properties of this class and its bases.

        One important function of the SVGPropertyRegistry and SVGAccessor is they
        create the appropriate SVGAttributeAnimator for this property.

        SVGAttributeAnimator is just a connection between the animated property
        and SVGAnimationFunction. SVGAnimationFunction calculates the values of
        the animated property within a time interval. SVGAnimatedPropertyAnimator
        updates animVal of the animated property and invalidates the associated
        SVGElement and all the instances that references this element.

        The plan is to remove all the SVG tear off objects like what this patch
        does for SVGAnimatedInteger. So for a period of time the old code and the
        new code will co-exist together. These things to consider when reviewing
        this patch:

        -- SVGAnimatedElementBase was re-factored to use SVGAttributeAnimationControllerBase
        which is inherited by SVGLegacyAttributeAnimationController and
        SVGAttributeAnimationController. The tear-off properties code which uses
        SVGAnimatedType now lives in SVGLegacyAttributeAnimationController. The
        new code was added to SVGAttributeAnimationController. The plan is to 
        remove the three animation controllers and to move the code of
        SVGAttributeAnimationController to SVGAnimatedElementBase when all the tear
        off code is removed.

        -- SVGElement now keeps two registries one for the tear-off world and the
        other for the new world. Eventually we need to get rid of tear-off registry.

        -- SVGElement will differentiate between the type of the property by the
        the method isAnimatedAttribute().

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::SVGAnimateElementBase):
        (WebCore::SVGAnimateElementBase::attributeAnimationController):
        (WebCore::SVGAnimateElementBase::attributeAnimationControllerIfExists):
        (WebCore::SVGAnimateElementBase::hasValidAttributeType const):
        (WebCore::SVGAnimateElementBase::determineAnimatedPropertyType const):
        (WebCore::SVGAnimateElementBase::calculateAnimatedValue):
        (WebCore::SVGAnimateElementBase::calculateToAtEndOfDurationValue):
        (WebCore::SVGAnimateElementBase::calculateFromAndToValues):
        (WebCore::SVGAnimateElementBase::calculateFromAndByValues):
        (WebCore::SVGAnimateElementBase::resetAnimatedType):
        (WebCore::SVGAnimateElementBase::clearAnimatedType):
        (WebCore::SVGAnimateElementBase::applyResultsToTarget):
        (WebCore::SVGAnimateElementBase::isAdditive const):
        (WebCore::SVGAnimateElementBase::calculateDistance):
        (WebCore::SVGAnimateElementBase::setTargetElement):
        (WebCore::SVGAnimateElementBase::setAttributeName):
        (WebCore::SVGAnimateElementBase::resetAnimation):
        (WebCore::SVGAnimateElementBase::hasInvalidCSSAttributeType const):
        (WebCore::SVGAnimateElementBase::hasValidAttributeType): Deleted.
        (WebCore::propertyTypesAreConsistent): Deleted.
        (WebCore::applyCSSPropertyToTarget): Deleted.
        (WebCore::removeCSSPropertyFromTarget): Deleted.
        (WebCore::applyCSSPropertyToTargetAndInstances): Deleted.
        (WebCore::removeCSSPropertyFromTargetAndInstances): Deleted.
        (WebCore::notifyTargetAboutAnimValChange): Deleted.
        (WebCore::notifyTargetAndInstancesAboutAnimValChange): Deleted.
        (WebCore::SVGAnimateElementBase::animatedPropertyTypeSupportsAddition const): Deleted.
        (WebCore::SVGAnimateElementBase::resetAnimatedPropertyType): Deleted.
        (WebCore::SVGAnimateElementBase::ensureAnimator): Deleted.
        * svg/SVGAnimateElementBase.h:
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::hasValidAttributeType const):
        (WebCore::SVGAnimateMotionElement::hasValidAttributeName const):
        (WebCore::SVGAnimateMotionElement::hasValidAttributeType): Deleted.
        (WebCore::SVGAnimateMotionElement::hasValidAttributeName): Deleted.
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::hasValidAttributeType const):
        (WebCore::SVGAnimateTransformElement::hasValidAttributeType): Deleted.
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimatedInteger.cpp: Removed.
        * svg/SVGAnimatedInteger.h: Removed.
        * svg/SVGAnimatedIntegerOptionalInteger.cpp: Removed.
        * svg/SVGAnimatedIntegerOptionalInteger.h: Removed.
        * svg/SVGAnimatedPointList.h:
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::setAttributeType):
        (WebCore::SVGAnimationElement::resetAnimation):
        (WebCore::SVGAnimationElement::resetAnimatedPropertyType): Deleted.
        (WebCore::SVGAnimationElement::setTargetElement): Deleted.
        (WebCore::SVGAnimationElement::checkInvalidCSSAttributeType): Deleted.
        * svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::attributeType const):
        (WebCore::SVGAnimationElement::hasInvalidCSSAttributeType const): Deleted.
        * svg/SVGAnimatorFactory.h:
        (WebCore::SVGAnimatorFactory::create):
        * svg/SVGAttributeAnimationController.cpp: Added.
        (WebCore::SVGAttributeAnimationController::SVGAttributeAnimationController):
        (WebCore::SVGAttributeAnimationController::animator const):
        (WebCore::SVGAttributeAnimationController::isDiscreteAnimator const):
        (WebCore::SVGAttributeAnimationController::isAdditive const):
        (WebCore::SVGAttributeAnimationController::hasValidAttributeType const):
        (WebCore::SVGAttributeAnimationController::calculateFromAndToValues):
        (WebCore::SVGAttributeAnimationController::calculateFromAndByValues):
        (WebCore::SVGAttributeAnimationController::calculateToAtEndOfDurationValue):
        (WebCore::SVGAttributeAnimationController::resetAnimatedType):
        (WebCore::SVGAttributeAnimationController::calculateAnimatedValue):
        (WebCore::SVGAttributeAnimationController::applyResultsToTarget):
        (WebCore::SVGAttributeAnimationController::clearAnimatedType):
        (WebCore::SVGAttributeAnimationController::calculateDistance):
        * svg/SVGAttributeAnimationController.h: Added.
        (WebCore::SVGAttributeAnimationController::animatorIfExists const):
        * svg/SVGAttributeAnimationControllerBase.cpp: Added.
        (WebCore::SVGAttributeAnimationControllerBase::SVGAttributeAnimationControllerBase):
        (WebCore::SVGAttributeAnimationControllerBase::determineAnimatedPropertyType):
        * svg/SVGAttributeAnimationControllerBase.h: Added.
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::synchronizeAllAnimatedSVGAttribute):
        (WebCore::SVGElement::synchronizeAnimatedSVGAttribute const):
        (WebCore::SVGElement::commitPropertyChange):
        (WebCore::SVGElement::isAnimatedPropertyAttribute const):
        (WebCore::SVGElement::isAnimatedAttribute const):
        (WebCore::SVGElement::createAnimator):
        * svg/SVGElement.h:
        (WebCore::SVGElement::propertyRegistry const):
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::SVGFEConvolveMatrixElement):
        (WebCore::SVGFEConvolveMatrixElement::registerAttributes):
        (WebCore::SVGFEConvolveMatrixElement::parseAttribute):
        (WebCore::SVGFEConvolveMatrixElement::setOrder):
        (WebCore::SVGFEConvolveMatrixElement::orderXIdentifier): Deleted.
        (WebCore::SVGFEConvolveMatrixElement::orderYIdentifier): Deleted.
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::SVGFETurbulenceElement):
        (WebCore::SVGFETurbulenceElement::registerAttributes):
        (WebCore::SVGFETurbulenceElement::parseAttribute):
        (WebCore::SVGFETurbulenceElement::svgAttributeChanged):
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.h:
        * svg/SVGLegacyAttributeAnimationController.cpp: Added.
        (WebCore::SVGLegacyAttributeAnimationController::SVGLegacyAttributeAnimationController):
        (WebCore::SVGLegacyAttributeAnimationController::animatedTypeAnimator):
        (WebCore::SVGLegacyAttributeAnimationController::isAdditive const):
        (WebCore::SVGLegacyAttributeAnimationController::hasValidAttributeType const):
        (WebCore::SVGLegacyAttributeAnimationController::calculateFromAndToValues):
        (WebCore::SVGLegacyAttributeAnimationController::calculateFromAndByValues):
        (WebCore::SVGLegacyAttributeAnimationController::calculateToAtEndOfDurationValue):
        (WebCore::propertyTypesAreConsistent):
        (WebCore::SVGLegacyAttributeAnimationController::resetAnimatedType):
        (WebCore::SVGLegacyAttributeAnimationController::calculateAnimatedValue):
        (WebCore::applyCSSPropertyToTarget):
        (WebCore::removeCSSPropertyFromTarget):
        (WebCore::applyCSSPropertyToTargetAndInstances):
        (WebCore::removeCSSPropertyFromTargetAndInstances):
        (WebCore::notifyTargetAboutAnimValChange):
        (WebCore::notifyTargetAndInstancesAboutAnimValChange):
        (WebCore::SVGLegacyAttributeAnimationController::applyResultsToTarget):
        (WebCore::SVGLegacyAttributeAnimationController::clearAnimatedType):
        (WebCore::SVGLegacyAttributeAnimationController::calculateDistance):
        * svg/SVGLegacyAttributeAnimationController.h: Added.
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::hasValidAttributeName const):
        (WebCore::SVGSMILElement::hasValidAttributeName): Deleted.
        * svg/animation/SVGSMILElement.h:
        * svg/properties/SVGAnimatedPrimitiveProperty.h: Added.
        (WebCore::SVGAnimatedPrimitiveProperty::create):
        (WebCore::SVGAnimatedPrimitiveProperty::setBaseVal):
        (WebCore::SVGAnimatedPrimitiveProperty::setBaseValInternal):
        (WebCore::SVGAnimatedPrimitiveProperty::baseVal const):
        (WebCore::SVGAnimatedPrimitiveProperty::setAnimVal):
        (WebCore::SVGAnimatedPrimitiveProperty::animVal const):
        (WebCore::SVGAnimatedPrimitiveProperty::animVal):
        (WebCore::SVGAnimatedPrimitiveProperty::currentValue const):
        (WebCore::SVGAnimatedPrimitiveProperty::SVGAnimatedPrimitiveProperty):
        * svg/properties/SVGAnimatedProperty.cpp: Added.
        (WebCore::SVGAnimatedProperty::owner const):
        (WebCore::SVGAnimatedProperty::commitPropertyChange):
        * svg/properties/SVGAnimatedProperty.h: Added.
        (WebCore::SVGAnimatedProperty::isAttached const):
        (WebCore::SVGAnimatedProperty::detach):
        (WebCore::SVGAnimatedProperty::contextElement const):
        (WebCore::SVGAnimatedProperty::baseValAsString const):
        (WebCore::SVGAnimatedProperty::animValAsString const):
        (WebCore::SVGAnimatedProperty::isDirty const):
        (WebCore::SVGAnimatedProperty::setDirty):
        (WebCore::SVGAnimatedProperty::synchronize):
        (WebCore::SVGAnimatedProperty::isAnimating const):
        (WebCore::SVGAnimatedProperty::startAnimation):
        (WebCore::SVGAnimatedProperty::stopAnimation):
        (WebCore::SVGAnimatedProperty::instanceStartAnimation):
        (WebCore::SVGAnimatedProperty::instanceStopAnimation):
        (WebCore::SVGAnimatedProperty::SVGAnimatedProperty):
        * svg/properties/SVGAnimatedPropertyAccessor.h: Added.
        * svg/properties/SVGAnimatedPropertyAccessorImpl.h: Added.
        * svg/properties/SVGAnimatedPropertyAnimator.h: Added.
        (WebCore::SVGAnimatedPropertyAnimator::appendAnimatedInstance):
        (WebCore::SVGAnimatedPropertyAnimator::SVGAnimatedPropertyAnimator):
        * svg/properties/SVGAnimatedPropertyAnimatorImpl.h: Added.
        * svg/properties/SVGAnimatedPropertyImpl.h: Added.
        * svg/properties/SVGAnimatedPropertyPairAccessor.h: Added.
        (WebCore::SVGAnimatedPropertyPairAccessor::SVGAnimatedPropertyPairAccessor):
        (WebCore::SVGAnimatedPropertyPairAccessor::singleton):
        (WebCore::SVGAnimatedPropertyPairAccessor::property1 const):
        (WebCore::SVGAnimatedPropertyPairAccessor::property2 const):
        * svg/properties/SVGAnimatedPropertyPairAccessorImpl.h: Added.
        * svg/properties/SVGAnimatedPropertyPairAnimator.h: Added.
        (WebCore::SVGAnimatedPropertyPairAnimator::appendAnimatedInstance):
        (WebCore::SVGAnimatedPropertyPairAnimator::SVGAnimatedPropertyPairAnimator):
        * svg/properties/SVGAnimatedPropertyPairAnimatorImpl.h: Added.
        * svg/properties/SVGAnimationAdditiveFunction.h: Added.
        (WebCore::SVGAnimationAdditiveFunction::SVGAnimationAdditiveFunction):
        (WebCore::SVGAnimationAdditiveFunction::progress):
        * svg/properties/SVGAnimationAdditiveValueFunction.h: Added.
        (WebCore::SVGAnimationAdditiveValueFunction::toAtEndOfDuration const):
        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h: Added.
        (WebCore::SVGAnimationIntegerFunction::progress):
        * svg/properties/SVGAnimationFunction.h: Added.
        (WebCore::SVGAnimationFunction::isDiscrete const):
        (WebCore::SVGAnimationFunction::calculateDistance const):
        (WebCore::SVGAnimationFunction::SVGAnimationFunction):
        (WebCore::SVGAnimationFunction::addFromAndToValues):
        * svg/properties/SVGAttributeAnimator.cpp: Added.
        (WebCore::SVGAttributeAnimator::applyAnimatedPropertyChange):
        * svg/properties/SVGAttributeAnimator.h: Added.
        (WebCore::SVGAttributeAnimator::SVGAttributeAnimator):
        (WebCore::SVGAttributeAnimator::isDiscrete const):
        (WebCore::SVGAttributeAnimator::setFromAndToValues):
        (WebCore::SVGAttributeAnimator::setFromAndByValues):
        (WebCore::SVGAttributeAnimator::setToAtEndOfDurationValue):
        (WebCore::SVGAttributeAnimator::calculateDistance const):
        * svg/properties/SVGAttributeOwnerProxy.cpp:
        * svg/properties/SVGAttributeOwnerProxy.h:
        * svg/properties/SVGAttributeRegistry.h:
        * svg/properties/SVGMemberAccessor.h: Added.
        (WebCore::SVGMemberAccessor::detach const):
        (WebCore::SVGMemberAccessor::isAnimatedProperty const):
        (WebCore::SVGMemberAccessor::isAnimatedLength const):
        (WebCore::SVGMemberAccessor::matches const):
        (WebCore::SVGMemberAccessor::synchronize const):
        (WebCore::SVGMemberAccessor::createAnimator const):
        (WebCore::SVGMemberAccessor::appendAnimatedInstance const):
        * svg/properties/SVGPointerMemberAccessor.h: Added.
        (WebCore::SVGPointerMemberAccessor::SVGPointerMemberAccessor):
        (WebCore::SVGPointerMemberAccessor::property const):
        (WebCore::SVGPointerMemberAccessor::singleton):
        * svg/properties/SVGProperty.h: Added.
        * svg/properties/SVGPropertyOwner.h: Added.
        (WebCore::SVGPropertyOwner::owner const):
        (WebCore::SVGPropertyOwner::attributeContextElement const):
        (WebCore::SVGPropertyOwner::commitPropertyChange):
        * svg/properties/SVGPropertyOwnerRegistry.h: Added.
        (WebCore::SVGPropertyOwnerRegistry::SVGPropertyOwnerRegistry):
        (WebCore::SVGPropertyOwnerRegistry::registerProperty):
        (WebCore::SVGPropertyOwnerRegistry::enumerateRecursively):
        (WebCore::SVGPropertyOwnerRegistry::isKnownAttribute):
        (WebCore::SVGPropertyOwnerRegistry::enumerateRecursivelyBaseTypes):
        (WebCore::SVGPropertyOwnerRegistry::findAccessor):
        * svg/properties/SVGPropertyRegistry.h: Added.

2019-03-16  Ryosuke Niwa  <rniwa@webkit.org>

        Remove LayoutAssertionDisableScope after r241289
        https://bugs.webkit.org/show_bug.cgi?id=195848

        Reviewed by Antti Koivisto.

        Remove LayoutAssertionDisableScope for good now that the underlying bug has been fixed in r241289.

        * dom/Document.cpp:
        (WebCore::isSafeToUpdateStyleOrLayout):
        * dom/ScriptDisallowedScope.h:
        (WebCore::ScriptDisallowedScope::LayoutAssertionDisableScope): Deleted.
        * page/FrameViewLayoutContext.cpp:
        (WebCore::FrameViewLayoutContext::layout):

2019-03-15  Eric Carlson  <eric.carlson@apple.com>

        Add media stream release logging
        https://bugs.webkit.org/show_bug.cgi?id=195823
        <rdar://problem/48939406>

        Reviewed by Youenn Fablet.

        No new tests, no behavioral change.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::clone):
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::addTrackFromPlatform):
        (WebCore::MediaStream::setIsActive):
        (WebCore::MediaStream::mediaCanStart):
        (WebCore::MediaStream::startProducingData):
        (WebCore::MediaStream::stopProducingData):
        (WebCore::MediaStream::endCaptureTracks):
        (WebCore::MediaStream::stop):
        (WebCore::MediaStream::logChannel const):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        (WebCore::MediaStreamTrack::logChannel const):
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addTrack):
        (WebCore::LibWebRTCMediaEndpoint::sourceFromNewReceiver):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        (WebCore::nextLogIdentifier): Deleted.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::nextLogIdentifier): Deleted.
        * html/HTMLMediaElement.h:
        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::PlatformMediaSession):
        (WebCore::nextLogIdentifier): Deleted.
        * platform/audio/PlatformMediaSession.h:
        * platform/graphics/IntSize.cpp:
        (WebCore::IntSize::toJSONObject const):
        (WebCore::IntSize::toJSONString const):
        * platform/graphics/IntSize.h:
        (WTF::LogArgument<WebCore::IntSize>::toString):
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::addTrack):
        (WebCore::MediaStreamPrivate::removeTrack):
        (WebCore::MediaStreamPrivate::startProducingData):
        (WebCore::MediaStreamPrivate::stopProducingData):
        (WebCore::MediaStreamPrivate::setCaptureTracksMuted):
        (WebCore::MediaStreamPrivate::trackMutedChanged):
        (WebCore::MediaStreamPrivate::trackEnabledChanged):
        (WebCore::MediaStreamPrivate::trackStarted):
        (WebCore::MediaStreamPrivate::trackEnded):
        (WebCore::MediaStreamPrivate::setLogger):
        (WebCore::MediaStreamPrivate::logChannel const):
        * platform/mediastream/MediaStreamPrivate.h:
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::setLogger):
        (WebCore::MediaStreamTrackPrivate::logChannel const):
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::RealtimeIncomingAudioSource):
        (WebCore::RealtimeIncomingAudioSource::logChannel const): Deleted.
        (WebCore::RealtimeIncomingAudioSource::logger const): Deleted.
        * platform/mediastream/RealtimeIncomingAudioSource.h:
        (WebCore::RealtimeIncomingAudioSource::setLogger): Deleted.
        * platform/mediastream/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource):
        (WebCore::RealtimeIncomingVideoSource::logChannel const): Deleted.
        (WebCore::RealtimeIncomingVideoSource::logger const): Deleted.
        * platform/mediastream/RealtimeIncomingVideoSource.h:
        (WebCore::RealtimeIncomingVideoSource::setLogger): Deleted.
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::RealtimeMediaSource):
        (WebCore::RealtimeMediaSource::setInterrupted):
        (WebCore::RealtimeMediaSource::setMuted):
        (WebCore::RealtimeMediaSource::notifyMutedChange):
        (WebCore::RealtimeMediaSource::notifySettingsDidChangeObservers):
        (WebCore::RealtimeMediaSource::videoSampleAvailable):
        (WebCore::RealtimeMediaSource::start):
        (WebCore::RealtimeMediaSource::stop):
        (WebCore::RealtimeMediaSource::captureFailed):
        (WebCore::RealtimeMediaSource::applyConstraint):
        (WebCore::RealtimeMediaSource::supportsConstraints):
        (WebCore::RealtimeMediaSource::applyConstraints):
        (WebCore::RealtimeMediaSource::setSize):
        (WebCore::RealtimeMediaSource::setIntrinsicSize):
        (WebCore::RealtimeMediaSource::setFrameRate):
        (WebCore::RealtimeMediaSource::setAspectRatio):
        (WebCore::RealtimeMediaSource::setFacingMode):
        (WebCore::RealtimeMediaSource::setVolume):
        (WebCore::RealtimeMediaSource::setSampleRate):
        (WebCore::RealtimeMediaSource::setSampleSize):
        (WebCore::RealtimeMediaSource::setEchoCancellation):
        (WebCore::RealtimeMediaSource::setLogger):
        (WebCore::RealtimeMediaSource::logChannel const):
        (WebCore::convertEnumerationToString):
        * platform/mediastream/RealtimeMediaSource.h:
        (WTF::LogArgument<WebCore::RealtimeMediaSource::Type>::toString):
        * platform/mediastream/RealtimeMediaSourceSettings.cpp:
        (WebCore::RealtimeMediaSourceSettings::convertFlagsToString):
        (WebCore::convertEnumerationToString):
        * platform/mediastream/RealtimeMediaSourceSettings.h:
        (WTF::LogArgument<WebCore::RealtimeMediaSourceSettings::VideoFacingMode>::toString):
        (WTF::LogArgument<OptionSet<WebCore::RealtimeMediaSourceSettings::Flag>>::toString):
        * platform/mediastream/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::RealtimeOutgoingAudioSource):
        (WebCore::RealtimeOutgoingAudioSource::logChannel const):
        (WebCore::RealtimeOutgoingAudioSource::logger const): Deleted.
        * platform/mediastream/RealtimeOutgoingAudioSource.h:
        (WebCore::RealtimeOutgoingAudioSource::setLogger): Deleted.
        * platform/mediastream/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::RealtimeOutgoingVideoSource):
        (WebCore::RealtimeOutgoingVideoSource::sendOneBlackFrame):
        (WebCore::RealtimeOutgoingVideoSource::sendFrame):
        (WebCore::RealtimeOutgoingVideoSource::logChannel const):
        (WebCore::RealtimeOutgoingVideoSource::logger const): Deleted.
        * platform/mediastream/RealtimeOutgoingVideoSource.h:
        (WebCore::RealtimeOutgoingVideoSource::setLogger): Deleted.
        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::setSizeAndFrameRate):
        (WebCore::SizeAndFrameRate::toJSONObject const):
        (WebCore::SizeAndFrameRate::toJSONString const):
        * platform/mediastream/RealtimeVideoSource.h:
        (WTF::LogArgument<WebCore::SizeAndFrameRate>::toString):
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::clearSession):
        (WebCore::AVVideoCaptureSource::startProducingData):
        (WebCore::AVVideoCaptureSource::stopProducingData):
        (WebCore::AVVideoCaptureSource::setSizeAndFrameRateWithPreset):
        (WebCore::AVVideoCaptureSource::setupSession):
        (WebCore::AVVideoCaptureSource::frameDurationForFrameRate):
        (WebCore::AVVideoCaptureSource::setupCaptureSession):
        (WebCore::AVVideoCaptureSource::captureSessionIsRunningDidChange):
        (WebCore::AVVideoCaptureSource::captureDeviceSuspendedDidChange):
        (WebCore::AVVideoCaptureSource::captureSessionRuntimeError):
        (WebCore::AVVideoCaptureSource::captureSessionBeginInterruption):
        (WebCore::AVVideoCaptureSource::captureSessionEndInterruption):
        (WebCore::AVVideoCaptureSource::deviceDisconnected):
        (-[WebCoreAVVideoCaptureSourceObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[WebCoreAVVideoCaptureSourceObserver deviceConnectedDidChange:]):
        (-[WebCoreAVVideoCaptureSourceObserver sessionRuntimeError:]):
        (-[WebCoreAVVideoCaptureSourceObserver beginSessionInterrupted:]):
        (-[WebCoreAVVideoCaptureSourceObserver endSessionInterrupted:]):
        (WebCore::AVVideoCaptureSource::initializeSession): Deleted.
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::setupAudioUnit):
        (WebCore::CoreAudioSharedUnit::verifyIsCapturing):
        (WebCore::CoreAudioSharedUnit::captureFailed):
        (WebCore::CoreAudioCaptureSource::initializeToStartProducingData):
        (WebCore::CoreAudioCaptureSource::addEchoCancellationSource):
        (WebCore::CoreAudioCaptureSource::removeEchoCancellationSource):
        (WebCore::CoreAudioCaptureSource::startProducingData):
        (WebCore::CoreAudioCaptureSource::stopProducingData):
        (WebCore::CoreAudioCaptureSource::scheduleReconfiguration):
        (WebCore::CoreAudioCaptureSource::beginInterruption):
        (WebCore::CoreAudioCaptureSource::endInterruption):
        * platform/mediastream/mac/CoreAudioCaptureSource.h:
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
        (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream):
        (WebCore::ScreenDisplayCaptureSourceMac::startProducingData):
        (WebCore::ScreenDisplayCaptureSourceMac::stopProducingData):
        (WebCore::ScreenDisplayCaptureSourceMac::startDisplayStream):

2019-03-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: remove agent as observer when disabling
        https://bugs.webkit.org/show_bug.cgi?id=195825
        <rdar://problem/48940255>

        Reviewed by Joseph Pecoraro.

        No change in functionality.

        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::disable):

2019-03-15  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r239814): Most classes that user Timer have 7 bytes of padding after the Timer
        https://bugs.webkit.org/show_bug.cgi?id=194196

        Reviewed by Simon Fraser.

        Use std::nan as the value of m_unalignedNextFireTime to indicate the timer had been deleted
        instead of having a dedicated boolean, which consumes 7 extra bytes for padding.

        Note that some code in WebKit uses +Infinity as a fire time so we can't use that.

        * platform/Timer.cpp:
        (WebCore::TimerBase::TimerBase):
        (WebCore::TimerBase::~TimerBase):
        (WebCore::TimerBase::setNextFireTime):
        (WebCore::TimerBase::nextUnalignedFireInterval const):
        * platform/Timer.h:

2019-03-15  Sihui Liu  <sihui_liu@apple.com>

        [ Mojave WK1 ] Layout Test storage/indexeddb/database-odd-names.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=190350
        <rdar://problem/45089503>

        Reviewed by Geoffrey Garen.

        Start to use hash for database file names so that the files can work on any filesystem.

        We created v0 folder in IndexedDB directory to put the legacy databases, and v1 folder to put the upgraded 
        databases.

        Tests: TestWebKitAPI.IndexedDB.IndexedDBFileName
               TestWebKitAPI.IndexedDB.IndexedDBFileNameV0
               TestWebKitAPI.IndexedDB.IndexedDBFileNameV1
               TestWebKitAPI.IndexedDB.IndexedDBFileNameAPI
               TestWebKitAPI.IndexedDB.HashCollision

        * Modules/indexeddb/IDBDatabaseIdentifier.cpp:
        (WebCore::IDBDatabaseIdentifier::databaseDirectoryRelativeToRoot const):
        (WebCore::IDBDatabaseIdentifier::databaseDirectoryRelativeToRoot):
        * Modules/indexeddb/IDBDatabaseIdentifier.h:
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::m_quotaManagerGetter):
        (WebCore::IDBServer::IDBServer::performGetAllDatabaseNames):
        (WebCore::IDBServer::removeAllDatabasesForFullOriginPath):
        (WebCore::IDBServer::removeAllDatabasesForOriginPath):
        (WebCore::IDBServer::IDBServer::removeDatabasesModifiedSinceForVersion):
        (WebCore::IDBServer::IDBServer::performCloseAndDeleteDatabasesModifiedSince):
        (WebCore::IDBServer::IDBServer::removeDatabasesWithOriginsForVersion):
        (WebCore::IDBServer::IDBServer::performCloseAndDeleteDatabasesForOrigins):
        (WebCore::IDBServer::IDBServer::computeSpaceUsedForOrigin):
        (WebCore::IDBServer::IDBServer::upgradeFilesIfNecessary):
        * Modules/indexeddb/server/IDBServer.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::SQLiteIDBBackingStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::fullDatabasePathForDirectory):
        (WebCore::IDBServer::SQLiteIDBBackingStore::fullDatabasePath const):
        (WebCore::IDBServer::SQLiteIDBBackingStore::databaseNameFromFile):
        (WebCore::IDBServer::SQLiteIDBBackingStore::fullDatabaseDirectoryWithUpgrade):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getOrEstablishDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::quotaForOrigin const):
        (WebCore::IDBServer::SQLiteIDBBackingStore::databasesSizeForOrigin const):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getBlobRecordsForObjectStoreRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteBackingStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::fullDatabaseDirectory const): Deleted.
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        (WebCore::IDBServer::SQLiteIDBBackingStore::databaseDirectory const):
        * Modules/indexeddb/server/SQLiteIDBTransaction.cpp:
        (WebCore::IDBServer::SQLiteIDBTransaction::moveBlobFilesIfNecessary):
        (WebCore::IDBServer::SQLiteIDBTransaction::deleteBlobFilesIfNecessary):
        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::computeHashForFileName):
        * platform/sql/SQLiteFileSystem.h:

2019-03-15  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] HTMLImageElement::willRespondToMouseClickEvents returns quirk value.
        https://bugs.webkit.org/show_bug.cgi?id=195657
        <rdar://problem/48834987>

        Reviewed by Simon Fraser.

        Images should not trigger hover by default (only when they actually respond to mouse events).

        Test: fast/events/touch/ios/content-observation/visibility-change-with-image-content.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::StyleChangeScope::isConsideredClickable const):

2019-03-15  Jer Noble  <jer.noble@apple.com>

        Add a "supportedConfiguration" dictionary to MediaCapabilitiesDecodingInfo and MediaCapabilitiesEncodingInfo
        https://bugs.webkit.org/show_bug.cgi?id=195763

        Reviewed by Jon Lee.

        Test: media/mediacapabilities/mock-decodingInfo-supportedConfiguration.html

        Add support for a proposed addition to the Media Capabilities spec that would future-proof additional changes
        to Media Capabilities by allowing sites to check exactly what properties were queried by the browser when
        answering a decodeInfo() or enocdeInfo() query.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/mediacapabilities/AudioConfiguration.idl:
        * Modules/mediacapabilities/MediaCapabilities.cpp:
        (WebCore::MediaCapabilities::decodingInfo):
        (WebCore::MediaCapabilities::encodingInfo):
        * 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/VideoConfiguration.idl:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/MediaCapabilitiesDecodingInfo.h: Copied from Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h.
        (WebCore::MediaCapabilitiesDecodingInfo::MediaCapabilitiesDecodingInfo):
        * platform/MediaCapabilitiesEncodingInfo.h: Copied from Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h.
        (WebCore::MediaCapabilitiesEncodingInfo::MediaCapabilitiesEncodingInfo):
        * platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp:
        (WebCore::createMediaPlayerDecodingConfigurationCocoa):
        * platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h:
        * platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.cpp:
        (WebCore::createMediaPlayerDecodingConfigurationGStreamer):
        * platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.h:
        * platform/mediacapabilities/MediaEngineConfigurationFactory.cpp:
        (WebCore::MediaEngineConfigurationFactory::createDecodingConfiguration):
        (WebCore::MediaEngineConfigurationFactory::createEncodingConfiguration):
        * platform/mediacapabilities/MediaEngineConfigurationFactory.h:
        * platform/mock/MediaEngineConfigurationFactoryMock.cpp:
        (WebCore::MediaEngineConfigurationFactoryMock::createDecodingConfiguration):
        (WebCore::MediaEngineConfigurationFactoryMock::createEncodingConfiguration):
        * platform/mock/MediaEngineConfigurationFactoryMock.h:

2019-03-15  Antti Koivisto  <antti@apple.com>

        Use Region for event region even when it is a rectangle
        https://bugs.webkit.org/show_bug.cgi?id=195803

        Reviewed by Simon Fraser.

        Region type is now optimized for the common single-rectangle case so we can simplify code.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::setEventRegion):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::eventRegion const):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setEventRegion):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):

2019-03-15  Jer Noble  <jer.noble@apple.com>

        Unreviewed unified build fix: GPUBindGroup has a default public constructor and destructor, so all its member
        variables must be fully defined.

        * platform/graphics/gpu/GPUBindGroup.h:

2019-03-15  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Broker access to Speech Synthesis
        https://bugs.webkit.org/show_bug.cgi?id=195645
        <rdar://problem/35369026>

        Reviewed by Brent Fulgham.

        To be able to close the connection to the speech synthesis daemon in the WebContent process,
        speech synthesis should be performed in the UI process. This patch forwards speech synthesis
        requests to the UI process by sending messages. On the UI process side, the speech synthesis
        is performed by simply using the existing platform speech synthesizer. Speech synthesis
        events are sent back to the WebContent process. All messages are async, except for the
        message to get the list of available voices.

        No new tests, covered by existing tests.

        * Modules/speech/DOMWindowSpeechSynthesis.cpp:
        (WebCore::DOMWindowSpeechSynthesis::speechSynthesis):
        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::create):
        (WebCore::SpeechSynthesis::SpeechSynthesis):
        (WebCore::SpeechSynthesis::setPlatformSynthesizer):
        (WebCore::SpeechSynthesis::getVoices):
        (WebCore::SpeechSynthesis::startSpeakingImmediately):
        (WebCore::SpeechSynthesis::cancel):
        (WebCore::SpeechSynthesis::pause):
        (WebCore::SpeechSynthesis::resume):
        (WebCore::SpeechSynthesis::boundaryEventOccurred):
        (WebCore::SpeechSynthesis::didStartSpeaking):
        (WebCore::SpeechSynthesis::didFinishSpeaking):
        (WebCore::SpeechSynthesis::didPauseSpeaking):
        (WebCore::SpeechSynthesis::didResumeSpeaking):
        (WebCore::SpeechSynthesis::speakingErrorOccurred):
        (WebCore::SpeechSynthesis::voicesChanged):
        * Modules/speech/SpeechSynthesis.h:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::speechSynthesisClient const):
        * page/PageConfiguration.cpp:
        * page/PageConfiguration.h:
        * page/SpeechSynthesisClient.h: Added.
        * platform/PlatformSpeechSynthesisUtterance.h:
        * platform/PlatformSpeechSynthesizer.h:
        * platform/ios/PlatformSpeechSynthesizerIOS.mm:
        (-[WebSpeechSynthesisWrapper speechSynthesizer:willSpeakRangeOfSpeechString:utterance:]):
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper speechSynthesizer:willSpeakWord:ofString:]):
        * platform/mock/PlatformSpeechSynthesizerMock.cpp:
        (WebCore::PlatformSpeechSynthesizerMock::speak):

2019-03-15  Antti Koivisto  <antti@apple.com>

        Try to fix watchOS build.

        * platform/graphics/Region.h:
        (WebCore::Region::Span::decode):

2019-03-15  Simon Fraser  <simon.fraser@apple.com>

        [Async overflow Scrolling] Update positioned node layers when overflows are scrolled
        https://bugs.webkit.org/show_bug.cgi?id=195733
        rdar://problem/11642295

        Reviewed by Antti Koivisto.

        Make ScrollingTree positioned nodes in the two cases where we need them, as
        detected by RenderLayerCompositor::computeCoordinatedPositioningForLayer().

        For "Moves" layers we know that the overflow is not in the z-order ancestor chain,
        so ScrollingTree needs a map of overflow node -> affected positioned nodes which
        notifyRelatedNodesAfterScrollPositionChange() uses to find nodes to update after
        a scroll. Computing these dependent nodes in RenderLayerCompositor() would require
        correct dependency analysis between an overflow layers and "positioned" layers which
        is hard. It's easier to have "positioned" layers figure out which overflow nodes
        affect them, then compute the inverse relationship when the scrolling tree is updated
        which happens in ScrollingTreePositionedNode::commitStateBeforeChildren().

        Tests: scrollingcoordinator/ios/absolute-layer-should-not-move-with-scroll.html
               scrollingcoordinator/ios/relative-layer-should-move-with-scroll.html

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        (WebCore::ScrollingTree::applyLayerPositions):
        (WebCore::ScrollingTree::notifyRelatedNodesAfterScrollPositionChange):
        (WebCore::ScrollingTree::scrollingTreeAsText):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::overflowRelatedNodes):
        * page/scrolling/ScrollingTreeOverflowScrollingNode.cpp:
        (WebCore::ScrollingTreeOverflowScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingTreeOverflowScrollingNode.h:
        * page/scrolling/cocoa/ScrollingTreePositionedNode.mm:
        (WebCore::ScrollingTreePositionedNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreePositionedNode::applyLayerPositions):
        (WebCore::ScrollingTreePositionedNode::relatedNodeScrollPositionDidChange):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::layerContainingBlockCrossesCoordinatedScrollingBoundary):
        (WebCore::layerParentedAcrossCoordinatedScrollingBoundary):
        (WebCore::RenderLayerCompositor::computeCoordinatedPositioningForLayer const):
        (WebCore::collectRelatedCoordinatedScrollingNodes):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForPositioningRole):

2019-03-15  Antti Koivisto  <antti@apple.com>

        Optimize Region for single rectangle case
        https://bugs.webkit.org/show_bug.cgi?id=195743

        Reviewed by Simon Fraser.

        Instrumentation shows vast majority of Region objects consist of a single rectangle. However it always allocates
        the large Shape data structure. This makes it unsuitable to use as a member in any popular objects.

        This patch optimizes the single rectangle case by using only the bounds rectangle to describe it.
        Shape is allocated on demand. This makes it safe to use Region as a data member where a rectangle is the common case.

        The patch also modernizes Region encoding/decoding support.

        * platform/graphics/Region.cpp:
        (WebCore::Region::Region):
        (WebCore::Region::~Region):
        (WebCore::Region::operator=):
        (WebCore::Region::rects const):
        (WebCore::Region::contains const):
        (WebCore::Region::intersects const):
        (WebCore::Region::Shape::Shape):
        (WebCore::Region::Shape::appendSpan):
        (WebCore::Region::dump const):
        (WebCore::Region::intersect):
        (WebCore::Region::unite):
        (WebCore::Region::subtract):
        (WebCore::Region::translate):
        (WebCore::Region::setShape):
        (WebCore::Region::Shape::isValid const): Deleted.
        (WebCore::Region::Shape::swap): Deleted.
        (WebCore::Region::updateBoundsFromShape): Deleted.

        Remove some now unused function.

        * platform/graphics/Region.h:
        (WebCore::Region::isRect const):
        (WebCore::Region::gridSize const):
        (WebCore::Region::copyShape const):
        (WebCore::operator==):
        (WebCore::Region::Span::encode const):
        (WebCore::Region::Span::decode):
        (WebCore::Region::Shape::encode const):
        (WebCore::Region::Shape::decode):
        (WebCore::Region::encode const):
        (WebCore::Region::decode):

        This is now part of type.

        (WebCore::Region::isValid const): Deleted.
        (WebCore::Region::Span::Span): Deleted.
        (WebCore::Region::shapeSegments const): Deleted.
        (WebCore::Region::shapeSpans const): Deleted.
        (WebCore::Region::setShapeSegments): Deleted.
        (WebCore::Region::setShapeSpans): Deleted.
        (WebCore::Region::Shape::segments const): Deleted.
        (WebCore::Region::Shape::spans const): Deleted.
        (WebCore::Region::Shape::setSegments): Deleted.
        (WebCore::Region::Shape::setSpans): Deleted.

        No need to expose these for encoding anymore.

2019-03-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide a way to capture a screenshot of a node from within the page
        https://bugs.webkit.org/show_bug.cgi?id=194279
        <rdar://problem/10731573>

        Reviewed by Joseph Pecoraro.

        Test: inspector/console/console-screenshot.html

        Add `console.screenshot` functionality, which displays a screenshot of a given object (if
        able) within Web Inspector's Console tab. From there, it can be viewed and saved.

        Currently, `console.screenshot` will
         - capture an image of a `Node` (if provided)
         - capture an image of the viewport if nothing is provided

        * page/PageConsoleClient.h:
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::addMessage):
        (WebCore::PageConsoleClient::screenshot): Added.

        * workers/WorkerConsoleClient.h:
        * workers/WorkerConsoleClient.cpp:
        (WebCore::WorkerConsoleClient::screenshot): Added.
        * worklets/WorkletConsoleClient.h:
        * worklets/WorkletConsoleClient.cpp:
        (WebCore::WorkletConsoleClient::screenshot): Added.

        * inspector/CommandLineAPIModuleSource.js:
        (CommandLineAPIImpl.prototype.screenshot): Added.

        * inspector/InspectorInstrumentation.h:

2019-03-14  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Retain PrivateName of Symbol before passing it to operations potentially incurring GC
        https://bugs.webkit.org/show_bug.cgi?id=195791
        <rdar://problem/48806130>

        Reviewed by Mark Lam.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::setupModuleScriptHandlers):

2019-03-14  Brent Fulgham  <bfulgham@apple.com>

        Move CoreCrypto SPI declarations to an appropriate PAL/spi header
        https://bugs.webkit.org/show_bug.cgi?id=195754
        <rdar://problem/48591957>

        Reviewed by Jiewen Tan.

        Move the forward declarations of various CoreCrypto SPI to an appropriate PAL/spi header.
        Update the const correctness of one function call to match new SDK declaration.

        No tests because there are no changes in behavior.

        * crypto/CommonCryptoUtilities.h:
        * crypto/mac/CryptoAlgorithmHKDFMac.cpp:
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits):

2019-03-14  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: re-enable some leak tests
        https://bugs.webkit.org/show_bug.cgi?id=194806

        Reviewed by Geoffrey Garen.

        Protected JSIDBCursor object when advance/continue request on IDBCursor is not finished, because after the 
        advance operation completes on success, we need to return the same JSIDBCursor object as before the advance, 
        and during the wait for advance operation to complete, we need to return error as the result. 
 
        Covered by existing tests.

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::setGetResult):
        (WebCore::IDBCursor::clearWrappers):
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::stop):
        (WebCore::IDBRequest::setResult):
        (WebCore::IDBRequest::setResultToStructuredClone):
        (WebCore::IDBRequest::setResultToUndefined):
        (WebCore::IDBRequest::willIterateCursor):
        (WebCore::IDBRequest::didOpenOrIterateCursor):
        (WebCore::IDBRequest::clearWrappers):
        * Modules/indexeddb/IDBRequest.h:
        (WebCore::IDBRequest::cursorWrapper):
        * bindings/js/JSIDBRequestCustom.cpp:
        (WebCore::JSIDBRequest::visitAdditionalChildren):
        * bindings/js/JSValueInWrappedObject.h:
        (WebCore::JSValueInWrappedObject::JSValueInWrappedObject):
        (WebCore::JSValueInWrappedObject::operator=):
        (WebCore::JSValueInWrappedObject::clear):

2019-03-14  Shawn Roberts  <sroberts@apple.com>

        Unreviewed, rolling out r242981.

        Causing internal build failures on watch/tv OS

        Reverted changeset:

        "Move CoreCrypto SPI declarations to an appropriate PAL/spi
        header"
        https://bugs.webkit.org/show_bug.cgi?id=195754
        https://trac.webkit.org/changeset/242981

2019-03-14  Sihui Liu  <sihui_liu@apple.com>

        Web process is put to suspended when holding locked WebSQL files
        https://bugs.webkit.org/show_bug.cgi?id=195768

        Reviewed by Geoffrey Garen.

        We need to keep processes active during database close, because SQLite database may run a checkpoint operation
        and lock database files.

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

2019-03-14  Brent Fulgham  <bfulgham@apple.com>

        Move CoreCrypto SPI declarations to an appropriate PAL/spi header
        https://bugs.webkit.org/show_bug.cgi?id=195754
        <rdar://problem/48591957>

        Reviewed by Jiewen Tan.

        Move the forward declarations of various CoreCrypto SPI to an appropriate PAL/spi header.
        Update the const correctness of one function call to match new SDK declaration.

        No tests because there are no changes in behavior.

        * crypto/CommonCryptoUtilities.h:
        * crypto/mac/CryptoAlgorithmHKDFMac.cpp:
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits):

2019-03-14  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Rename SVGProperty to SVGLegacyProperty and rename SVGAnimatedProperty to SVGLegacyAnimatedProperty
        https://bugs.webkit.org/show_bug.cgi?id=195767

        Reviewed by Tim Horton.

        This is a step towards removing the SVG properties tear off objects.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAngle.h:
        (WebCore::SVGAngle::create):
        (WebCore::SVGAngle::SVGAngle):
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::castAnimatedPropertyToActualType):
        * svg/SVGElement.h:
        (WebCore::SVGElement::lookupAnimatedProperty const):
        (WebCore::SVGElement::lookupOrCreateAnimatedProperty):
        (WebCore::SVGElement::lookupOrCreateAnimatedProperties):
        * svg/SVGLength.h:
        (WebCore::SVGLength::create):
        (WebCore::SVGLength::SVGLength):
        * svg/SVGMatrix.h:
        (WebCore::SVGMatrix::create):
        (WebCore::SVGMatrix::SVGMatrix):
        * svg/SVGNumber.h:
        (WebCore::SVGNumber::create):
        (WebCore::SVGNumber::SVGNumber):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::lookupOrCreateDWrapper):
        * svg/SVGPathElement.h:
        * svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::processIncomingListItemValue):
        * svg/SVGPathSegWithContext.h:
        (WebCore::SVGPathSegWithContext::animatedProperty const):
        * svg/SVGPoint.h:
        (WebCore::SVGPoint::create):
        (WebCore::SVGPoint::SVGPoint):
        * svg/SVGPreserveAspectRatio.h:
        (WebCore::SVGPreserveAspectRatio::create):
        (WebCore::SVGPreserveAspectRatio::SVGPreserveAspectRatio):
        * svg/SVGRect.h:
        (WebCore::SVGRect::create):
        (WebCore::SVGRect::SVGRect):
        * svg/SVGTransform.h:
        (WebCore::SVGTransform::create):
        (WebCore::SVGTransform::SVGTransform):
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (WebCore::SVGAnimatedListPropertyTearOff::findItem):
        (WebCore::SVGAnimatedListPropertyTearOff::SVGAnimatedListPropertyTearOff):
        * svg/properties/SVGAnimatedProperty.cpp: Removed.
        * svg/properties/SVGAnimatedProperty.h: Removed.
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h:
        (WebCore::SVGAnimatedStaticPropertyTearOff::SVGAnimatedStaticPropertyTearOff):
        * svg/properties/SVGAttributeAccessor.h:
        (WebCore::SVGAttributeAccessor::lookupOrCreateAnimatedProperty const):
        (WebCore::SVGAttributeAccessor::lookupAnimatedProperty const):
        (WebCore::SVGAttributeAccessor::lookupOrCreateAnimatedProperties const):
        (WebCore::SVGAnimatedAttributeAccessor::lookupOrCreateAnimatedProperty):
        (WebCore::SVGAnimatedAttributeAccessor::lookupAnimatedProperty):
        * svg/properties/SVGAttributeOwnerProxy.h:
        * svg/properties/SVGAttributeOwnerProxyImpl.h:
        * svg/properties/SVGAttributeRegistry.h:
        (WebCore::SVGAttributeRegistry::lookupOrCreateAnimatedProperty const):
        (WebCore::SVGAttributeRegistry::lookupAnimatedProperty const):
        (WebCore::SVGAttributeRegistry::lookupOrCreateAnimatedProperties const):
        (WebCore::SVGAttributeRegistry::lookupOrCreateAnimatedPropertyBaseTypes):
        (WebCore::SVGAttributeRegistry::lookupAnimatedPropertyBaseTypes):
        (WebCore::SVGAttributeRegistry::lookupOrCreateAnimatedPropertiesBaseTypes):
        * svg/properties/SVGLegacyAnimatedProperty.cpp: Copied from Source/WebCore/svg/properties/SVGAnimatedProperty.cpp.
        (WebCore::SVGLegacyAnimatedProperty::SVGLegacyAnimatedProperty):
        (WebCore::SVGLegacyAnimatedProperty::~SVGLegacyAnimatedProperty):
        (WebCore::SVGLegacyAnimatedProperty::commitChange):
        (WebCore::SVGAnimatedProperty::SVGAnimatedProperty): Deleted.
        (WebCore::SVGAnimatedProperty::~SVGAnimatedProperty): Deleted.
        (WebCore::SVGAnimatedProperty::commitChange): Deleted.
        * svg/properties/SVGLegacyAnimatedProperty.h: Copied from Source/WebCore/svg/properties/SVGAnimatedProperty.h.
        (WebCore::SVGLegacyAnimatedProperty::lookupOrCreateAnimatedProperty):
        (WebCore::SVGLegacyAnimatedProperty::lookupAnimatedProperty):
        (WebCore::SVGAnimatedProperty::isAnimating const): Deleted.
        (WebCore::SVGAnimatedProperty::isAnimatedListTearOff const): Deleted.
        (WebCore::SVGAnimatedProperty::contextElement const): Deleted.
        (WebCore::SVGAnimatedProperty::attributeName const): Deleted.
        (WebCore::SVGAnimatedProperty::animatedPropertyType const): Deleted.
        (WebCore::SVGAnimatedProperty::isReadOnly const): Deleted.
        (WebCore::SVGAnimatedProperty::setIsReadOnly): Deleted.
        (WebCore::SVGAnimatedProperty::lookupOrCreateAnimatedProperty): Deleted.
        (WebCore::SVGAnimatedProperty::lookupAnimatedProperty): Deleted.
        (WebCore::SVGAnimatedProperty::animatedPropertyCache): Deleted.
        * svg/properties/SVGLegacyProperty.h: Copied from Source/WebCore/svg/properties/SVGProperty.h.
        * svg/properties/SVGListProperty.h:
        * svg/properties/SVGProperty.h: Removed.
        * svg/properties/SVGPropertyTearOff.h:
        (WebCore::SVGPropertyTearOff::create):
        (WebCore::SVGPropertyTearOff::animatedProperty const):
        (WebCore::SVGPropertyTearOff::setAnimatedProperty):
        (WebCore::SVGPropertyTearOff::SVGPropertyTearOff):

2019-03-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r242963.

        Breaks watchOS build.

        Reverted changeset:

        "Move CommonCrypto SPI declarations to an appropriate PAL/spi
        header"
        https://bugs.webkit.org/show_bug.cgi?id=195754
        https://trac.webkit.org/changeset/242963

2019-03-14  Chris Dumez  <cdumez@apple.com>

        Unreviewed, update xcfilelist files as they are out of sync.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:

2019-03-14  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Updates to GPUCommandBuffer for new GPUCommandEncoder concept
        https://bugs.webkit.org/show_bug.cgi?id=195083
        <rdar://problem/48423591>

        Reviewed by Dean Jackson.

        Fixing build error and re-introducing rolled-out changes.
        WebGPUCommandBuffer now represents a completed GPUCommandBuffer that can only be used in queue submits. The previous WebGPUCommandBuffer
        is now WebGPUCommandEncoder.

        Affected Web GPU tests updated to match new API.

        New files and symbols:
        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

        Implement new WebGPUCommandBuffer, now just a DOM object carrier for a finished GPUCommandBuffer:
        * Modules/webgpu/WebGPUCommandBuffer.cpp:
        (WebCore::WebGPUCommandBuffer::create):
        (WebCore::WebGPUCommandBuffer::WebGPUCommandBuffer):
        (WebCore::WebGPUBufferCopyView::tryCreateGPUBufferCopyView const): Deleted.
        (WebCore::WebGPUTextureCopyView::tryCreateGPUTextureCopyView const): Deleted.
        (WebCore::WebGPUCommandBuffer::beginRenderPass): Deleted.
        (WebCore::WebGPUCommandBuffer::copyBufferToBuffer): Deleted.
        (WebCore::WebGPUCommandBuffer::copyBufferToTexture): Deleted.
        (WebCore::WebGPUCommandBuffer::copyTextureToBuffer): Deleted.
        (WebCore::WebGPUCommandBuffer::copyTextureToTexture): Deleted.
        * Modules/webgpu/WebGPUCommandBuffer.h:
        (WebCore::WebGPUCommandBuffer::commandBuffer):
        (WebCore::WebGPUCommandBuffer::commandBuffer const): Deleted.
        * Modules/webgpu/WebGPUCommandBuffer.idl:

        Rename old WebGPUCommandBuffer to WebGPUCommandEncoder:
        * Modules/webgpu/WebGPUCommandEncoder.cpp: Copied from Source/WebCore/Modules/webgpu/WebGPUCommandBuffer.cpp.
        (WebCore::WebGPUBufferCopyView::tryCreateGPUBufferCopyView const):
        (WebCore::WebGPUTextureCopyView::tryCreateGPUTextureCopyView const):
        (WebCore::WebGPUCommandEncoder::create):
        (WebCore::WebGPUCommandEncoder::WebGPUCommandEncoder):
        (WebCore::WebGPUCommandEncoder::beginRenderPass):
        (WebCore::WebGPUCommandEncoder::copyBufferToBuffer):
        (WebCore::WebGPUCommandEncoder::copyBufferToTexture):
        (WebCore::WebGPUCommandEncoder::copyTextureToBuffer):
        (WebCore::WebGPUCommandEncoder::copyTextureToTexture):
        (WebCore::WebGPUCommandEncoder::finish): Added. "Completes" this and invalidates it. Returns its GPUCommandBuffer, ready for submission.
        * Modules/webgpu/WebGPUCommandEncoder.h: Copied from Source/WebCore/Modules/webgpu/WebGPUCommandBuffer.h.
        * Modules/webgpu/WebGPUCommandEncoder.idl: Copied from Source/WebCore/Modules/webgpu/WebGPUCommandBuffer.idl.
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createCommandEncoder const): Renamed fom createCommandBuffer. Now returns non-nullable.
        (WebCore::WebGPUDevice::createCommandBuffer const): Deleted.
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDevice.idl:
        * Modules/webgpu/WebGPUProgrammablePassEncoder.cpp:
        (WebCore::WebGPUProgrammablePassEncoder::WebGPUProgrammablePassEncoder):
        (WebCore::WebGPUProgrammablePassEncoder::endPass): No longer returns the original WebGPUCommandBuffer.
        (WebCore::WebGPUProgrammablePassEncoder::setBindGroup const):
        (WebCore::WebGPUProgrammablePassEncoder::setPipeline):
        * Modules/webgpu/WebGPUProgrammablePassEncoder.h:
        * Modules/webgpu/WebGPUProgrammablePassEncoder.idl:
        * Modules/webgpu/WebGPUQueue.cpp:
        (WebCore::WebGPUQueue::submit): Replace unnecessary rvalue reference parameter.
        * Modules/webgpu/WebGPUQueue.h:
        * Modules/webgpu/WebGPUQueue.idl:
        * Modules/webgpu/WebGPURenderPassEncoder.cpp:
        (WebCore::WebGPURenderPassEncoder::create):
        (WebCore::WebGPURenderPassEncoder::WebGPURenderPassEncoder):
        (WebCore::WebGPURenderPassEncoder::setVertexBuffers):
        (WebCore::WebGPURenderPassEncoder::draw):
        (WebCore::WebGPURenderPassEncoder::passEncoder const): Now returns a pointer since it is properly backed by a RefPtr.
        * Modules/webgpu/WebGPURenderPassEncoder.h:
        * Modules/webgpu/WebGPUSwapChain.cpp:
        (WebCore::WebGPUSwapChain::getCurrentTexture): No longer invalidates m_currentTexture. Doh!
        * platform/graphics/gpu/GPUCommandBuffer.h: Missing includes for the *CopyView structs.
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::tryCreateCommandBuffer const): Renamed from createCommandBuffer.
        (WebCore::GPUDevice::createCommandBuffer): Deleted.
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm:
        (WebCore::GPUCommandBuffer::tryCreate): Renamed from create.
        (WebCore::GPUCommandBuffer::create): Deleted.

2019-03-14  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Enum cleanup
        https://bugs.webkit.org/show_bug.cgi?id=195766

        Reviewed by Myles C. Maxfield.

        Clean up enum implementations in Web GPU. Enums referenced by only one class now share implementation files with that class to reduce clutter.
        
        No change in behavior.

        * DerivedSources.make:
        * Modules/webgpu/GPUBindGroupLayoutBinding.h:
        * Modules/webgpu/GPUBindGroupLayoutBinding.idl:
        * Modules/webgpu/GPUInputStateDescriptor.idl:
        * Modules/webgpu/GPURequestAdapterOptions.idl:
        * Modules/webgpu/GPUSamplerDescriptor.idl:
        * Modules/webgpu/GPUTextureDescriptor.idl:
        * Modules/webgpu/GPUTextureDimension.idl: Removed.
        * Modules/webgpu/GPUVertexAttributeDescriptor.idl:
        * Modules/webgpu/GPUVertexInputDescriptor.idl:
        * Modules/webgpu/WebGPUBindGroupDescriptor.cpp:
        (WebCore::validateBufferBindingType):
        * Modules/webgpu/WebGPURenderPipelineDescriptor.h:
        * Modules/webgpu/WebGPURenderPipelineDescriptor.idl:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/GPUInputStateDescriptor.h:
        * platform/graphics/gpu/GPURequestAdapterOptions.h:
        * platform/graphics/gpu/GPUSamplerDescriptor.h:
        * platform/graphics/gpu/GPUTextureDescriptor.h:
        * platform/graphics/gpu/GPUTextureDimension.h: Removed.
        * platform/graphics/gpu/GPUVertexAttributeDescriptor.h:
        * platform/graphics/gpu/GPUVertexInputDescriptor.h:
        * platform/graphics/gpu/cocoa/GPUBindGroupLayoutMetal.mm:
        (WebCore::MTLDataTypeForBindingType):
        * platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm:
        (WebCore::GPUBindGroup::tryCreate):
        * platform/graphics/gpu/cocoa/GPUDeviceMetal.mm:
        (WebCore::GPUDevice::create):
        * platform/graphics/gpu/cocoa/GPUSamplerMetal.mm:
        (WebCore::mtlAddressModeForAddressMode):
        (WebCore::mtlMinMagFilterForFilterMode):
        (WebCore::mtlMipFilterForFilterMode):

2019-03-14  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Use enum class for AnimationMode
        https://bugs.webkit.org/show_bug.cgi?id=195762

        Reviewed by Tim Horton.

        Convert AnimationMode into an enum class.

        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::calculateFromAndByValues):
        (WebCore::SVGAnimateElementBase::isAdditive const):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::calculateFromAndByValues):
        (WebCore::SVGAnimateMotionElement::calculateAnimatedValue):
        (WebCore::SVGAnimateMotionElement::updateAnimationMode):
        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedBoolean.cpp:
        (WebCore::SVGAnimatedBooleanAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedColor.cpp:
        (WebCore::SVGAnimatedColorAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedEnumeration.cpp:
        (WebCore::SVGAnimatedEnumerationAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedInteger.cpp:
        (WebCore::SVGAnimatedIntegerAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumber.cpp:
        (WebCore::SVGAnimatedNumberAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedPointList.cpp:
        (WebCore::SVGAnimatedPointListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedRect.cpp:
        (WebCore::SVGAnimatedRectAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::calculateAnimatedValue):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::updateAnimationMode):
        (WebCore::SVGAnimationElement::isAdditive const):
        (WebCore::SVGAnimationElement::isAccumulated const):
        (WebCore::SVGAnimationElement::calculateKeyTimesForCalcModePaced):
        (WebCore::SVGAnimationElement::startedActiveInterval):
        (WebCore::SVGAnimationElement::updateAnimation):
        * svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::adjustFromToListValues):
        (WebCore::SVGAnimationElement::animateDiscreteType):
        (WebCore::SVGAnimationElement::animateAdditiveNumber):
        * svg/SVGSetElement.cpp:
        (WebCore::SVGSetElement::SVGSetElement):
        (WebCore::SVGSetElement::updateAnimationMode):

2019-03-14  Ryosuke Niwa  <rniwa@webkit.org>

        Storing a Node in Ref/RefPtr inside its destructor results in double delete
        https://bugs.webkit.org/show_bug.cgi?id=195661

        Reviewed by Brent Fulgham.

        Set Node::m_refCount to 1 before calling its virtual destructor.

        This is a security mitigation to prevent any code which ends up storing the node to Ref / RefPtr
        inside the destructor, which is a programming error caught by debug assertions, from triggering
        a double-delete on the same Node.

        Such a code would hit the debug assertions in Node::deref() because m_inRemovedLastRefFunction
        had been set to true by then.

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        * dom/Document.h:
        (WebCore::Document::decrementReferencingNodeCount):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::removedLastRef):

2019-03-14  Brent Fulgham  <bfulgham@apple.com>

        Move CommonCrypto SPI declarations to an appropriate PAL/spi header
        https://bugs.webkit.org/show_bug.cgi?id=195754
        <rdar://problem/48591957>

        Reviewed by Jiewen Tan.

        Move the forward declarations of various CommonCrypto SPI to an appropriate PAL/spi header.
        Update the const correctness of one function call to match new SDK declaration.

        No tests because there are no changes in behavior.

        * crypto/CommonCryptoUtilities.h:
        * crypto/mac/CryptoAlgorithmHKDFMac.cpp:
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits):

2019-03-14  Chris Dumez  <cdumez@apple.com>

        Add WebsitePolicy for the client to specify the device orientation & motion access policy
        https://bugs.webkit.org/show_bug.cgi?id=195750

        Reviewed by Geoffrey Garen.

        Add WebsitePolicy for the client to specify the device orientation & motion access policy. If
        the client already knows access to the device motion & orientation API will be granted / denied,
        it can let WebKit know via WebsitePolicies so that WebKit will not ask the client when the
        permission is requested by JS.

        * dom/DeviceOrientationAndMotionAccessController.cpp:
        (WebCore::DeviceOrientationAndMotionAccessController::shouldAllowAccess):
        (WebCore::DeviceOrientationAndMotionAccessController::setAccessState):
        (WebCore::DeviceOrientationAndMotionAccessController::accessState const):
        * dom/DeviceOrientationAndMotionAccessController.h:
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::deviceOrientationAndMotionAccessState const):
        (WebCore::DocumentLoader::setDeviceOrientationAndMotionAccessState):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::isAllowedToUseDeviceMotionOrientation const):

2019-03-14  Shawn Roberts  <sroberts@apple.com>

        Unreviewed, rolling out r242931.

        Causing internal watch/tv OS build failures

        Reverted changeset:

        "[Web GPU] Updates to GPUCommandBuffer for new GPUCommandQueue
        concept"
        https://bugs.webkit.org/show_bug.cgi?id=195083
        https://trac.webkit.org/changeset/242931

2019-03-14  Chris Dumez  <cdumez@apple.com>

        Device orientation's permission should only require a user gesture to prompt the user
        https://bugs.webkit.org/show_bug.cgi?id=195731

        Reviewed by Geoffrey Garen.

        Device orientation's permission should only require a user gesture to prompt the user. If the
        user already made a decision, we should resolve the promise with this decision, even without
        user gesture.

        This is useful for JS to figure out if they are access to device orientation or not because
        showing UI for the user to give permission.

        No new tests, updated existing tests.

        * dom/DeviceOrientationAndMotionAccessController.cpp:
        (WebCore::DeviceOrientationAndMotionAccessController::shouldAllowAccess):
        * dom/DeviceOrientationAndMotionAccessController.h:
        * dom/DeviceOrientationOrMotionEvent.cpp:
        (WebCore::DeviceOrientationOrMotionEvent::requestPermission):

2019-03-14  Youenn Fablet  <youenn@apple.com>

        Reset storage quota when clearing IDB/Cache API entries
        https://bugs.webkit.org/show_bug.cgi?id=195716

        Reviewed by Chris Dumez.

        On clearing of databases, reset all quota users.
        This will ensure all layout test runs start with a clean state.

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::didPerformCloseAndDeleteDatabases):
        * storage/StorageQuotaManager.h:
        (WebCore::StorageQuotaManager::resetQuota):

2019-03-14  Jer Noble  <jer.noble@apple.com>

        Certain videos are causing a crash when used as WebGL texture
        https://bugs.webkit.org/show_bug.cgi?id=195700
        <rdar://problem/48869347>

        Reviewed by Eric Carlson.

        CFEqual is not null-safe, so perform a null and type check before comparing.

        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::transferFunctionFromString):

2019-03-14  Zalan Bujtas  <zalan@apple.com>

        Cleanup inline boxes when list marker gets blockified
        https://bugs.webkit.org/show_bug.cgi?id=195746
        <rdar://problem/48049175>

        Reviewed by Antti Koivisto.

        Normally when an element gets blockified (inline -> block) we destroy its renderer and construct a new one (RenderInline -> RenderBlock).
        During this process the associated inline boxtree gets destroyed as well. Since RenderListMarker is just a generic RenderBox, the blockifying
        change does not require a new renderer.
        This patch takes care of destroying the inline boxtree when the marker gains block display type. 

        Test: fast/block/float/list-marker-is-float-crash.html

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::styleDidChange):

2019-03-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: provide a way to get the contents of resources
        https://bugs.webkit.org/show_bug.cgi?id=195266
        <rdar://problem/48550911>

        Reviewed by Joseph Pecoraro.

        Test: inspector/audit/run-resources.html

        * inspector/InspectorAuditResourcesObject.idl: Added.
        * inspector/InspectorAuditResourcesObject.h: Added.
        (WebCore::InspectorAuditResourcesObject::create):
        (WebCore::InspectorAuditResourcesObject::Resource):
        (WebCore::InspectorAuditResourcesObject::ResourceContent):
        (WebCore::InspectorAuditResourcesObject::InspectorAuditCachedResourceClient):
        (WebCore::InspectorAuditResourcesObject::InspectorAuditCachedFontClient):
        (WebCore::InspectorAuditResourcesObject::InspectorAuditCachedImageClient):
        (WebCore::InspectorAuditResourcesObject::InspectorAuditCachedRawResourceClient):
        (WebCore::InspectorAuditResourcesObject::InspectorAuditCachedStyleSheetClient):
        (WebCore::InspectorAuditResourcesObject::InspectorAuditCachedSVGDocumentClient):
        * inspector/InspectorAuditResourcesObject.cpp: Added.
        (WebCore::InspectorAuditResourcesObject::InspectorAuditResourcesObject):
        (WebCore::InspectorAuditResourcesObject::getResources):
        (WebCore::InspectorAuditResourcesObject::getResourceContent):
        (WebCore::InspectorAuditResourcesObject::clientForResource):

        * inspector/agents/InspectorPageAgent.h:
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourcesForFrame): Added.
        (WebCore::allResourcesURLsForFrame):
        Moved a file static function to be a class static function so it can be used elsewhere.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-03-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: Console: getEventListeners should work for any EventTarget
        https://bugs.webkit.org/show_bug.cgi?id=195713

        Reviewed by Joseph Pecoraro.

        Test: inspector/console/command-line-api-getEventListeners.html

        * dom/EventTarget.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::eventTypes): Added.

        * inspector/CommandLineAPIHost.idl:
        * inspector/CommandLineAPIHost.h:
        (WebCore::CommandLineAPIHost::init):
        * inspector/CommandLineAPIHost.cpp:
        (WebCore::CommandLineAPIHost::disconnect):
        (WebCore::CommandLineAPIHost::getEventListeners):
        (WebCore::listenerEntriesFromListenerInfo): Deleted.

        * inspector/CommandLineAPIModuleSource.js:
        (CommandLineAPIImpl.prototype.getEventListeners):

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):

2019-03-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: Styles: `::-webkit-scrollbar*` rules aren't shown
        https://bugs.webkit.org/show_bug.cgi?id=195123
        <rdar://problem/48450148>

        Reviewed by Joseph Pecoraro.

        Test: inspector/css/getMatchedStylesForNode.html

        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::protocolValueForPseudoId): Added.
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):

2019-03-13  Benjamin Poulain  <benjamin@webkit.org>

        Fix the argument type of RenderView::resumePausedImageAnimationsIfNeeded()
        https://bugs.webkit.org/show_bug.cgi?id=195659

        Reviewed by Saam Barati.

        The two callers of resumePausedImageAnimationsIfNeeded() both get the IntRect
        as a reference. The rect was going on the stack then used as a reference again.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::resumePausedImageAnimationsIfNeeded):
        * rendering/RenderView.h:

2019-03-13  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Stop content observation when content calls preventDefault() on touch events
        https://bugs.webkit.org/show_bug.cgi?id=195724
        <rdar://problem/48873456>

        Reviewed by Simon Fraser.

        Call willNotProceedWithClick on preventDefault. This is very similar to the long press case.

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::willNotProceedWithClick):
        (WebCore::ContentChangeObserver::didRecognizeLongPress):
        (WebCore::ContentChangeObserver::didPreventDefaultForEvent):
        * page/ios/ContentChangeObserver.h:

2019-03-13  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Updates to GPUCommandBuffer for new GPUCommandQueue concept
        https://bugs.webkit.org/show_bug.cgi?id=195083
        <rdar://problem/48423591>

        Reviewed by Dean Jackson.

        WebGPUCommandBuffer now represents a completed GPUCommandBuffer that can only be used in queue submits. The previous WebGPUCommandBuffer
        is now WebGPUCommandEncoder.

        Affected Web GPU tests updated to match new API.

        New files and symbols:
        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

        Implement new WebGPUCommandBuffer, now just a DOM object carrier for a finished GPUCommandBuffer:
        * Modules/webgpu/WebGPUCommandBuffer.cpp:
        (WebCore::WebGPUCommandBuffer::create):
        (WebCore::WebGPUCommandBuffer::WebGPUCommandBuffer):
        (WebCore::WebGPUBufferCopyView::tryCreateGPUBufferCopyView const): Deleted.
        (WebCore::WebGPUTextureCopyView::tryCreateGPUTextureCopyView const): Deleted.
        (WebCore::WebGPUCommandBuffer::beginRenderPass): Deleted.
        (WebCore::WebGPUCommandBuffer::copyBufferToBuffer): Deleted.
        (WebCore::WebGPUCommandBuffer::copyBufferToTexture): Deleted.
        (WebCore::WebGPUCommandBuffer::copyTextureToBuffer): Deleted.
        (WebCore::WebGPUCommandBuffer::copyTextureToTexture): Deleted.
        * Modules/webgpu/WebGPUCommandBuffer.h:
        (WebCore::WebGPUCommandBuffer::commandBuffer):
        (WebCore::WebGPUCommandBuffer::commandBuffer const): Deleted.
        * Modules/webgpu/WebGPUCommandBuffer.idl:

        Rename old WebGPUCommandBuffer to WebGPUCommandEncoder:
        * Modules/webgpu/WebGPUCommandEncoder.cpp: Copied from Source/WebCore/Modules/webgpu/WebGPUCommandBuffer.cpp.
        (WebCore::WebGPUBufferCopyView::tryCreateGPUBufferCopyView const):
        (WebCore::WebGPUTextureCopyView::tryCreateGPUTextureCopyView const):
        (WebCore::WebGPUCommandEncoder::create):
        (WebCore::WebGPUCommandEncoder::WebGPUCommandEncoder):
        (WebCore::WebGPUCommandEncoder::beginRenderPass):
        (WebCore::WebGPUCommandEncoder::copyBufferToBuffer):
        (WebCore::WebGPUCommandEncoder::copyBufferToTexture):
        (WebCore::WebGPUCommandEncoder::copyTextureToBuffer):
        (WebCore::WebGPUCommandEncoder::copyTextureToTexture):
        (WebCore::WebGPUCommandEncoder::finish): Added. "Completes" this and invalidates it. Returns its GPUCommandBuffer, ready for submission.
        * Modules/webgpu/WebGPUCommandEncoder.h: Copied from Source/WebCore/Modules/webgpu/WebGPUCommandBuffer.h.
        * Modules/webgpu/WebGPUCommandEncoder.idl: Copied from Source/WebCore/Modules/webgpu/WebGPUCommandBuffer.idl.
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createCommandEncoder const): Renamed fom createCommandBuffer. Now returns non-nullable.
        (WebCore::WebGPUDevice::createCommandBuffer const): Deleted.
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDevice.idl:
        * Modules/webgpu/WebGPUProgrammablePassEncoder.cpp:
        (WebCore::WebGPUProgrammablePassEncoder::WebGPUProgrammablePassEncoder):
        (WebCore::WebGPUProgrammablePassEncoder::endPass): No longer returns the original WebGPUCommandBuffer.
        (WebCore::WebGPUProgrammablePassEncoder::setBindGroup const):
        (WebCore::WebGPUProgrammablePassEncoder::setPipeline):
        * Modules/webgpu/WebGPUProgrammablePassEncoder.h:
        * Modules/webgpu/WebGPUProgrammablePassEncoder.idl:
        * Modules/webgpu/WebGPUQueue.cpp:
        (WebCore::WebGPUQueue::submit): Replace unnecessary rvalue reference parameter.
        * Modules/webgpu/WebGPUQueue.h:
        * Modules/webgpu/WebGPUQueue.idl:
        * Modules/webgpu/WebGPURenderPassEncoder.cpp:
        (WebCore::WebGPURenderPassEncoder::create):
        (WebCore::WebGPURenderPassEncoder::WebGPURenderPassEncoder):
        (WebCore::WebGPURenderPassEncoder::setVertexBuffers):
        (WebCore::WebGPURenderPassEncoder::draw):
        (WebCore::WebGPURenderPassEncoder::passEncoder const): Now returns a pointer since it is properly backed by a RefPtr.
        * Modules/webgpu/WebGPURenderPassEncoder.h:
        * Modules/webgpu/WebGPUSwapChain.cpp:
        (WebCore::WebGPUSwapChain::getCurrentTexture): No longer invalidates m_currentTexture. Doh!
        * platform/graphics/gpu/GPUCommandBuffer.h: Missing includes for the *CopyView structs.
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::tryCreateCommandBuffer const): Renamed from createCommandBuffer.
        (WebCore::GPUDevice::createCommandBuffer): Deleted.
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm:
        (WebCore::GPUCommandBuffer::tryCreate): Renamed from create.
        (WebCore::GPUCommandBuffer::create): Deleted.

2019-03-13  Zalan Bujtas  <zalan@apple.com>

        [WeakPtr] RenderListMarker::m_listItem should be a WeakPtr
        https://bugs.webkit.org/show_bug.cgi?id=195704
        <rdar://problem/48486278>

        Reviewed by Simon Fraser.

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::RenderListMarker):
        (WebCore::RenderListMarker::paint):
        (WebCore::RenderListMarker::layout):
        (WebCore::RenderListMarker::updateContent):
        (WebCore::RenderListMarker::computePreferredLogicalWidths):
        (WebCore::RenderListMarker::lineHeight const):
        (WebCore::RenderListMarker::baselinePosition const):
        (WebCore::RenderListMarker::suffix const):
        (WebCore::RenderListMarker::isInside const):
        (WebCore::RenderListMarker::getRelativeMarkerRect):
        * rendering/RenderListMarker.h:

2019-03-13  Dean Jackson  <dino@apple.com>

        Block all plugins smaller than 5x5px
        https://bugs.webkit.org/show_bug.cgi?id=195702
        <rdar://problem/28435204>

        Reviewed by Sam Weinig.

        Block all plugins that are smaller than a threshold, in this case
        5px x 5px. Other browsers have implemented this for a while, and now
        that we have Intersection Observers, small plugins are no longer
        necessary.

        Test: plugins/small-plugin-blocked.html

        * en.lproj/Localizable.strings: New message for a small plugin.
        * platform/LocalizedStrings.cpp:
        (WebCore::pluginTooSmallText):
        * platform/LocalizedStrings.h:

        * html/HTMLPlugInElement.cpp: Helper function for Internals testing.
        (WebCore::HTMLPlugInElement::isBelowSizeThreshold const):
        * html/HTMLPlugInElement.h:

        * loader/EmptyClients.cpp: Removed an unused function.
        (WebCore::EmptyFrameLoaderClient::recreatePlugin): Deleted.
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoaderClient.h:

        * page/Settings.yaml: Add flag for new feature.

        * rendering/RenderEmbeddedObject.cpp: New unavailability reason for
        embedded objects.
        (WebCore::unavailablePluginReplacementText):
        * rendering/RenderEmbeddedObject.h:
        (WebCore::RenderEmbeddedObject::pluginUnavailabilityReason const):

        * testing/Internals.cpp: Helper function for testing.
        (WebCore::Internals::pluginIsBelowSizeThreshold):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-03-13  Zalan Bujtas  <zalan@apple.com>

        Use RenderBox::previousSiblingBox/nextSiblingBox in RenderMultiColumnFlow
        https://bugs.webkit.org/show_bug.cgi?id=195701
        <rdar://problem/48448658>

        Reviewed by Simon Fraser.

        It's safer to use existing RenderBox functions to get sibling boxes.

        Test: fast/ruby/crash-when-paginated-ruby.html

        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::nextColumnSetOrSpannerSiblingOf):
        (WebCore::RenderMultiColumnFlow::previousColumnSetOrSpannerSiblingOf):

2019-03-13  Keith Rollin  <krollin@apple.com>

        Add support for new StagedFrameworks layout
        https://bugs.webkit.org/show_bug.cgi?id=195543

        Reviewed by Alexey Proskuryakov.

        When creating the WebKit layout for out-of-band Safari/WebKit updates,
        use an optional path prefix when called for.

        No new tests since there should be no observable behavior difference.

        * Configurations/WebCore.xcconfig:

2019-03-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix an edge case where HTMLFormElement::removeFormElement is invoked twice with the same element
        https://bugs.webkit.org/show_bug.cgi?id=195663
        <rdar://problem/48576391>

        Reviewed by Ryosuke Niwa.

        Currently, it's possible for HTMLFormControlElement's destructor to be reentrant. This may happen if the form
        control element is ref'd while carrying out its destructor's logic. This may happen in two places in
        HTMLFormControlElement (didChangeForm and resetDefaultButton), both of which actually don't require ensuring a
        protected reference to the form control element since they should never result in any script execution.

        To fix the bug, convert these strong references into raw pointers, and add ScriptDisallowedScope to ensure that
        we don't change these codepaths in the future, such that they trigger arbitrary script execution.

        Test: fast/forms/remove-associated-element-after-gc.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::didChangeForm):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::resetDefaultButton):

2019-03-13  Daniel Bates  <dabates@apple.com>

        Remove some unnecessary !USE(UIKIT_KEYBOARD_ADDITIONS) guards
        https://bugs.webkit.org/show_bug.cgi?id=195703

        Reviewed by Tim Horton.

        Remove out-of-date comment and unncessary !USE(UIKIT_KEYBOARD_ADDITIONS) guards. Following
        r240604 we now make use of WebCore::windowsKeyCodeForCharCode() even for hardware key events
        when USE(UIKIT_KEYBOARD_ADDITIONS) is enabled.

        No functionality changed. So, no new tests.

        * platform/ios/KeyEventIOS.mm:
        (WebCore::windowsKeyCodeForCharCode):
        * platform/ios/WebEvent.mm:
        (normalizedStringWithAppKitCompatibilityMapping):

2019-03-13  Simon Fraser  <simon.fraser@apple.com>

        Scrolling tree should reposition non-stacking order descendents of overflow:scroll
        https://bugs.webkit.org/show_bug.cgi?id=195608

        Reviewed by Zalan Bujtas.
        
        Step 1: add scrolling tree positioning nodes classes (but don't create them yet).

        Add Scrolling{State,Tree}PositionedNode to track composited layers that have to be repositioned when
        an async overflow:scroll scrolls. There are two instances in which this is necessary, reflected by
        the values of ScrollPositioningBehavior:

        ScrollPositioningBehavior::Moves - a composited layer whose containing block chain includes an
            async overflow scroller, but whose composited (i.e. z-order) parent is outside of the overflow.
            When the overflow scrolls, this layer has to move along with the overflow.

        ScrollPositioningBehavior::Stationary - a composited layer whose containing block chain skips the
            overflow scroller, but whose compositing (z-order) parent is the scroller, or inside the scroller.
            This only applies to position:absolute, on, for example, an overflow:scroll ith opacity.

        PositionedNodes are modeled after Fixed/Sticky nodes, with a new type of layout constraint just called LayoutConstraints.
        
        This patch adds support for PositionedNodes in the scrolling trees, but RenderLayerCompositor::computeCoordinatedPositioningForLayer()
        is just a stub so the new node types aren't created yet.
        
        RenderLayerBacking stores a ScrollingNodeID for the positioning role (just like the other roles). Since the Positioning
        role is about position relative to ancestors, a node with both Positioning and FrameHosting or Scrolling roles treats
        the Positioning node as the parent of the other types. A node should never have both Positioning and ViewportConstrained roles.

        Test: scrollingcoordinator/scrolling-tree/positioned-nodes.html

        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::setPositionedNodeGeometry):
        (WebCore::AsyncScrollingCoordinator::setRelatedOverflowScrollingNodes):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingConstraints.cpp:
        (WebCore::operator<<):
        * page/scrolling/ScrollingConstraints.h:
        (WebCore::LayoutConstraints::LayoutConstraints):
        (WebCore::LayoutConstraints::operator== const):
        (WebCore::LayoutConstraints::operator!= const):
        (WebCore::LayoutConstraints::alignmentOffset const):
        (WebCore::LayoutConstraints::setAlignmentOffset):
        (WebCore::LayoutConstraints::layerPositionAtLastLayout const):
        (WebCore::LayoutConstraints::setLayerPositionAtLastLayout):
        (WebCore::LayoutConstraints::scrollPositioningBehavior const):
        (WebCore::LayoutConstraints::setScrollPositioningBehavior):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::operator<<):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::setPositionedNodeGeometry):
        (WebCore::ScrollingCoordinator::setRelatedOverflowScrollingNodes):
        * page/scrolling/ScrollingCoordinatorTypes.h:
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::isPositionedNode const):
        * page/scrolling/ScrollingStatePositionedNode.cpp: Added.
        (WebCore::ScrollingStatePositionedNode::create):
        (WebCore::ScrollingStatePositionedNode::ScrollingStatePositionedNode):
        (WebCore::ScrollingStatePositionedNode::clone):
        (WebCore::ScrollingStatePositionedNode::setAllPropertiesChanged):
        (WebCore::ScrollingStatePositionedNode::setRelatedOverflowScrollingNodes):
        (WebCore::ScrollingStatePositionedNode::updateConstraints):
        (WebCore::ScrollingStatePositionedNode::dumpProperties const):
        * page/scrolling/ScrollingStatePositionedNode.h: Added.
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::createNode):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::isPositionedNode const):
        * page/scrolling/cocoa/ScrollingTreePositionedNode.h: Copied from Source/WebCore/page/scrolling/cocoa/ScrollingTreeStickyNode.h.
        * page/scrolling/cocoa/ScrollingTreePositionedNode.mm: Added.
        (WebCore::ScrollingTreePositionedNode::create):
        (WebCore::ScrollingTreePositionedNode::ScrollingTreePositionedNode):
        (WebCore::ScrollingTreePositionedNode::~ScrollingTreePositionedNode):
        (WebCore::ScrollingTreePositionedNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreePositionedNode::applyLayerPositions):
        (WebCore::ScrollingTreePositionedNode::relatedNodeScrollPositionDidChange):
        (WebCore::ScrollingTreePositionedNode::dumpProperties const):
        * page/scrolling/cocoa/ScrollingTreeStickyNode.h:
        * page/scrolling/mac/ScrollingTreeMac.cpp:
        (ScrollingTreeMac::createScrollingTreeNode):
        * platform/ScrollTypes.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::coordinatedScrollingRoles const):
        (WebCore::RenderLayerBacking::detachFromScrollingCoordinator):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCoordinatedPositioningForLayer const):
        (WebCore::scrollCoordinationRoleForNodeType):
        (WebCore::RenderLayerCompositor::updateScrollCoordinationForLayer):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForViewportConstrainedRole):
        (WebCore::RenderLayerCompositor::updateScrollingNodeLayers):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForPositioningRole):
        * rendering/RenderLayerCompositor.h:

2019-03-13  Youenn Fablet  <youenn@apple.com>

        Check IDB quota usage through QuotaManager
        https://bugs.webkit.org/show_bug.cgi?id=195302

        Reviewed by Chris Dumez.

        For every write operation, compute an estimate size and check for quota before proceeding.
        When proceeding, store the estimate size in a map.
        If size of the database is to be computed when the task is not done,
        the estimate size will be added to the current size of the databases.
        At the end of the task, the estimate size is removed from the map,
        and the databases size is refreshed.

        This patch implements size estimation for write tasks.
        Put/add operations might overestimate the size
        when an old value will be replaced by a new value.
        In that case, we do not substract the old value size since we do not know it.

        This patch implements database opening by adding a fixed small cost,
        as we do not know whether the database is new or not.

        For the first IDB request, we have not computed the size of the database.
        To do so, we need to go to a background thread and do that file size computation.
        For that purpose, we add support for being-initialized quota user.
        Quota manager is calling whenInitialized on its quota user and will
        delay any quota check requests until its quota user is answering this callback.

        For in process IDB, use the default storage quota per origin and do not increase it.
        Future work should move it to NetworkProcess and implement some quota checking.

        Cache API and IDB quota management are not yet fully unified.
        If IDB is used on start-up, we should check for Cache API storage size.
        Conversely, on Cache API first wite task, even if IDB is not being used,
        we should compute the size of the IDB data for the given origin.

        Test: http/tests/IndexedDB/storage-limit.https.html

        * Modules/indexeddb/server/IDBBackingStore.h:
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::create):
        (WebCore::IDBServer::IDBServer::IDBServer):
        (WebCore::IDBServer::m_quotaManagerGetter):
        (WebCore::IDBServer::IDBServer::QuotaUser::QuotaUser):
        (WebCore::IDBServer::IDBServer::QuotaUser::~QuotaUser):
        (WebCore::IDBServer::IDBServer::QuotaUser::clearSpaceUsed):
        (WebCore::IDBServer::IDBServer::QuotaUser::whenInitialized):
        (WebCore::IDBServer::IDBServer::QuotaUser::initializeSpaceUsed):
        (WebCore::IDBServer::IDBServer::quotaUser):
        (WebCore::IDBServer::IDBServer::startComputingSpaceUsedForOrigin):
        (WebCore::IDBServer::IDBServer::computeSpaceUsedForOrigin):
        (WebCore::IDBServer::IDBServer::finishComputingSpaceUsedForOrigin):
        (WebCore::IDBServer::IDBServer::requestSpace):
        (WebCore::IDBServer::IDBServer::clearSpaceUsed):
        (WebCore::IDBServer::IDBServer::setSpaceUsed):
        (WebCore::IDBServer::IDBServer::increasePotentialSpaceUsed):
        (WebCore::IDBServer::IDBServer::decreasePotentialSpaceUsed):
        * Modules/indexeddb/server/IDBServer.h:
        (WebCore::IDBServer::IDBServer::create):
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::databasesSizeForOrigin const):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::databasesSizeForFolder):
        (WebCore::IDBServer::SQLiteIDBBackingStore::databasesSizeForOrigin const):
        (WebCore::IDBServer::SQLiteIDBBackingStore::maximumSize const):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::estimateSize):
        (WebCore::IDBServer::UniqueIDBDatabase::UniqueIDBDatabase):
        (WebCore::IDBServer::quotaErrorMessageName):
        (WebCore::IDBServer::UniqueIDBDatabase::requestSpace):
        (WebCore::IDBServer::UniqueIDBDatabase::performCurrentOpenOperation):
        (WebCore::IDBServer::UniqueIDBDatabase::storeCallbackOrFireError):
        (WebCore::IDBServer::UniqueIDBDatabase::createObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::createObjectStoreAfterQuotaCheck):
        (WebCore::IDBServer::UniqueIDBDatabase::renameObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::renameObjectStoreAfterQuotaCheck):
        (WebCore::IDBServer::UniqueIDBDatabase::createIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::createIndexAfterQuotaCheck):
        (WebCore::IDBServer::UniqueIDBDatabase::renameIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::renameIndexAfterQuotaCheck):
        (WebCore::IDBServer::UniqueIDBDatabase::putOrAdd):
        (WebCore::IDBServer::UniqueIDBDatabase::putOrAddAfterQuotaCheck):
        (WebCore::IDBServer::UniqueIDBDatabase::postDatabaseTaskReply):
        (WebCore::IDBServer::UniqueIDBDatabase::immediateCloseForUserDelete):
        (WebCore::IDBServer::UniqueIDBDatabase::updateSpaceUsedIfNeeded):
        (WebCore::IDBServer::UniqueIDBDatabase::performErrorCallback):
        (WebCore::IDBServer::UniqueIDBDatabase::performKeyDataCallback):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        (WebCore::IDBServer::UniqueIDBDatabase::server):
        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::create):
        (WebCore::InProcessIDBServer::quotaManager):
        (WebCore::storageQuotaManagerGetter):
        (WebCore::InProcessIDBServer::InProcessIDBServer):
        * Modules/indexeddb/shared/InProcessIDBServer.h:
        * loader/EmptyClients.cpp:
        * storage/StorageQuotaManager.cpp:
        (WebCore::StorageQuotaManager::addUser):
        (WebCore::StorageQuotaManager::requestSpace):
        * storage/StorageQuotaManager.h:
        (WebCore::StorageQuotaManager::defaultQuota):
        (WebCore::StorageQuotaManager::removeUser):
        * storage/StorageQuotaUser.h:
        (WebCore::StorageQuotaUser::whenInitialized):

2019-03-13  Chris Dumez  <cdumez@apple.com>

        Better build fix after r242901.

        Reviewed by Jer Noble.

        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (MediaSessionManagerCocoa::sessionWillBeginPlayback):
        (MediaSessionManagerCocoa::updateNowPlayingInfo):

2019-03-13  Timothy Hatcher  <timothy@apple.com>

        Consolidate ArgumentCodersMac and ArgumentCodersCocoa.
        https://bugs.webkit.org/show_bug.cgi?id=195636
        rdar://problem/45055697

        Reviewed by Ryosuke Niwa.

        * editing/DictionaryPopupInfo.h:
        (WebCore::DictionaryPopupInfo::encodingRequiresPlatformData const): Added.
        * editing/FontAttributes.h:
        (WebCore::FontAttributes::encodingRequiresPlatformData const): Added.

2019-03-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r242901.

        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (MediaSessionManagerCocoa::updateNowPlayingInfo):

2019-03-13  Chris Dumez  <cdumez@apple.com>

        Use a ServiceWorker process per registrable domain
        https://bugs.webkit.org/show_bug.cgi?id=195649

        Reviewed by Youenn Fablet.

        Use a ServiceWorker process per registrable domain instead of one per security origin. This is
        more in line with PSON and avoids launching too many processes.

        * page/ClientOrigin.h:
        (WebCore::ClientOrigin::clientRegistrableDomain const):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::tryInstallContextData):
        (WebCore::SWServer::serverToContextConnectionCreated):
        (WebCore::SWServer::runServiceWorkerIfNecessary):
        (WebCore::SWServer::markAllWorkersForRegistrableDomainAsTerminated):
        (WebCore::SWServer::registerServiceWorkerClient):
        (WebCore::SWServer::unregisterServiceWorkerClient):
        (WebCore::SWServer::needsServerToContextConnectionForRegistrableDomain const):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerToContextConnection.cpp:
        (WebCore::SWServerToContextConnection::SWServerToContextConnection):
        (WebCore::SWServerToContextConnection::~SWServerToContextConnection):
        (WebCore::SWServerToContextConnection::connectionForRegistrableDomain):
        * workers/service/server/SWServerToContextConnection.h:
        (WebCore::SWServerToContextConnection::registrableDomain const):
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::contextConnection):
        * workers/service/server/SWServerWorker.h:
        (WebCore::SWServerWorker::registrableDomain const):

2019-03-13  Chris Dumez  <cdumez@apple.com>

        REGRESSION(PSON, r240660): Navigation over process boundary is flashy when using Cmd-left/right arrow to navigate
        https://bugs.webkit.org/show_bug.cgi?id=195684
        <rdar://problem/48294714>

        Reviewed by Antti Koivisto.

        The issue was caused by us failing to suspend the current page on navigation because the source and
        target WebBackForwardListItem are identical. The source WebBackForwardListItem was wrong.

        When a navigation is triggered by the WebContent process (and not the UIProcess), we create the Navigation
        object in WebPageProxy::decidePolicyForNavigationAction(). For the navigation's targetItem, we use the
        target item identifier provided by the WebContent process via the NavigationActionData. However,
        for the source item, we would use the WebBackForwardList's currentItem in the UIProcess. The issue
        is that the WebBackForwardList's currentItem usually has already been updated to be the target
        item via a WebPageProxy::BackForwardGoToItem() synchronous IPC.

        To avoid raciness and given that the current history management is fragile (as it is managed by
        both the UIProcess and the WebProcess), I am now passing the source item identifier in
        addition to the target item identifier in the NavigationActionData that is sent by the WebProcess.
        This is a lot less error prone, the WebProcess knows more accurately which history items it is going
        from and to.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        (WebCore::FrameLoader::loadItem):
        (WebCore::FrameLoader::retryAfterFailedCacheOnlyMainResourceLoad):
        * loader/FrameLoader.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::recursiveGoToItem):
        * loader/NavigationAction.cpp:
        (WebCore::NavigationAction::setSourceBackForwardItem):
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::sourceBackForwardItemIdentifier const):

2019-03-13  Jer Noble  <jer.noble@apple.com>

        Add AggregateLogger, a Logger specialization for singleton classes.
        https://bugs.webkit.org/show_bug.cgi?id=195644

        Reviewed by Eric Carlson.

        Convert debug logging over to release logging through the use of AggregateLogger.

        * platform/audio/PlatformMediaSession.h:
        (WebCore::PlatformMediaSession::client const):
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::PlatformMediaSessionManager):
        (WebCore::PlatformMediaSessionManager::beginInterruption):
        (WebCore::PlatformMediaSessionManager::endInterruption):
        (WebCore::PlatformMediaSessionManager::addSession):
        (WebCore::PlatformMediaSessionManager::removeSession):
        (WebCore::PlatformMediaSessionManager::sessionWillBeginPlayback):
        (WebCore::PlatformMediaSessionManager::sessionWillEndPlayback):
        (WebCore::PlatformMediaSessionManager::setCurrentSession):
        (WebCore::PlatformMediaSessionManager::applicationWillBecomeInactive const):
        (WebCore::PlatformMediaSessionManager::applicationDidBecomeActive const):
        (WebCore::PlatformMediaSessionManager::applicationDidEnterBackground const):
        (WebCore::PlatformMediaSessionManager::applicationWillEnterForeground const):
        (WebCore::PlatformMediaSessionManager::logChannel const):
        * platform/audio/PlatformMediaSessionManager.h:
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (MediaSessionManagerCocoa::updateSessionState):
        (MediaSessionManagerCocoa::sessionWillBeginPlayback):
        (MediaSessionManagerCocoa::removeSession):
        (MediaSessionManagerCocoa::sessionWillEndPlayback):
        (MediaSessionManagerCocoa::clientCharacteristicsChanged):
        (MediaSessionManagerCocoa::updateNowPlayingInfo):
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::resetRestrictions):
        (WebCore::MediaSessionManageriOS::configureWireLessTargetMonitoring):

2019-03-13  Chris Dumez  <cdumez@apple.com>

        Drop legacy WebCore::toRegistrableDomain() utility function
        https://bugs.webkit.org/show_bug.cgi?id=195637

        Reviewed by Geoffrey Garen.

        Drop legacy toRegistrableDomain() / registrableDomainAreEqual() utility functions.
        Update call sites to use modern RegistrableDomain type instead.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::shouldCrossOriginResourcePolicyCancelLoad):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setFirstPartyForCookies):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::failedToRegisterDeviceMotionEventListener):
        * platform/RegistrableDomain.h:
        (WebCore::registrableDomainsAreEqual):
        * platform/network/ResourceRequestBase.h:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        * platform/network/cocoa/ResourceRequestCocoa.mm:

2019-03-13  Alex Christensen  <achristensen@webkit.org>

        Prevent checked_cf_cast crashes in ResourceResponse::platformCertificateInfo
        https://bugs.webkit.org/show_bug.cgi?id=195686

        Reviewed by Tim Horton.

        This covers up a type confusion bug on some OSes until rdar://problem/48853137 is resolved.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/cocoa/ResourceResponseCocoa.mm:

2019-03-13  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Add support for omxh264enc encoder
        https://bugs.webkit.org/show_bug.cgi?id=195676

        Reviewed by Philippe Normand.

        * platform/mediastream/libwebrtc/GStreamerVideoEncoder.cpp:
        (setup_omxh264enc):
        (set_bitrate_bit_per_sec):
        (gst_webrtc_video_encoder_class_init):

2019-03-13  Antoine Quint  <graouts@apple.com>

        REGRESSION(r240634): Element::hasPointerCapture() passes a JS-controlled value directly into a HashMap as a key
        https://bugs.webkit.org/show_bug.cgi?id=195683
        <rdar://problem/48659950>

        Reviewed by Alex Christensen.

        While PointerID is defined as int32_t, we now use int64_t as the key of the HashMap mapping PointerID to CapturingData so that we use
        a value outside of the int32_t range as a safe empty and removed values, allowing any int32_t to be provided through the API for
        lookup in this HashMap.

        Test: pointerevents/pointer-id-crash.html

        * page/PointerCaptureController.h:

2019-03-12  Brady Eidson  <beidson@apple.com>

        Take UnboundedNetworking assertion when a file upload is in progress.
        https://bugs.webkit.org/show_bug.cgi?id=195497

        Reviewed by Geoff Garen.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::hasUpload const):
        * platform/network/ResourceRequestBase.h:

2019-03-13  Youenn Fablet  <youenn@apple.com>

        Enable libwebrtc logging control through WebCore
        https://bugs.webkit.org/show_bug.cgi?id=195658

        Reviewed by Eric Carlson.

        Add support for WebCore logging of libwebrtc messages.
        This is controlled by WebRTC log channel state and level.
        In case of private browsing mode, any logging is disabled.
        This will stay for the lifetime of the process.
        No change of behavior.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::create):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::doReleaseLogging):
        (WebCore::setLogging):
        (WebCore::computeLogLevel):
        (WebCore::initializePeerConnectionFactoryAndThreads):
        (WebCore::LibWebRTCProvider::setEnableLogging):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:

2019-03-13  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Do not sync encoder on the clock
        https://bugs.webkit.org/show_bug.cgi?id=195673

        we should encode as fast as possible and totally ignore timestamp while
        doing so.

        Reviewed by Philippe Normand.

        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::InitEncode):

2019-03-13  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC]: Use codec setting video height/width as fallback
        https://bugs.webkit.org/show_bug.cgi?id=195675

        Reviewed by Philippe Normand.

        In some cases the frame height and width is not set (not sure why/ in
        what conditions but it happens) so make sure to get the information from
        the VideoCodec when configuring the encoder.

        * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:
        (WebCore::GStreamerVideoDecoder::GStreamerVideoDecoder):
        (WebCore::GStreamerVideoDecoder::GetCapsForFrame):

2019-03-13  Miguel Gomez  <magomez@igalia.com>

        [CoordinatedGraphics] Null dereference in CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=195615

        Reviewed by Carlos Garcia Campos.

        Exit early if we don't receive a valid coordinator.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded):

2019-03-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][PlayStation] Remove WebCore::standardUserAgentForURL
        https://bugs.webkit.org/show_bug.cgi?id=195662

        Reviewed by Ryosuke Niwa.

        WebCore::standardUserAgentForURL is just a stub in Windows port.

        No new tests because there is no behavior change.

        * platform/win/UserAgentWin.cpp:
        (WebCore::standardUserAgentForURL): Deleted.
        * platform/playstation/UserAgentPlayStation.cpp:
        (WebCore::standardUserAgentForURL): Deleted.

2019-03-12  Ross Kirsling  <ross.kirsling@sony.com>

        [Win] Fix a slew of simple clang-cl warnings.
        https://bugs.webkit.org/show_bug.cgi?id=195652

        Reviewed by Don Olmstead.

        * page/AutoscrollController.cpp:
        (WebCore::AutoscrollController::handleMouseReleaseEvent): -Wswitch
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::willSetupSslCtx):
        (WebCore::CurlHandle::appendRequestHeaders): -Wunused-variable
        * platform/network/curl/CurlFormDataStream.cpp:
        (WebCore::CurlFormDataStream::computeContentLength): -Wunused-variable
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::CurlRequest): -Wreorder
        (WebCore::CurlRequest::setupTransfer): -Wunused-variable
        * platform/network/curl/CurlSSLVerifier.cpp:
        (WebCore::CurlSSLVerifier::CurlSSLVerifier):
        * platform/network/curl/CurlSSLVerifier.h: -Wunused-private-field
        * platform/win/LoggingWin.cpp:
        (WebCore::logLevelString): -Wwritable-strings
        * rendering/RenderThemeWin.cpp: -Wunused-const-variable (x2)
        (WebCore::RenderThemeWin::getThemeData): -Wswitch

2019-03-12  Ryosuke Niwa  <rniwa@webkit.org>

        Move the code for determining the need for touch bar quirks to Quirks class
        https://bugs.webkit.org/show_bug.cgi?id=195654

        Reviewed by Brent Fulgham.

        Moved the code to determine whether the touch bar quirks are needed or not from WebKit2.

        * WebCore.xcodeproj/project.pbxproj:
        * page/Quirks.cpp:
        (WebCore::Quirks::isTouchBarUpdateSupressedForHiddenContentEditable const):
        (WebCore::Quirks::isNeverRichlyEditableForTouchBar const):
        * page/Quirks.h:

2019-03-12  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Update GPURenderPipelineDescriptor and add GPUColorStateDescriptor.format
        https://bugs.webkit.org/show_bug.cgi?id=195518
        <rdar://problem/46322356>

        Reviewed by Myles C. Maxfield.

        Upgrade the implementation of GPURenderPipelineDescriptor and GPURenderPipeline and match the updated Web GPU API.
        Add stubs for GPUColorStateDescriptor so attachment format can be provided by GPURenderPipelineDescriptor.

        All affected Web GPU tests updated to cover existing behavior.

        Update file names and symbols:
        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

        Updates to GPURenderPipeline, GPURenderPipelineDescriptor, and its components:
        * Modules/webgpu/GPUColorStateDescriptor.idl: Added. Provide the expected texture format of the render pipeline's color attachments.
        * Modules/webgpu/GPUInputStateDescriptor.idl: Renamed from Source/WebCore/Modules/webgpu/WebGPUInputStateDescriptor.idl.
        * Modules/webgpu/GPUTextureFormat.idl: Update the existing values to match the new style.
        * Modules/webgpu/GPUVertexAttributeDescriptor.idl: Renamed from Source/WebCore/Modules/webgpu/WebGPUVertexAttributeDescriptor.idl.
        * Modules/webgpu/GPUVertexInputDescriptor.idl: Renamed from Source/WebCore/Modules/webgpu/WebGPUVertexInputDescriptor.idl.
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createPipelineLayout const): Remove unnecessary comment.
        (WebCore::WebGPUDevice::createRenderPipeline const): Descriptor validation and conversion moved into WebGPURenderPipelineDescriptor.
        (WebCore::validateAndConvertPipelineStage): Deleted.
        * Modules/webgpu/WebGPUDevice.h: create* functions should not return nullable.
        * Modules/webgpu/WebGPUIndexFormat.h: Removed. Moved into GPUInputStateDescriptor.idl.
        * Modules/webgpu/WebGPUInputStateDescriptor.h: Removed.
        * Modules/webgpu/WebGPUInputStepMode.idl: Removed. Moved into GPUVertexInputDescriptor.idl.
        * Modules/webgpu/WebGPUPipelineLayout.h:
        (WebCore::WebGPUPipelineLayout::pipelineLayout): Getters should return raw references.
        * Modules/webgpu/WebGPUPipelineStageDescriptor.h: Now shares a common base with GPUPipelineStageDescriptor.
        * Modules/webgpu/WebGPURenderPipeline.cpp:
        (WebCore::WebGPURenderPipeline::create):
        (WebCore::WebGPURenderPipeline::WebGPURenderPipeline):
        * Modules/webgpu/WebGPURenderPipeline.h:  Now internally nullable.
        (WebCore::WebGPURenderPipeline::renderPipeline const):
        (WebCore::WebGPURenderPipeline::renderPipeline): Deleted.
        * Modules/webgpu/WebGPURenderPipelineDescriptor.cpp:
        (WebCore::WebGPUPipelineStageDescriptor::asGPUPipelineStageDescriptor const): Validate and convert a WebGPUPipelineStageDescriptor to GPU version.
        (WebCore::WebGPURenderPipelineDescriptor::asGPURenderPipelineDescriptor const): Ditto for WebGPURenderPipelineDescriptor.
        * Modules/webgpu/WebGPURenderPipelineDescriptor.h: Now shares a base class and some instance variables with GPURenderPipelineDescriptor.
        * Modules/webgpu/WebGPURenderPipelineDescriptor.idl: Update GPUPrimitiveTopology for new style and add colorStates.
        * Modules/webgpu/WebGPUShaderModule.idl: Small pilot to test using InterfaceName to easily rename DOM-facing interfaces.
        * Modules/webgpu/WebGPUVertexAttributeDescriptor.h: Removed.
        * Modules/webgpu/WebGPUVertexFormat.idl: Removed. Moved and updated in GPUVertexAttributeDescriptor.idl.
        * Modules/webgpu/WebGPUVertexInputDescriptor.h: Removed.
        * platform/graphics/gpu/GPUInputStateDescriptor.h:
        * platform/graphics/gpu/GPUPipelineStageDescriptor.h:
        (WebCore::GPUPipelineStageDescriptor::GPUPipelineStageDescriptor):
        * platform/graphics/gpu/GPURenderPipelineDescriptor.h: Add shared base class for Web/GPURenderPipelineDescriptor.
        (WebCore::GPURenderPipelineDescriptor::GPURenderPipelineDescriptor):
        * platform/graphics/gpu/GPUTextureFormat.h:
        * platform/graphics/gpu/GPUVertexAttributeDescriptor.h:
        * platform/graphics/gpu/GPUVertexInputDescriptor.h:
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::setFunctionsForPipelineDescriptor): Make fragment required since descriptor validation fails if fragment function is not found right now.
        (WebCore::mtlVertexFormatForGPUVertexFormat): Renamed from validateAndConvertVertexFormatToMTLVertexFormat.
        (WebCore::mtlStepFunctionForGPUInputStepMode): Renamed from validateAndConvertStepModeToMTLStepFunction
        (WebCore::trySetInputStateForPipelineDescriptor):
        (WebCore::trySetColorStatesForColorAttachmentArray):
        (WebCore::tryCreateMtlRenderPipelineState):
        (WebCore::GPURenderPipeline::create):
        (WebCore::validateAndConvertVertexFormatToMTLVertexFormat): Deleted.
        (WebCore::validateAndConvertStepModeToMTLStepFunction): Deleted.
        * platform/graphics/gpu/cocoa/GPUUtilsMetal.mm:
        (WebCore::platformTextureFormatForGPUTextureFormat):
        * platform/graphics/gpu/GPUColorStateDescriptor.h: Added.

        Misc:
        * Modules/webgpu/WebGPUProgrammablePassEncoder.cpp:
        (WebCore::WebGPUProgrammablePassEncoder::setPipeline):
        * Modules/webgpu/WebGPUProgrammablePassEncoder.h:
        * platform/graphics/gpu/GPUProgrammablePassEncoder.h:
        * platform/graphics/gpu/GPURenderPassEncoder.h:
        * platform/graphics/gpu/GPURenderPipeline.h:
        (WebCore::GPURenderPipeline::primitiveTopology const):
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::GPURenderPassEncoder::setPipeline):
        (WebCore::primitiveTypeForGPUPrimitiveTopology):
       
2019-03-12  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Reset state when touchStart does not turn into click.
        https://bugs.webkit.org/show_bug.cgi?id=195603
        <rdar://problem/48796582>

        Reviewed by Simon Fraser.

        Add reset() function to assert and reset the current state.

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::willNotProceedWithClick):
        (WebCore::ContentChangeObserver::adjustObservedState):
        * page/ios/ContentChangeObserver.h:

2019-03-12  Timothy Hatcher  <timothy@apple.com>

        Expose document attributes and body background color through HTMLConverter.
        https://bugs.webkit.org/show_bug.cgi?id=195636
        rdar://problem/45055697

        Reviewed by Tim Horton.

        * editing/cocoa/HTMLConverter.h:
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::convert):
        (WebCore::attributedStringFromRange):
        (WebCore::attributedStringFromSelection):
        (WebCore::attributedStringBetweenStartAndEnd):

2019-03-12  Antti Koivisto  <antti@apple.com>

        Compositing layer that renders two positioned elements should not hit test
        https://bugs.webkit.org/show_bug.cgi?id=195371
        <rdar://problem/48649586>

        Reviewed by Simon Fraser.

        Followup to fix the test case (fast/scrolling/ios/overflow-scroll-overlap-2.html)

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setEventRegion):

        Revert a last minute change (that was done to fix a Mac displaylist test).

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):

        Compute the region on iOS only for now (it is not used on other platforms).

2019-03-12  Dean Jackson  <dino@apple.com>

        [WebGL] WebGLBuffer can be too large
        https://bugs.webkit.org/show_bug.cgi?id=195068
        <rdar://problem/48414289>

        Reviewed by Antoine Quint.

        When creating an element array buffer, make sure to
        test against the maximum size of an ArrayBuffer, rather
        than just assume it can be created.

        Test: fast/canvas/webgl/largeBuffer.html

        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::associateBufferDataImpl):

2019-03-12  Sihui Liu  <sihui_liu@apple.com>

        Layout Test imported/w3c/web-platform-tests/IndexedDB/fire-*-event-exception.html are failing
        https://bugs.webkit.org/show_bug.cgi?id=195581

        Reviewed by Brady Eidson.

        Uncaught exceptions should be handled after IDBRequest dispatches events so that IDBTransaction would stay 
        active during event dispatch.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent):
        (WebCore::IDBRequest::uncaughtExceptionInEventHandler):
        * Modules/indexeddb/IDBRequest.h:

2019-03-12  Sihui Liu  <sihui_liu@apple.com>

        Layout Test imported/w3c/web-platform-tests/IndexedDB/transaction-abort-request-error.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=195570

        Reviewed by Brady Eidson.

        IDBRequest result should be undefined if it is never set.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):

2019-03-12  Youenn Fablet  <youenn@apple.com>

        Rename originsMatch in originSerializationsMatch
        https://bugs.webkit.org/show_bug.cgi?id=195572

        Reviewed by Jiewen Tan.

        In addition to renaming, make use of SecurityOrigin::isSameOriginAs
        where it makes more sense than to compare origin serialization.
        The main difference is that isSameOriginAs will return false for two different unique origins
        while originsSerializationsMatch will not.

        * Modules/credentialmanagement/CredentialsContainer.cpp:
        (WebCore::CredentialsContainer::doesHaveSameOriginAsItsAncestors):
        * Modules/mediastream/RTCController.cpp:
        (WebCore::matchDocumentOrigin):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::certificatesFromConfiguration):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::shouldOpenExternalURLsPolicyToPropagate const):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::shouldUpdateCachedResourceWithCurrentRequest):
        * page/SecurityOrigin.cpp:
        (WebCore::serializedOriginsMatch):
        (WebCore::originsMatch): Deleted.
        * page/SecurityOrigin.h:

2019-03-12  Zalan Bujtas  <zalan@apple.com>

        [Synthetic Click] Dispatch mouseout soon after mouseup
        https://bugs.webkit.org/show_bug.cgi?id=195575
        <rdar://problem/47093049>

        Reviewed by Simon Fraser.

        Let's fire a mouseout event when a click is submitted as the result of a tap. It helps to dismiss content which would otherwise require you to move the mouse (cases like control bar on youtube.com).

        Test: fast/events/touch/ios/content-observation/mouse-out-event-should-fire-on-click.html

        * page/EventHandler.h:
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::dispatchFakeMouseOut):

2019-03-12  Ryosuke Niwa  <rniwa@webkit.org>

        In CachedFrame's constructor, release-assert that DOMWindow still has a frame after page-caching subframes
        https://bugs.webkit.org/show_bug.cgi?id=195609

        Reviewed by Chris Dumez.

        r242677 added release assertions to DOMWindow::suspendForPageCache. But when the first release assert in
        that function is hit, we still can't tell whether active DOM objects are detaching frames, or if creating
        CachedFrame's on one of subframes is causing the frame to go way.

        Add a release assertion immediately after creating CachedFrame on subframes to detect this case.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):

2019-03-12  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Stop content change observation when the touch event turns into long press
        https://bugs.webkit.org/show_bug.cgi?id=195601
        <rdar://problem/48796324>

        Reviewed by Wenson Hsieh.

        Cancel the ongoing content observation (started at touchStart) when the touch event does not turn into a tap gesture.

        Not testable because any subsequent tap would reset the state anyway (though it might be measurable through some code triggering heavy content change).

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::didRecognizeLongPress):
        (WebCore::ContentChangeObserver::willNotProceedWithClick):
        * page/ios/ContentChangeObserver.h:

2019-03-12  Antti Koivisto  <antti@apple.com>

        Compositing layer that renders two positioned elements should not hit test
        https://bugs.webkit.org/show_bug.cgi?id=195371
        <rdar://problem/48649586>

        Reviewed by Simon Fraser.

        Compute and pass an event region for layers if it differs from layer bounds.

        This patch fixes various block overflow and layer expansion cases. It does not handle
        overflowing line boxes yet (it adds tests for those too).

        Test: fast/scrolling/ios/overflow-scroll-overlap-2.html

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::setEventRegion):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::eventRegion):
        * platform/graphics/Region.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setEventRegion):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateEventRegion):

        Pass the region via the main platform layer of the graphics layer.

        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * rendering/PaintInfo.h:
        * rendering/PaintPhase.h:

        Add EventRegion paint phase that computes the region instead of painting anything.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintForegroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase):

        Invoke EventRegion paint phase.

        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):

        Request event region when pointing a layer.

2019-03-12  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][v4l2] Synchronous video texture flushing support
        https://bugs.webkit.org/show_bug.cgi?id=195453

        Reviewed by Xabier Rodriguez-Calvar.

        The v4l2 video decoder currently requires that downstream users of
        the graphics resources complete any pending draw call and release
        resources before returning from the DRAIN query.

        To accomplish this the player monitors the pipeline and whenever a
        v4l2 decoder is added, synchronous video texture flushing support
        is enabled. Additionally and for all decoder configurations, a
        flush is performed before disposing of the player.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::playbinDeepElementAddedCallback):
        Monitor elements added to the decodebin bin.
        (WebCore::MediaPlayerPrivateGStreamer::decodebinElementAdded): Set
        a flag if a v4l2 decoder was added in decodebin.
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Connect
        to the deep-element-added signal so as to monitor pipeline
        topology updates.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        Flush video texture before disposing of the player.
        (WebCore::MediaPlayerPrivateGStreamerBase::flushCurrentBuffer):
        Synchronously flush if the pipeline contains a v4l2 decoder.
        (WebCore::MediaPlayerPrivateGStreamerBase::createGLAppSink): Monitor push events only.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        (WebCore::TextureMapperPlatformLayerProxy::pushNextBuffer): New
        boolean flag used mostly to trigger synchronous flush conditions.
        (WebCore::TextureMapperPlatformLayerProxy::dropCurrentBufferWhilePreservingTexture):
        Optionally drop the current buffer in a synchronous manner. By
        default the method keeps operating asynchronously.
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.h:

2019-03-12  Ryosuke Niwa  <rniwa@webkit.org>

        Move the remaining code to decide whether site specific quirks are needed to Quirks class
        https://bugs.webkit.org/show_bug.cgi?id=195610

        Reviewed by Antti Koivisto.

        Moved the remaining code scattered across WebCore to decide whether a site specific quirk
        is needed or not to Quirks class introduced in r236818.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::needsSignalQuirk): Deleted.
        (WebCore::processInvalidSignal):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::needsMouseFocusableQuirk const):
        * html/HTMLMediaElement.cpp:
        (WebCore::needsAutoplayPlayPauseEventsQuirk): Deleted.
        (WebCore::HTMLMediaElement::dispatchPlayPauseEventsIfNeedsQuirks):
        (WebCore::needsSeekingSupportQuirk): Deleted.
        (WebCore::HTMLMediaElement::supportsSeeking const):
        * html/MediaElementSession.cpp:
        (WebCore::needsArbitraryUserGestureAutoplayQuirk): Deleted.
        (WebCore::needsPerDocumentAutoplayBehaviorQuirk): Deleted.
        (WebCore::MediaElementSession::playbackPermitted const):
        * page/Quirks.cpp:
        (WebCore::allowedAutoplayQuirks): Added.
        (WebCore::Quirks::needsQuirks const): Added.
        (WebCore::Quirks::shouldIgnoreInvalidSignal const): Added.
        (WebCore::Quirks::needsFormControlToBeMouseFocusable const): Added.
        (WebCore::Quirks::needsAutoplayPlayPauseEvents const): Added.
        (WebCore::Quirks::needsSeekingSupportDisabled const): Addd.
        (WebCore::Quirks::needsPerDocumentAutoplayBehavior const): Added.
        (WebCore::Quirks::shouldAutoplayForArbitraryUserGesture const): Added.
        (WebCore::Quirks::hasBrokenEncryptedMediaAPISupportQuirk const): Added.
        (WebCore::Quirks::hasWebSQLSupportQuirk const): Fixed the coding style.
        * page/Quirks.h:

2019-03-12  Enrique Ocaña González  <eocanha@igalia.com>

        [Media][MSE] Don't emit timeUpdate after play() if currentTime hasn't changed
        https://bugs.webkit.org/show_bug.cgi?id=195454

        Reviewed by Jer Noble.

        This change fixes YouTube 2019 MSE Conformance Tests "26. SFRPausedAccuracy"
        and "27. HFRPausedAccuracy".

        The first timeUpdate event after play() is omitted, because currentTime
        doesn't actually change in that scenario.

        Tests 26 and 27 measure the time drift (real time vs. media time) on playback
        and start counting since the first timeUpdate event. In WebKit, that event
        happens at play(), before the pipeline has completed the transition to playing.
        Therefore, the real time inherits this startup delay and the test thinks that
        the player has drifted.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playInternal): Don't emit a timeUpdated event unless currentTime has changed.

2019-03-12  Enrique Ocaña González  <eocanha@igalia.com>

        [EME][GStreamer] Speculative build fix
        https://bugs.webkit.org/show_bug.cgi?id=195614

        Unreviewed speculative WPE build fix after r242776.

        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.h: Added missing include.

2019-03-12  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] remove legacy GStreamer version checks
        https://bugs.webkit.org/show_bug.cgi?id=195552

        Reviewed by Xabier Rodriguez-Calvar.

        We require GStreamer 1.8.x so version checks below that make
        little sense. Also checks for odd minor version numbers make sense
        only for the latest GStreamer git development version.

        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::initializeGStreamerAndRegisterWebKitElements):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createAudioSink):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::ensureGstGLContext):

2019-03-12  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [EME] generateRequest was not using the sanitized init data
        https://bugs.webkit.org/show_bug.cgi?id=195555

        Reviewed by Jer Noble.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::generateRequest): Use sanitized init
        data instead of the original one.

2019-03-12  Rob Buis  <rbuis@igalia.com>

        Implement further CORS restrictions
        https://bugs.webkit.org/show_bug.cgi?id=188644

        Reviewed by Darin Adler.

        Verify that header value length is not greater than 128 [1]. Also implement
        Step 5 of [2] to append values to existing header value when calling
        Headers.append.

        Tests: fetch/api/cors/cors-preflight-not-cors-safelisted.any.html
               fetch/api/cors/cors-preflight-not-cors-safelisted.any.worker.html
               fetch/api/headers/headers-no-cors.window.html

        [1] https://fetch.spec.whatwg.org/#cors-safelisted-request-header
        [2] https://fetch.spec.whatwg.org/#concept-headers-append

        * Modules/fetch/FetchHeaders.cpp:
        (WebCore::canWriteHeader):
        (WebCore::appendToHeaderMap):
        (WebCore::FetchHeaders::remove):
        (WebCore::FetchHeaders::set):
        (WebCore::FetchHeaders::filterAndFill):
        * platform/network/HTTPParsers.cpp:
        (WebCore::isCrossOriginSafeRequestHeader): verify that header length is not greater than 128

2019-03-11  Ryosuke Niwa  <rniwa@webkit.org>

        Remove OS X Server QuickTime plugin quirks
        https://bugs.webkit.org/show_bug.cgi?id=195607

        Reviewed by Brent Fulgham.

        r87244 added a site specific quirk for Mac OS X Sever wiki pages.
        However, the issue has since been resolved as of OS X Mountain Lion,
        of which Apple has ended the support in September 2015.

        Because the latest versions of Safari no longer supports non-Flash plugins,
        the only scenario in which this quirk comes into play is when a third party app
        which embeds WKWebView or WebKitLegacy loaded web pages on a OS X Server
        running OS X Mountain Lion or earlier.

        Given these observations, it's probably safe to remove this quirk from WebKit.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::hasFallbackContent const):
        (WebCore::HTMLObjectElement::hasValidClassId):
        (WebCore::HTMLObjectElement::shouldAllowQuickTimeClassIdQuirk): Deleted.
        * html/HTMLObjectElement.h:

2019-03-11  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed speculative WPE build fix after r195586.

        * platform/encryptedmedia/CDMInstance.h:

2019-03-12  Ryosuke Niwa  <rniwa@webkit.org>

        Remove MediaWiki site specific quirks
        https://bugs.webkit.org/show_bug.cgi?id=195597

        Reviewed by Simon Fraser.

        r47383 added a site specific quirk for the KHTML workaround in MediaWiki.

        Blink since removed this workaround:
        https://github.com/chromium/chromium/commit/ecf84fc9c1a51c8ede7adfd0b0cba446d9a8caa0

        Given Chrome has been shipping without this quirk for six years, it's safe to assume
        this site specific quirk is no longer neeed for Web compatibility.

        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parseAuthorStyleSheet):
        * css/parser/CSSParserContext.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        * css/parser/CSSParserContext.h:
        (WebCore::CSSParserContextHash::hash):

2019-03-11  Ryosuke Niwa  <rniwa@webkit.org>

        Remove OpenCube QuickMenu quirks from navigator.appVersion
        https://bugs.webkit.org/show_bug.cgi?id=195600

        Reviewed by Simon Fraser.

        Remove the site specific quirk added in r35050 for OpenCube QuickMenu library for nwa.com

        Blink removed this code back in 2013. The fact Chrome has been shipping successfully without
        this quirk for six years is a good evidence that it's no longer needed for the Web compatibility.

        * page/Navigator.cpp:
        (WebCore::Navigator::appVersion const):
        (WebCore::shouldHideFourDot): Deleted.

2019-03-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r242763.

        Causes layout test crashes on iOS simulator

        Reverted changeset:

        "[Synthetic Click] Dispatch mouseout soon after mouseup"
        https://bugs.webkit.org/show_bug.cgi?id=195575
        https://trac.webkit.org/changeset/242763

2019-03-11  Ross Kirsling  <ross.kirsling@sony.com>

        Add Optional to Forward.h.
        https://bugs.webkit.org/show_bug.cgi?id=195586

        Reviewed by Darin Adler.

        * Modules/encryptedmedia/MediaKeyStatusMap.cpp:
        * Modules/encryptedmedia/MediaKeyStatusMap.h:
        * Modules/webauthn/apdu/ApduCommand.cpp:
        * Modules/webauthn/apdu/ApduCommand.h:
        * Modules/webauthn/apdu/ApduResponse.cpp:
        * Modules/webauthn/apdu/ApduResponse.h:
        * Modules/webauthn/fido/FidoHidMessage.cpp:
        * Modules/webauthn/fido/FidoHidMessage.h:
        * Modules/webauthn/fido/U2fCommandConstructor.cpp:
        * Modules/webauthn/fido/U2fCommandConstructor.h:
        * Modules/webdatabase/SQLTransaction.cpp:
        * Modules/webdatabase/SQLTransaction.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.h:
        * Modules/webgpu/WHLSL/WHLSLGatherEntryPointItems.h:
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        * Modules/webgpu/WHLSL/WHLSLPrepare.h:
        * Modules/webgpu/WebGPU.cpp:
        * Modules/webgpu/WebGPU.h:
        * Modules/webgpu/WebGPUCommandBuffer.cpp:
        * Modules/webgpu/WebGPUCommandBuffer.h:
        * animation/WebAnimation.cpp:
        * animation/WebAnimation.h:
        * crypto/gcrypt/GCryptUtilities.cpp:
        * crypto/gcrypt/GCryptUtilities.h:
        * css/CSSStyleDeclaration.cpp:
        * css/CSSStyleDeclaration.h:
        * dom/TextDecoder.cpp:
        * dom/TextDecoder.h:
        * dom/UserGestureIndicator.cpp:
        * dom/UserGestureIndicator.h:
        * editing/ChangeListTypeCommand.cpp:
        * editing/ChangeListTypeCommand.h:
        * editing/EditingStyle.cpp:
        * editing/EditingStyle.h:
        * html/DOMFormData.cpp:
        * html/DOMFormData.h:
        * html/HTMLAllCollection.cpp:
        * html/HTMLAllCollection.h:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLAnchorElement.h:
        * html/ImageBitmap.cpp:
        * html/ImageBitmap.h:
        * html/canvas/Path2D.h:
        * html/canvas/WebMetalEnums.cpp:
        * html/canvas/WebMetalEnums.h:
        * html/parser/HTMLParserIdioms.cpp:
        * html/parser/HTMLParserIdioms.h:
        * loader/ResourceCryptographicDigest.cpp:
        * loader/ResourceCryptographicDigest.h:
        * mathml/MathMLOperatorDictionary.cpp:
        * mathml/MathMLOperatorDictionary.h:
        * page/PerformanceEntry.cpp:
        * page/PerformanceEntry.h:
        * page/ResourceUsageData.h:
        * platform/ReferrerPolicy.cpp:
        * platform/ReferrerPolicy.h:
        * platform/Theme.cpp:
        * platform/Theme.h:
        * platform/encryptedmedia/CDMInstance.h:
        * platform/graphics/gpu/GPUDevice.cpp:
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/transforms/AffineTransform.cpp:
        * platform/graphics/transforms/AffineTransform.h:
        * platform/graphics/transforms/TransformState.cpp:
        * platform/graphics/transforms/TransformState.h:
        * platform/graphics/transforms/TransformationMatrix.cpp:
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        * platform/graphics/win/ImageDecoderDirect2D.h:
        * platform/mediacapabilities/AudioConfiguration.h:
        * platform/network/CacheValidation.cpp:
        * platform/network/CacheValidation.h:
        * platform/network/DataURLDecoder.cpp:
        * platform/network/DataURLDecoder.h:
        * platform/network/HTTPParsers.cpp:
        * platform/network/HTTPParsers.h:
        * platform/network/curl/CookieJarDB.cpp:
        * platform/network/curl/CookieJarDB.h:
        * platform/win/SearchPopupMenuDB.cpp:
        * platform/win/SearchPopupMenuDB.h:
        * rendering/ImageQualityController.cpp:
        * rendering/ImageQualityController.h:
        * svg/SVGToOTFFontConversion.cpp:
        * svg/SVGToOTFFontConversion.h:
        Remove unnecessary includes from headers.

2019-03-11  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r236281): YouTube Movies fail with "video format" error
        https://bugs.webkit.org/show_bug.cgi?id=195598
        <rdar://problem/48782842>

        Reviewed by Jon Lee.

        Partially revert r236281 for YouTube.com.

        * page/Quirks.cpp:
        (WebCore::Quirks::hasBrokenEncryptedMediaAPISupportQuirk const):

2019-03-11  Justin Fan  <justin_fan@apple.com>

        [Web GPU] BindGroups/Argument buffers: Move MTLBuffer creation from and GPUBindGroup validation to GPUDevice.createBindGroup
        https://bugs.webkit.org/show_bug.cgi?id=195519
        <rdar://problem/48781297>

        Reviewed by Myles C. Maxfield.

        Metal's Argument Buffers should not be tied directly to GPUBindGroupLayout; rather, create the MTLBuffer 
        in GPUBindGroup creation process.
        Move GPUBindGroup validation out of setBindGroup and to GPUBindGroup creation for performance.

        Covered by existing tests. No behavior change.

        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createBindGroup const):
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/GPUBindGroup.cpp: Removed.
        * platform/graphics/gpu/GPUBindGroup.h:
        (WebCore::GPUBindGroup::vertexArgsBuffer): A buffer that arguments will be encoded into during setBindGroup.
        (WebCore::GPUBindGroup::fragmentArgsBuffer): Ditto.
        (WebCore::GPUBindGroup::boundBuffers const): A list of resources that are bound by this GPUBindGroup.
        (WebCore::GPUBindGroup::boundTextures const): Ditto.
        (WebCore::GPUBindGroup::layout const): Deleted.
        (WebCore::GPUBindGroup::bindings const): Deleted.
        * platform/graphics/gpu/GPUBindGroupLayout.h: No longer creating and retaining MTLBuffers.
        (WebCore::GPUBindGroupLayout::vertexEncoder const):
        (WebCore::GPUBindGroupLayout::fragmentEncoder const):
        (WebCore::GPUBindGroupLayout::computeEncoder const):
        (WebCore::GPUBindGroupLayout::ArgumentEncoderBuffer::isValid const): Deleted.
        (WebCore::GPUBindGroupLayout::vertexArguments const): Deleted.
        (WebCore::GPUBindGroupLayout::fragmentArguments const): Deleted.
        (WebCore::GPUBindGroupLayout::computeArguments const): Deleted.
        * platform/graphics/gpu/GPUProgrammablePassEncoder.h:
        * platform/graphics/gpu/cocoa/GPUBindGroupLayoutMetal.mm:
        (WebCore::tryCreateMtlArgumentEncoder):
        (WebCore::GPUBindGroupLayout::tryCreate):
        (WebCore::GPUBindGroupLayout::GPUBindGroupLayout):
        (WebCore::tryCreateArgumentEncoderAndBuffer): Deleted.
        * platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm: Added.
        (WebCore::tryCreateArgumentBuffer): Create and associate the MTLBuffer that backs the MTLArgumentEncoder.
        (WebCore::tryGetResourceAsBufferBinding): Validate a GPUBindingResource.
        (WebCore::trySetBufferOnEncoder): Encodes a GPUBufferBinding's MTLBuffer on a MTLArgumentEncoder.
        (WebCore::tryGetResourceAsSampler): Ditto, for GPUSamplers.
        (WebCore::trySetSamplerOnEncoder):
        (WebCore::tryGetResourceAsTexture): Ditto, for GPUTextures.
        (WebCore::trySetTextureOnEncoder):
        (WebCore::GPUBindGroup::tryCreate): Most setBindGroup validation moved here.
        (WebCore::GPUBindGroup::GPUBindGroup): Retains the resource references needed for setBindGroup. 
        * platform/graphics/gpu/cocoa/GPUProgrammablePassEncoderMetal.mm:
        (WebCore::GPUProgrammablePassEncoder::setBindGroup): Most validation moved to GPUBindGroup::tryCreate().
        (WebCore::GPUProgrammablePassEncoder::setResourceAsBufferOnEncoder): Deleted.
        (WebCore::GPUProgrammablePassEncoder::setResourceAsSamplerOnEncoder): Deleted.
        (WebCore::GPUProgrammablePassEncoder::setResourceAsTextureOnEncoder): Deleted.
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::GPURenderPassEncoder::useResource):
        (WebCore::GPURenderPassEncoder::setVertexBuffer):
        (WebCore::GPURenderPassEncoder::setFragmentBuffer):

        Misc:
        * platform/graphics/gpu/GPUCommandBuffer.cpp/h: Move missing includes to header.

2019-03-11  Zalan Bujtas  <zalan@apple.com>

        [Synthetic Click] Dispatch mouseout soon after mouseup
        https://bugs.webkit.org/show_bug.cgi?id=195575
        <rdar://problem/47093049>

        Reviewed by Simon Fraser.

        Let's fire a mouseout event when a click is submitted as the result of a tap. It helps to dismiss content which would otherwise require you to move the mouse (cases like control bar on youtube.com).

        Test: fast/events/touch/ios/content-observation/mouse-out-event-should-fire-on-click.html

        * page/EventHandler.h:
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::dispatchFakeMouseOut):

2019-03-11  Youenn Fablet  <youenn@apple.com>

        REGRESSION: (r242181) API test DragAndDropTests.ExternalSourcePlainTextToIFrame is Timing out
        https://bugs.webkit.org/show_bug.cgi?id=195362

        Reviewed by Alexey Proskuryakov.

        Covered by API test no longer crashing.

        * page/SecurityOrigin.cpp:
        (WebCore::originsMatch):
        String representation should only match if originsMatch returns true.

2019-03-11  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Update GPUSwapChainDescriptor, GPUSwapChain and implement GPUCanvasContext
        https://bugs.webkit.org/show_bug.cgi?id=194406
        <rdar://problem/47892466>

        Reviewed by Myles C. Maxfield.

        GPUSwapChain no longer inherits from GPUBasedRenderingContext, and is now created from a GPUDevice. 
        WebGPURenderingContext is now GPUCanvasContext and delegates functionality to the GPUSwapChain, if it exists. 
        GPUQueue now implicitly presents the GPUSwapChain's current drawable at the task boundary, if one exists.
        Creating a new GPUSwapChain with the same GPUCanvasContext invalidates the previous one and its drawable and pipeline attachments.
        Calling GPUSwapChain::getCurrentTexture returns the same drawable within one task cycle. 
        Some mentions of "WebGPU" have been renamed to "Web GPU" and "gpu".

        All Web GPU tests updated to match.

        Add new files and symbols.
        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

        Rename some mentions of "webgpu" to "gpu".
        * Modules/webgpu/DOMWindowWebGPU.cpp:
        (WebCore::DOMWindowWebGPU::gpu):
        (WebCore::DOMWindowWebGPU::gpu const):
        * Modules/webgpu/DOMWindowWebGPU.h:
        * Modules/webgpu/DOMWindowWebGPU.idl:

        Replace WebGPURenderingContext with GPUCanvasContext.
        * Modules/webgpu/GPUCanvasContext.cpp: Renamed from Source/WebCore/Modules/webgpu/WebGPURenderingContext.cpp.
        (WebCore::GPUCanvasContext::create):
        (WebCore::GPUCanvasContext::GPUCanvasContext):
        (WebCore::GPUCanvasContext::replaceSwapChain):
        (WebCore::GPUCanvasContext::platformLayer const):
        (WebCore::GPUCanvasContext::reshape):
        (WebCore::GPUCanvasContext::markLayerComposited):
        * Modules/webgpu/GPUCanvasContext.h: Renamed from Source/WebCore/Modules/webgpu/WebGPURenderingContext.h.
        * Modules/webgpu/GPUCanvasContext.idl: Renamed from Source/WebCore/Modules/webgpu/WebGPURenderingContext.idl.
        * dom/Document.cpp:
        (WebCore::Document::getCSSCanvasContext):
        * dom/Document.h:
        * dom/Document.idl:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::isWebGPUType):
        (WebCore::HTMLCanvasElement::createContextWebGPU):
        (WebCore::HTMLCanvasElement::getContextWebGPU):
        * html/HTMLCanvasElement.h:
        * html/HTMLCanvasElement.idl:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildObjectForCanvas):
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::contextAsScriptValue):

        Update WebGPUSwapChain.
        * Modules/webgpu/GPUTextureDescriptor.idl:
        * Modules/webgpu/GPUTextureFormat.idl: Add the other two texture formats supported by CAMetalLayer.
        * Modules/webgpu/WebGPUDevice.cpp: Implement createSwapChain.
        (WebCore::WebGPUDevice::createSwapChain const):
        (WebCore::WebGPUDevice::getQueue const):
        (WebCore::WebGPUDevice::getQueue): Deleted.
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDevice.idl:
        * Modules/webgpu/WebGPUSwapChain.cpp:
        (WebCore::WebGPUSwapChain::create):
        (WebCore::WebGPUSwapChain::WebGPUSwapChain):
        (WebCore::WebGPUSwapChain::getCurrentTexture): Renamed from getNextTexture. Only returns the next drawable if the last was presented.
        (WebCore::WebGPUSwapChain::destroy): Invalidate this GPUSwapChain and its textures and views.
        (WebCore::WebGPUSwapChain::configure): Deleted.
        (WebCore::WebGPUSwapChain::getNextTexture): Deleted.
        (WebCore::WebGPUSwapChain::present): Deleted.
        (WebCore::WebGPUSwapChain::reshape): Deleted.
        (WebCore::WebGPUSwapChain::markLayerComposited): Deleted.
        * Modules/webgpu/WebGPUSwapChain.h: Now a device-based object rather than a rendering context.
        (WebCore::WebGPUSwapChain::swapChain const):
        (WebCore::WebGPUSwapChain::WebGPUSwapChain): Deleted.
        * Modules/webgpu/WebGPUSwapChain.idl:
        * Modules/webgpu/WebGPUSwapChainDescriptor.h: Added.
        * platform/graphics/gpu/GPUDevice.cpp: Implement tryCreateSwapChain.
        (WebCore::GPUDevice::tryCreateSwapChain const):
        (WebCore::GPUDevice::getQueue const):
        (WebCore::GPUDevice::getQueue): Deleted.
        * platform/graphics/gpu/GPUDevice.h: Retain a reference to the current GPUSwapChain, if one exists.
        (WebCore::GPUDevice::swapChain const):
        * platform/graphics/gpu/GPUQueue.h:
        * platform/graphics/gpu/GPUSwapChain.h:
        (WebCore::GPUSwapChain::destroy):
        * platform/graphics/gpu/GPUSwapChainDescriptor.h: Added.
        * platform/graphics/gpu/GPUTextureFormat.h: Add the other two texture formats supported by CAMetalLayer.
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::commandBufferCommitted):
        * platform/graphics/gpu/cocoa/GPUQueueMetal.mm:
        (WebCore::GPUQueue::tryCreate): Renamed from create to better fit functionality. Now retain a reference to the GPUDevice.
        (WebCore::GPUQueue::GPUQueue):
        (WebCore::GPUQueue::submit): Now checks state of all resources before marking them as committed or committing any resource.
                In addition, schedules the current drawable to be presented after all commands have been submitted during this task cycle.
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::useAttachments): Ensure that the command buffer is aware of any texture resources used as attachments.
        (WebCore::GPURenderPassEncoder::tryCreate):
        * platform/graphics/gpu/cocoa/GPUSwapChainMetal.mm:
        (WebCore::tryGetSupportedPixelFormat): Supported texture formats are the intersection of Web GPU's texture formats and CAMetalLayer's.
        (WebCore::setLayerShape):
        (WebCore::tryCreateSwapLayer): Create and configure the CAMetalLayer backing the swap chain.
        (WebCore::GPUSwapChain::tryCreate):
        (WebCore::GPUSwapChain::GPUSwapChain):
        (WebCore::GPUSwapChain::tryGetCurrentTexture): Renamed from getNextTexture. Only returns a texture if the last one was presented.
        (WebCore::GPUSwapChain::present):
        (WebCore::GPUSwapChain::reshape):
        (WebCore::GPUSwapChain::takeDrawable): Swaps out the current drawable so that it can be presented. The GPUSwapChain thus releases its reference to it.
        (WebCore::GPUSwapChain::create): Deleted.
        (WebCore::GPUSwapChain::setDevice): Deleted.
        (WebCore::GPUSwapChain::setFormat): Deleted.
        (WebCore::GPUSwapChain::getNextTexture): Deleted.
        * platform/graphics/gpu/cocoa/GPUUtilsMetal.mm:
        (WebCore::platformTextureFormatForGPUTextureFormat):

        Misc:
        * Modules/webgpu/WebGPUProgrammablePassEncoder.cpp: Missing include.

2019-03-11  Chris Dumez  <cdumez@apple.com>

        Update device orientation & motion permission native SPI as per latest proposal
        https://bugs.webkit.org/show_bug.cgi?id=195567

        Reviewed by Youenn Fablet.

        * dom/DeviceOrientationAndMotionAccessController.cpp:
        (WebCore::DeviceOrientationAndMotionAccessController::shouldAllowAccess):
        * page/ChromeClient.h:

2019-03-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Dispatching reentrant "contextmenu" events may cause crashes
        https://bugs.webkit.org/show_bug.cgi?id=195571
        <rdar://problem/48086046>

        Reviewed by Andy Estes.

        Make ContextMenuController::handleContextMenuEvent robust against reentrancy by guarding it with a boolean flag.
        As demonstrated in the test case, it is currently possible to force WebKit into a bad state by dispatching a
        synthetic "contextmenu" event from within the scope of one of the "before(copy|cut|paste)" events triggered as
        a result of handling a context menu event.

        Test: fast/events/contextmenu-reentrancy-crash.html

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent):
        * page/ContextMenuController.h:

2019-03-11  Andy Estes  <aestes@apple.com>

        [Apple Pay] Use PKPaymentAuthorizationController to present the Apple Pay UI remotely from the Networking service on iOS
        https://bugs.webkit.org/show_bug.cgi?id=195530
        <rdar://problem/48747164>

        Reviewed by Alex Christensen.

        * Modules/applepay/PaymentCoordinatorClient.h: Defined isWebPaymentCoordinator.
        * page/Settings.yaml: Defined the applePayRemoteUIEnabled setting and reordered the other
        Apple Pay settings.

2019-03-11  Alex Christensen  <achristensen@webkit.org>

        Soft linking to Reveal framework should be optional
        https://bugs.webkit.org/show_bug.cgi?id=195576
        <rdar://problem/46822452>

        Reviewed by Megan Gardner.

        Systems exist with ENABLE(REVEAL) true and the Reveal framework does not exist.

        * editing/cocoa/DictionaryLookup.mm:
        (WebCore::showPopupOrCreateAnimationController):

2019-03-11  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Reduce # of structures in JSGlobalObject initialization
        https://bugs.webkit.org/show_bug.cgi?id=195498

        Reviewed by Darin Adler.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):

2019-03-11  Brent Fulgham  <bfulgham@apple.com>

        Remove obsolete runtime flag for StorageAccess API Prompt
        https://bugs.webkit.org/show_bug.cgi?id=195564
        <rdar://problem/37279014>

        Reviewed by Chris Dumez.

        This bug tracks the work of removing the obsolete flag that had been used to optionally
        prevent display of the StorageAccess API prompt. We have since shipped the final version
        of this feature with an always-on prompt, and should have removed this runtime flag.

        No test changes because this has no change in behavior. Tests already assume the prompt
        behavior, and did not test turning the flag off.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setStorageAccessPromptsEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::storageAccessPromptsEnabled const): Deleted.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setStorageAccessPromptsEnabled): Deleted.
        * testing/InternalSettings.h:
        (): Deleted.
        * testing/InternalSettings.idl:

2019-03-11  Eric Carlson  <eric.carlson@apple.com>

        Add web audio release logging
        https://bugs.webkit.org/show_bug.cgi?id=195554
        <rdar://problem/48767211>

        Reviewed by Jer Noble.

        No new tests, no functional change.

        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        (WebCore::AudioBasicInspectorNode::AudioBasicInspectorNode):
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::setBuffer):
        (WebCore::AudioBufferSourceNode::startPlaying):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::nextLogIdentifier):
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::uninitialize):
        (WebCore::AudioContext::stop):
        (WebCore::AudioContext::createBufferSource):
        (WebCore::AudioContext::createMediaElementSource):
        (WebCore::AudioContext::createMediaStreamSource):
        (WebCore::AudioContext::createScriptProcessor):
        (WebCore::AudioContext::createBiquadFilter):
        (WebCore::AudioContext::createWaveShaper):
        (WebCore::AudioContext::createPanner):
        (WebCore::AudioContext::createConvolver):
        (WebCore::AudioContext::createDynamicsCompressor):
        (WebCore::AudioContext::createAnalyser):
        (WebCore::AudioContext::createGain):
        (WebCore::AudioContext::createDelay):
        (WebCore::AudioContext::createChannelSplitter):
        (WebCore::AudioContext::createChannelMerger):
        (WebCore::AudioContext::createOscillator):
        (WebCore::AudioContext::createPeriodicWave):
        (WebCore::AudioContext::willBeginPlayback):
        (WebCore::AudioContext::startRendering):
        (WebCore::AudioContext::fireCompletionEvent):
        (WebCore::AudioContext::logChannel const):
        * Modules/webaudio/AudioContext.h:
        (WebCore::AudioContext::nextAudioNodeLogIdentifier):
        (WebCore::AudioContext::nextAudioParameterLogIdentifier):
        * Modules/webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::AudioDestinationNode):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::convertEnumerationToString):
        (WebCore::AudioNode::AudioNode):
        (WebCore::AudioNode::~AudioNode):
        (WebCore::AudioNode::setNodeType):
        (WebCore::AudioNode::addInput):
        (WebCore::AudioNode::addOutput):
        (WebCore::AudioNode::connect):
        (WebCore::AudioNode::disconnect):
        (WebCore::AudioNode::setChannelCount):
        (WebCore::AudioNode::setChannelCountMode):
        (WebCore::AudioNode::setChannelInterpretation):
        (WebCore::AudioNode::logChannel const):
        * Modules/webaudio/AudioNode.h:
        (WTF::LogArgument<WebCore::AudioNode::NodeType>::toString):
        * Modules/webaudio/AudioParam.cpp:
        (WebCore::AudioParam::AudioParam):
        (WebCore::AudioParam::setValue):
        (WebCore::AudioParam::connect):
        (WebCore::AudioParam::disconnect):
        (WebCore::AudioParam::logChannel const):
        * Modules/webaudio/AudioParam.h:
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::start):
        (WebCore::AudioScheduledSourceNode::stop):
        * Modules/webaudio/BiquadFilterNode.cpp:
        (WebCore::BiquadFilterNode::BiquadFilterNode):
        * Modules/webaudio/ChannelMergerNode.cpp:
        (WebCore::ChannelMergerNode::ChannelMergerNode):
        * Modules/webaudio/ChannelSplitterNode.cpp:
        (WebCore::ChannelSplitterNode::ChannelSplitterNode):
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::ConvolverNode):
        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::initialize):
        (WebCore::DefaultAudioDestinationNode::uninitialize):
        (WebCore::DefaultAudioDestinationNode::enableInput):
        (WebCore::DefaultAudioDestinationNode::setChannelCount):
        * Modules/webaudio/DelayNode.cpp:
        (WebCore::DelayNode::DelayNode):
        * Modules/webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        * Modules/webaudio/GainNode.cpp:
        (WebCore::GainNode::GainNode):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::MediaElementAudioSourceNode):
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::MediaStreamAudioSourceNode):
        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::startRendering):
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::setType):
        (WebCore::OscillatorNode::setPeriodicWave):
        * Modules/webaudio/OscillatorNode.h:
        (WTF::LogArgument<WebCore::OscillatorNode::Type>::toString):
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::PannerNode):
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::ScriptProcessorNode):
        * Modules/webaudio/WaveShaperNode.cpp:
        (WebCore::WaveShaperNode::WaveShaperNode):
        (WebCore::WaveShaperNode::setCurve):
        (WebCore::WaveShaperNode::setOversample):
        * Modules/webaudio/WaveShaperNode.h:
        (WTF::LogArgument<WebCore::WaveShaperNode::OverSampleType>::toString):

2019-03-11  Youenn Fablet  <youenn@apple.com>

        Make IDBDatabaseIdentifier take a ClientOrigin as member
        https://bugs.webkit.org/show_bug.cgi?id=195544

        Reviewed by Geoffrey Garen.

        Instead of taking a top and a frame origin, make
        make IDBDatabaseIdentifier take a ClientOrigin.

        This allows reusing some ClientOrigin code
        and will ease implementation of storage quota checking in
        NetworkProcess, as quota managers are keyed by client origins.

        No change of behavior.

        * Modules/indexeddb/IDBDatabaseIdentifier.cpp:
        (WebCore::IDBDatabaseIdentifier::IDBDatabaseIdentifier):
        (WebCore::IDBDatabaseIdentifier::isolatedCopy const):
        (WebCore::IDBDatabaseIdentifier::databaseDirectoryRelativeToRoot const):
        (WebCore::IDBDatabaseIdentifier::debugString const):
        * Modules/indexeddb/IDBDatabaseIdentifier.h:
        (WebCore::IDBDatabaseIdentifier::hash const):
        (WebCore::IDBDatabaseIdentifier::operator== const):
        (WebCore::IDBDatabaseIdentifier::origin const):
        (WebCore::IDBDatabaseIdentifier::isRelatedToOrigin const):
        (WebCore::IDBDatabaseIdentifier::encode const):
        (WebCore::IDBDatabaseIdentifier::decode):
        * page/ClientOrigin.h:
        (WebCore::ClientOrigin::isRelated const):

2019-03-11  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Manually rolling out r242701 and r242703 since the changes
        are causing test timeouts and crashes on GTK and WPE.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::flushCurrentBuffer):
        (WebCore::MediaPlayerPrivateGStreamerBase::createGLAppSink):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        (WebCore::TextureMapperPlatformLayerProxy::pushNextBuffer):
        (WebCore::TextureMapperPlatformLayerProxy::dropCurrentBufferWhilePreservingTexture):
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.h:
        (): Deleted.

2019-03-11  Jer Noble  <jer.noble@apple.com>

        Use AVContentKeySession for "com.apple.fps.2_0" CDM version when AVStreamSession is absent
        https://bugs.webkit.org/show_bug.cgi?id=195462
        <rdar://problem/48712306>

        Reviewed by Eric Carlson.

        The difference between "com.apple.fps.2_0" and "3_0" is a protocol difference more than an
        implementation difference. In "2_0", the "EME nitialization" data comes in the form of a "content
        identifier", while the true initialization data is retrieved through a side channel directly from
        the attached element. In "3_0", the "EME initialization data" is the exact initialization data
        given by the parser, with no "content identifier" at all.

        In the original implementation, the "2_0" used AVStreamSession, and "3_0" used AVContentKeySession,
        but in the absense of AVStreamSession, those protocol differences are minor and can be implemented
        using AVContentKeySession.

        Changes:

        - Add a new helper struct in CDMPrivateMediaSourceAVFObjC that represents the parsed parameters
          of the CDM string.
        - Add an "initData()" accessor to SourceBufferPrivateAVFObjC so that the "2_0" path can implement
          the side channel access to the necessary initialization data.
        - Refactor some of the SPI code to not re-declare unnecessary APIs.
        - In CDMSessionAVContentKeySession::generateKeyRequest(), this function can never be called twice
          so it is a logical impossibility to have a certificate at this point. Remove all this if() code.

        * Modules/encryptedmedia/legacy/LegacyCDM.cpp:
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm:
        (WebCore::CDMPrivateMediaSourceAVFObjC::parseKeySystem):
        (WebCore::queryDecoderAvailability):
        (WebCore::CDMPrivateMediaSourceAVFObjC::supportsKeySystem):
        (WebCore::CDMPrivateMediaSourceAVFObjC::createSession):
        (WebCore::validKeySystemRE): Deleted.
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::CDMSessionAVContentKeySession):
        (WebCore::CDMSessionAVContentKeySession::generateKeyRequest):
        (WebCore::CDMSessionAVContentKeySession::update):
        (WebCore::CDMSessionAVContentKeySession::addParser):
        (WebCore::CDMSessionAVContentKeySession::removeParser):
        (WebCore::CDMSessionAVContentKeySession::contentKeySession):
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::CDMSessionAVStreamSession):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setCDMSession):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID):

2019-03-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r242688, r242643, r242624.

        Caused multiple layout test failures and crashes on iOS and macOS.

        Reverted changeset:

        "requestAnimationFrame should execute before the next frame"
        https://bugs.webkit.org/show_bug.cgi?id=177484
        https://trac.webkit.org/changeset/242624/webkit

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::platformHandleFocusedUIElementChanged):
        * animation/DocumentAnimationScheduler.cpp: Added.
        (WebCore::DocumentAnimationScheduler::create):
        (WebCore::DocumentAnimationScheduler::DocumentAnimationScheduler):
        (WebCore::DocumentAnimationScheduler::detachFromDocument):
        (WebCore::DocumentAnimationScheduler::scheduleWebAnimationsResolution):
        (WebCore::DocumentAnimationScheduler::unscheduleWebAnimationsResolution):
        (WebCore::DocumentAnimationScheduler::scheduleScriptedAnimationResolution):
        (WebCore::DocumentAnimationScheduler::displayRefreshFired):
        (WebCore::DocumentAnimationScheduler::windowScreenDidChange):
        (WebCore::DocumentAnimationScheduler::createDisplayRefreshMonitor const):
        * animation/DocumentAnimationScheduler.h: Renamed from Source/WebCore/page/RenderingUpdateScheduler.h.
        (WebCore::DocumentAnimationScheduler::lastTimestamp):
        (WebCore::DocumentAnimationScheduler::isFiring const):
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::DocumentTimeline):
        (WebCore::DocumentTimeline::updateThrottlingState):
        (WebCore::DocumentTimeline::suspendAnimations):
        (WebCore::DocumentTimeline::resumeAnimations):
        (WebCore::DocumentTimeline::liveCurrentTime const):
        (WebCore::DocumentTimeline::currentTime):
        (WebCore::DocumentTimeline::cacheCurrentTime):
        (WebCore::DocumentTimeline::scheduleAnimationResolutionIfNeeded):
        (WebCore::DocumentTimeline::animationTimingDidChange):
        (WebCore::DocumentTimeline::scheduleAnimationResolution):
        (WebCore::DocumentTimeline::unscheduleAnimationResolution):
        (WebCore::DocumentTimeline::animationResolutionTimerFired):
        (WebCore::DocumentTimeline::updateAnimationsAndSendEvents):
        (WebCore::DocumentTimeline::scheduleNextTick):
        (WebCore::DocumentTimeline::updateListOfElementsWithRunningAcceleratedAnimationsForElement):
        (WebCore::DocumentTimeline::resolveAnimationsForElement):
        (WebCore::DocumentTimeline::internalUpdateAnimationsAndSendEvents): Deleted.
        * animation/DocumentTimeline.h:
        * dom/Document.cpp:
        (WebCore::Document::resolveStyle):
        (WebCore::Document::prepareForDestruction):
        (WebCore::Document::windowScreenDidChange):
        (WebCore::Document::updateIntersectionObservations):
        (WebCore::Document::scheduleForcedIntersectionObservationUpdate):
        (WebCore::Document::animationScheduler):
        (WebCore::Document::updateAnimationsAndSendEvents): Deleted.
        (WebCore::Document::serviceRequestAnimationFrameCallbacks): Deleted.
        * dom/Document.h:
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations):
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        (WebCore::ScriptedAnimationController::animationTimerFired):
        (WebCore::ScriptedAnimationController::documentAnimationSchedulerDidFire):
        (WebCore::ScriptedAnimationController::serviceRequestAnimationFrameCallbacks): Deleted.
        * dom/ScriptedAnimationController.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::viewportContentsChanged):
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::observe):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::willDisplayPage):
        (WebCore::Page::addDocumentNeedingIntersectionObservationUpdate):
        (WebCore::Page::updateIntersectionObservations):
        (WebCore::Page::scheduleForcedIntersectionObservationUpdate):
        (WebCore::Page::layoutIfNeeded): Deleted.
        (WebCore::Page::renderingUpdate): Deleted.
        (WebCore::Page::renderingUpdateScheduler): Deleted.
        * page/Page.h:
        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::didChangeViewExposedRect):
        (WebCore::PageOverlayController::notifyFlushRequired):
        * page/RenderingUpdateScheduler.cpp: Removed.
        * page/ios/ContentChangeObserver.h:
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::notifyFlushRequired):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::scheduleLayerFlushNow):

2019-03-11  Darin Adler  <darin@apple.com>

        Specify fixed precision explicitly to prepare to change String::number and StringBuilder::appendNumber floating point behavior
        https://bugs.webkit.org/show_bug.cgi?id=195533

        Reviewed by Brent Fulgham.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::changeValueByStep): Use numberToStringFixedPrecision.
        (WebCore::AccessibilityNodeObject::changeValueByPercent): Ditto.
        * accessibility/AccessibilityScrollbar.cpp:
        (WebCore::AccessibilityScrollbar::setValue): Ditto.
        * css/CSSFontVariationValue.cpp:
        (WebCore::CSSFontVariationValue::customCSSText const): Use appendFixedPrecisionNumber.
        * css/CSSGradientValue.cpp:
        (WebCore::CSSLinearGradientValue::customCSSText const): Ditto.
        (WebCore::CSSRadialGradientValue::customCSSText const): Ditto.
        * css/CSSKeyframeRule.cpp:
        (WebCore::StyleRuleKeyframe::keyText const): Ditto.
        * css/CSSTimingFunctionValue.cpp:
        (WebCore::CSSCubicBezierTimingFunctionValue::customCSSText const): Ditto.
        (WebCore::CSSSpringTimingFunctionValue::customCSSText const): Ditto.
        * css/parser/CSSParserToken.cpp:
        (WebCore::CSSParserToken::serialize const): Ditto.
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::completeURLsInAttributeValue const): Ditto.
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::drawRulers): Use numberToStringFixedPrecision.
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::toString const): Use appendFixedPrecisionNumber.
        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageProperty): Use numberToStringFixedPrecision.
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::gcTimerString): Use numberToStringFixedPrecision.
        * platform/LayoutUnit.h:
        (WTF::ValueToString<WebCore::LayoutUnit>::string): Ditto.
        * platform/graphics/Color.cpp:
        (WebCore::Color::cssText const): Use appendFixedPrecisionNumber.
        * platform/graphics/ExtendedColor.cpp:
        (WebCore::ExtendedColor::cssText const): Ditto.
        * svg/SVGAngleValue.cpp:
        (WebCore::SVGAngleValue::valueAsString const): Use numberToStringFixedPrecision.
        * svg/SVGNumberListValues.cpp:
        (WebCore::SVGNumberListValues::valueAsString const): Use appendFixedPrecisionNumber.
        * svg/SVGPathStringBuilder.cpp:
        (WebCore::appendNumber): Ditto.
        (WebCore::appendPoint): Ditto.
        * svg/SVGPointListValues.cpp:
        (WebCore::SVGPointListValues::valueAsString const): Ditto.
        * svg/SVGTransformValue.cpp:
        (WebCore::SVGTransformValue::valueAsString const): Ditto.
        * svg/properties/SVGPropertyTraits.h:
        (WebCore::SVGPropertyTraits<float>::toString): Use numberToStringFixedPrecision.
        (WebCore::SVGPropertyTraits<FloatPoint>::toString): Use appendFixedPrecisionNumber.
        (WebCore::SVGPropertyTraits<FloatRect>::toString): Ditto.
        * testing/Internals.cpp:
        (WebCore::Internals::dumpMarkerRects): Use appendFixedPrecisionNumber.
        (WebCore::Internals::getCurrentCursorInfo): Ditto.
        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::toString const): Use numberToStringFixedPrecision.

2019-03-11  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, Non-GStreamer-GL build fix after r242701.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):

2019-03-11  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][v4l2] Synchronous video texture flushing support
        https://bugs.webkit.org/show_bug.cgi?id=195453

        Reviewed by Xabier Rodriguez-Calvar.

        The v4l2 video decoder currently requires that downstream users of
        the graphics resources complete any pending draw call and release
        resources before returning from the DRAIN query.

        To accomplish this the player monitors the pipeline and whenever a
        v4l2 decoder is added, synchronous video texture flushing support
        is enabled. Additionally and for all decoder configurations, a
        flush is performed before disposing of the player.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::playbinDeepElementAddedCallback):
        Monitor elements added to the decodebin bin.
        (WebCore::MediaPlayerPrivateGStreamer::decodebinElementAdded): Set
        a flag if a v4l2 decoder was added in decodebin.
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Connect
        to the deep-element-added signal so as to monitor pipeline
        topology updates.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        Flush video texture before disposing of the player.
        (WebCore::MediaPlayerPrivateGStreamerBase::flushCurrentBuffer):
        Synchronously flush if the pipeline contains a v4l2 decoder.
        (WebCore::MediaPlayerPrivateGStreamerBase::createGLAppSink): Monitor push events only.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        (WebCore::TextureMapperPlatformLayerProxy::pushNextBuffer): New
        boolean flag used mostly to trigger synchronous flush conditions.
        (WebCore::TextureMapperPlatformLayerProxy::dropCurrentBufferWhilePreservingTexture):
        Optionally drop the current buffer in a synchronous manner. By
        default the method keeps operating asynchronously.
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.h:

2019-03-11  Antti Koivisto  <antti@apple.com>

        Rename contentOffsetInCompostingLayer to contentOffsetInCompositingLayer
        https://bugs.webkit.org/show_bug.cgi?id=195553

        Reviewed by Simon Fraser.

        Less composting, more compositing.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateBackdropFiltersGeometry):
        (WebCore::RenderLayerBacking::resetContentsRect):
        (WebCore::RenderLayerBacking::updateChildClippingStrategy):
        (WebCore::RenderLayerBacking::updateImageContents):
        (WebCore::RenderLayerBacking::contentOffsetInCompositingLayer const):
        (WebCore::RenderLayerBacking::contentsBox const):
        (WebCore::RenderLayerBacking::backgroundBoxForSimpleContainerPainting const):
        (WebCore::RenderLayerBacking::contentOffsetInCompostingLayer const): Deleted.
        * rendering/RenderLayerBacking.h:

2019-03-10  Ross Kirsling  <ross.kirsling@sony.com>

        Invalid flags in a RegExp literal should be an early SyntaxError
        https://bugs.webkit.org/show_bug.cgi?id=195514

        Reviewed by Darin Adler.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readTerminal):
        Consume YarrFlags.

2019-03-10  Tim Horton  <timothy_horton@apple.com>

        Add SPI to retrieve the set of text inputs in a given rect, and later focus one
        https://bugs.webkit.org/show_bug.cgi?id=195499

        Reviewed by Darin Adler.

        New API tests: WebKit.RequestTextInputContext and WebKit.FocusTextInputContext

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::identifierForElement):
        (WebCore::Document::elementWithIdentifier):
        (WebCore::Document::identifiedElementWasRemovedFromDocument):
        * dom/Document.h:
        Add a mechanism where Document will vend an ObjectIdentifier for a given
        element, and can (if possible) retrieve that element later.

        * dom/Element.cpp:
        (WebCore::Element::removedFromAncestor):
        If an Element has an identifier created for it, inform Document to remove
        it from the identifier map when the element is detached.

        (WebCore::Element::createElementIdentifier):
        * dom/Element.h:
        * dom/ElementIdentifier.h: Added.
        * dom/ElementRareData.cpp:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::hasElementIdentifier const):
        (WebCore::ElementRareData::setHasElementIdentifier):
        (WebCore::ElementRareData::ElementRareData):
        Store a bit indicating if the Element has had a identifier created for it,
        so that we can avoid a hash lookup on every Element removal.

        * dom/Node.h:
        * html/HTMLTextFormControlElement.h:

2019-03-10  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Fix failing test cases
        https://bugs.webkit.org/show_bug.cgi?id=195524
        <rdar://problem/48745101>

        Reviewed by Simon Fraser.

        1. Do not start DOM timer install observation when we already detected change at touchstart.
        2. hasPendingActivity() should only care about ContentChangeObserver flags.
        3. Do not try to notify the client when we are in the mouseMoved dispatch call (currently it could happen
        when a timer gets intalled and removed right away).

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::adjustObservedState):
        (WebCore::ContentChangeObserver::isNotifyContentChangeAllowed const): Deleted.
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::hasPendingActivity const):
        (WebCore::ContentChangeObserver::isObservationTimeWindowActive const):

2019-03-10  Simon Fraser  <simon.fraser@apple.com>

        ScrollingTree should have the final say on where layers go
        https://bugs.webkit.org/show_bug.cgi?id=195507

        Reviewed by Antti Koivisto.

        Main thread layer flushing can race with scrolling tree layer changes on macOS, causing
        flashing as layers jump around sometimes. We go to some lengths to avoid this by trying
        not to touch properties on layers that are being interacted with (scrollableArea->setIsUserScroll in
        updateScrollPositionAfterAsyncScroll()), but that's fragile.

        This patch adds ScrollingTree::applyScrollingTreeLayerPositions(), which enters
        ScrollingTree::applyLayerPositions() on the main thread/UI process. This traverses
        the tree allowing each node to run their layer positioning logic.

        For macOS WK2, this is called from TiledCoreAnimationDrawingArea::flushLayers() after flushCompositingStateIncludingSubframes().
        For macOS WK2 with UI-side compositing, RemoteLayerTreeDrawingAreaProxy::commitLayerTree()
        calls m_webPageProxy.scrollingCoordinatorProxy()->applyScrollingTreeLayerPositions().
        iOS WK2 is unchanged, using viewportChangedViaDelegatedScrolling() which does the same thing, allowing
        for the dynamic viewport changes that happen when zooming on iOS.

        Testing this requires infrastructure that we don't have yet.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::applyScrollingTreeLayerPositions):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::applyScrollingTreeLayerPositions):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::handleWheelEvent):
        (WebCore::ScrollingTree::commitTreeState):
        (WebCore::ScrollingTree::applyLayerPositions):
        (WebCore::ScrollingTree::applyLayerPositionsRecursive):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeFrameHostingNode.cpp:
        (WebCore::ScrollingTreeFrameHostingNode::applyLayerPositions):
        * page/scrolling/ScrollingTreeFrameHostingNode.h:
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::applyLayerPositions):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/cocoa/ScrollingTreeFixedNode.h:
        * page/scrolling/cocoa/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::relatedNodeScrollPositionDidChange):
        * page/scrolling/cocoa/ScrollingTreeStickyNode.h:
        * page/scrolling/cocoa/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::applyLayerPositions):
        (WebCore::ScrollingTreeStickyNode::relatedNodeScrollPositionDidChange):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::applyLayerPositions):

2019-03-09  Andy Estes  <aestes@apple.com>

        [Apple Pay] CanMakePaymentsWithActiveCard and OpenPaymentSetup should be async messages
        https://bugs.webkit.org/show_bug.cgi?id=195526
        <rdar://problem/48745636>

        Reviewed by Chris Dumez.

        * Modules/applepay/PaymentCoordinatorClient.h:
        * loader/EmptyClients.cpp:
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::canMakePaymentsWithActiveCard):
        (WebCore::MockPaymentCoordinator::openPaymentSetup):
        * testing/MockPaymentCoordinator.h:

2019-03-09  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Click event fires immediately on hover menu at seriouseats.com
        https://bugs.webkit.org/show_bug.cgi?id=195520
        <rdar://problem/48740098>

        Reviewed by Simon Fraser.

        Unfortunately seriouseats has a 300ms hover intent delay to deal with accidental menupane pop-ups. This page also hides this
        non-fixed width menupane using absolute positioning and negative left.  

        Test: fast/events/touch/ios/content-observation/move-content-from-offscreen.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::didInstallDOMTimer):
        (WebCore::ContentChangeObserver::StyleChangeScope::~StyleChangeScope):
        (WebCore::ContentChangeObserver::StyleChangeScope::isConsideredHidden const): Content auhtors tend to use x - 1 values (where x = 10^y)

2019-03-09  Chris Dumez  <cdumez@apple.com>

        Add assertions to help debug crash under DOMWindowExtension::suspendForPageCache()
        https://bugs.webkit.org/show_bug.cgi?id=195488

        Reviewed by Ryosuke Niwa.

        Try and figure out how the document can be detached from its frame while we're suspending
        DOMWindowExtensions.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::willDetachDocumentFromFrame):
        (WebCore::DOMWindow::suspendForPageCache):
        * page/DOMWindow.h:

2019-03-09  Chris Dumez  <cdumez@apple.com>

        Simplify DOMWindowProperty code / handling
        https://bugs.webkit.org/show_bug.cgi?id=195495

        Reviewed by Ryosuke Niwa.

        DOMWindowProperty code was unnecessarily complex because DOMWindowExtension inherited
        from it and DOMWindowExtension needs a lot of information about the global object's
        lifetime to communicate to the injected bbundle client. This subclassing is also
        very confusing because a DOMWindowExtension is not a *property* on the Window object.

        This patch updates DOMWindowExtension to stop subclassing DOMWindowProperty and
        moves all the complexity from DOMWindowProperty to DOMWindowExtension.
        DOMWindowProperty is now a very simple base class which merely has a WeakPtr to
        the window and getters for the window and the frame.

        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        (WebCore::DOMWindowIndexedDatabase::DOMWindowIndexedDatabase):
        (WebCore::DOMWindowIndexedDatabase::indexedDB):
        * Modules/indexeddb/DOMWindowIndexedDatabase.h:
        There is no reason for DOMWindowIndexedDatabase to move its IDBFactory to a
        separate data member which in PageCache. Script do not run while in PageCache.
        Also, frames are nulled out while in the PageCache so the indexedDB() getter
        would return null anyway while in PageCache.

        * css/StyleMedia.idl:
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::setDOMApplicationCache):
        Store a WeakPtr to the DOMApplicationCache for safety.

        (WebCore::ApplicationCacheHost::dispatchDOMEvent):
        Do not fire events on the DOMApplicationCache if it is frameless to maintain
        previous behavior. Previously, the DOMApplicationCache would have been nulled
        out when detached from its frame so we would not have fired events.

        * loader/appcache/ApplicationCacheHost.h:
        * loader/appcache/DOMApplicationCache.cpp:
        * loader/appcache/DOMApplicationCache.h:
        Remove some unnecessary complexity. The ApplicationCacheHost is owned by the
        DocumentLoader, which changes on navigation. There is therefore no reason to
        null out the DOMApplicationCache on the ApplicationCacheHost when its gets
        detached from its frame or enters PageCache.

        * page/BarProp.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::willDestroyCachedFrame):
        (WebCore::DOMWindow::willDestroyDocumentInFrame):
        (WebCore::DOMWindow::willDetachDocumentFromFrame):
        (WebCore::DOMWindow::registerExtension):
        (WebCore::DOMWindow::unregisterExtension):

        (WebCore::DOMWindow::resetDOMWindowProperties): Removed.
        Stop clearing some of the DOMWindow's properties when the document gets destroyed or when
        the Window for the initial empty document gets reused on navigation. I think we used to
        need this because DOMWindowProperty used to hold pointers to their frame. However, this
        is no longer the case nowadays as DOMWindowProperty objects get their frame from their
        Window.

        (WebCore::DOMWindow::resetUnlessSuspendedForDocumentSuspension):
        (WebCore::DOMWindow::suspendForPageCache):
        (WebCore::DOMWindow::resumeFromPageCache):
        * page/DOMWindow.h:
        * page/DOMWindowExtension.cpp:
        (WebCore::DOMWindowExtension::DOMWindowExtension):
        (WebCore::DOMWindowExtension::~DOMWindowExtension):
        (WebCore::DOMWindowExtension::frame const):
        (WebCore::DOMWindowExtension::suspendForPageCache):
        (WebCore::DOMWindowExtension::resumeFromPageCache):
        (WebCore::DOMWindowExtension::willDestroyGlobalObjectInCachedFrame):
        (WebCore::DOMWindowExtension::willDestroyGlobalObjectInFrame):
        (WebCore::DOMWindowExtension::willDetachGlobalObjectFromFrame):
        * page/DOMWindowExtension.h:
        * page/DOMWindowProperty.cpp:
        (WebCore::DOMWindowProperty::DOMWindowProperty):
        * page/DOMWindowProperty.h:
        (WebCore::DOMWindowProperty::window const):
        * page/History.idl:
        * page/Location.idl:
        * page/Navigator.cpp:
        (WebCore::Navigator::plugins):
        (WebCore::Navigator::mimeTypes):
        * page/PerformanceNavigation.idl:
        * page/PerformanceTiming.idl:
        * page/Screen.idl:
        * page/VisualViewport.cpp:
        (WebCore::VisualViewport::scriptExecutionContext const):
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPluginArray.idl:

2019-03-09  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Start observing for content change between touchEnd and mouseMoved start
        https://bugs.webkit.org/show_bug.cgi?id=195510
        <rdar://problem/48735695>

        Reviewed by Simon Fraser.

        This patch covers the observation of async changes triggered by touchStart/touchEnd (animations, timers, style recalcs).

        Test: fast/events/touch/ios/content-observation/visibility-change-after-touch-end.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::didCancelTouchEvent):
        (WebCore::ContentChangeObserver::adjustObservedState):
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::setIsInBetweenTouchEndAndMouseMoved):
        (WebCore::ContentChangeObserver::isInBetweenTouchEndAndMouseMoved const):
        (WebCore::ContentChangeObserver::isObservingContentChanges const):

2019-03-08  Simon Fraser  <simon.fraser@apple.com>

        Make it clearer which data is protected by the two locks in ScrollingTree
        https://bugs.webkit.org/show_bug.cgi?id=195501

        Reviewed by Tim Horton.

        Gather ScrollingTree member variables into two structs, and name the struct
        members and the locks to make it clear which data is protected by each lock.
        
        We only need to protect data read by multiple threads; these are the scrolling
        thread, the event handling thread (which runs ThreadedScrollingTree::tryToHandleWheelEvent()),
        and the main thread, which pokes various bits of pin/rubber-banding state.
        Ideally the main thread would always push data to the scrolling thread via a commit,
        but that's not what happens now.

        Suspiciously, ScrollingTree::shouldHandleWheelEventSynchronously() uses the root node,
        so should probably hold a lock shared with the scrolling thread (webkit.org/b/195502).
        
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously):
        (WebCore::ScrollingTree::commitTreeState):
        (WebCore::ScrollingTree::setAsyncFrameOrOverflowScrollingEnabled):
        (WebCore::ScrollingTree::setMainFrameScrollPosition):
        (WebCore::ScrollingTree::eventTrackingTypeForPoint):
        (WebCore::ScrollingTree::isRubberBandInProgress):
        (WebCore::ScrollingTree::setMainFrameIsRubberBanding):
        (WebCore::ScrollingTree::isScrollSnapInProgress):
        (WebCore::ScrollingTree::setMainFrameIsScrollSnapping):
        (WebCore::ScrollingTree::setMainFramePinState):
        (WebCore::ScrollingTree::setCanRubberBandState):
        (WebCore::ScrollingTree::setScrollPinningBehavior):
        (WebCore::ScrollingTree::scrollPinningBehavior):
        (WebCore::ScrollingTree::willWheelEventStartSwipeGesture):
        (WebCore::ScrollingTree::latchedNode):
        (WebCore::ScrollingTree::setLatchedNode):
        (WebCore::ScrollingTree::clearLatchedNode):
        (WebCore::ScrollingTree::scrollingTreeAsText):
        (WebCore::ScrollingTree::touchActionDataAtPoint const):
        (WebCore::ScrollingTree::mainFrameScrollPosition): Deleted.
        (WebCore::ScrollingTree::mainFrameLayoutViewport): Deleted.
        (WebCore::ScrollingTree::rubberBandsAtLeft): Deleted.
        (WebCore::ScrollingTree::rubberBandsAtRight): Deleted.
        (WebCore::ScrollingTree::rubberBandsAtBottom): Deleted.
        (WebCore::ScrollingTree::rubberBandsAtTop): Deleted.
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::hasLatchedNode const):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::stretchAmount):
        * platform/graphics/FloatPoint.h:
        (WebCore::FloatPoint::isZero const):

2019-03-08  Simon Fraser  <simon.fraser@apple.com>

        Share some code that sets CALayer positions
        https://bugs.webkit.org/show_bug.cgi?id=195485

        Reviewed by Zalan Bujtas.

        Share some code between ScrollingTreeStickyNode and ScrollingTreeFixedNode that sets the position
        of a CALayer given the top-left location.

        * page/scrolling/cocoa/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::relatedNodeScrollPositionDidChange):
        (WebCore::ScrollingTreeFixedNodeInternal::operator*): Deleted.
        * page/scrolling/cocoa/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::relatedNodeScrollPositionDidChange):
        (WebCore::ScrollingTreeStickyNodeInternal::operator*): Deleted.
        * platform/graphics/cocoa/WebCoreCALayerExtras.h:
        * platform/graphics/cocoa/WebCoreCALayerExtras.mm:
        (-[CALayer _web_setLayerTopLeftPosition:]):

2019-03-08  Chris Dumez  <cdumez@apple.com>

        Add support for Device Orientation / Motion permission API
        https://bugs.webkit.org/show_bug.cgi?id=195329
        <rdar://problem/47645367>

        Reviewed by Geoffrey Garen.

        Add support for Device Orientation / Motion permission API:
        - https://github.com/w3c/deviceorientation/issues/57

        Pages can add event listeners for 'deviceorientation' / 'devicemotion' events but
        such events will not be fired until the page's JavaScript calls
        DeviceOrientationEvent.requestPermission() / DeviceMotionEvent.requestPermission()
        and the user grants the request.

        The feature is currently behind an experimental feature flag, off by default.

        Tests: fast/device-orientation/device-motion-request-permission-denied.html
               fast/device-orientation/device-motion-request-permission-granted.html
               fast/device-orientation/device-motion-request-permission-user-gesture.html
               fast/device-orientation/device-orientation-request-permission-denied.html
               fast/device-orientation/device-orientation-request-permission-granted.html
               fast/device-orientation/device-orientation-request-permission-user-gesture.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DeviceMotionEvent.h:
        * dom/DeviceMotionEvent.idl:
        * dom/DeviceOrientationAndMotionAccessController.cpp: Added.
        (WebCore::DeviceOrientationAndMotionAccessController::DeviceOrientationAndMotionAccessController):
        (WebCore::DeviceOrientationAndMotionAccessController::shouldAllowAccess):
        (WebCore::DeviceOrientationAndMotionAccessController::setAccessState):
        * dom/DeviceOrientationAndMotionAccessController.h: Added.
        (WebCore::DeviceOrientationAndMotionAccessController::accessState const):
        * dom/DeviceOrientationEvent.h:
        * dom/DeviceOrientationEvent.idl:
        * dom/DeviceOrientationOrMotionEvent.cpp: Added.
        (WebCore::DeviceOrientationOrMotionEvent::requestPermission):
        * dom/DeviceOrientationOrMotionEvent.h: Added.
        * dom/DeviceOrientationOrMotionEvent.idl: Added.
        * dom/DeviceOrientationOrMotionPermissionState.h: Added.
        * dom/DeviceOrientationOrMotionPermissionState.idl: Added.
        * dom/Document.cpp:
        (WebCore::Document::deviceOrientationAndMotionAccessController):
        * dom/Document.h:
        * dom/Event.cpp:
        * dom/MessagePort.cpp:
        * dom/Microtasks.cpp:
        * page/ChromeClient.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::deviceOrientationController const):
        (WebCore::DOMWindow::deviceMotionController const):
        (WebCore::DOMWindow::isAllowedToUseDeviceMotionOrientation const):
        (WebCore::DOMWindow::isAllowedToAddDeviceMotionOrientationListener const):
        (WebCore::DOMWindow::startListeningForDeviceOrientationIfNecessary):
        (WebCore::DOMWindow::stopListeningForDeviceOrientationIfNecessary):
        (WebCore::DOMWindow::startListeningForDeviceMotionIfNecessary):
        (WebCore::DOMWindow::stopListeningForDeviceMotionIfNecessary):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):
        * page/DOMWindow.h:
        * page/DeviceController.cpp:
        (WebCore::DeviceController::hasDeviceEventListener const):
        * page/DeviceController.h:
        * page/Settings.yaml:

2019-03-08  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Expand "isConsideredClickable" to descendants
        https://bugs.webkit.org/show_bug.cgi?id=195478
        <rdar://problem/48724935>

        Reviewed by Simon Fraser.

        In StyleChangeScope we try to figure out whether newly visible content should stick (menu panes etc) by checking if it is clickable.
        This works fine as long as all the visible elements are gaining new renderers through this style update processs.
        However when an element becomes visible by a change other than display: (not)none, it's not sufficient to just check the element itself,
        since it might not respond to click at all, while its descendants do.
        A concrete example is a max-height value change on usps.com, where the max-height is on a container (menu pane).
        This container itself is not clickable while most of its children are (menu items).    

        Test: fast/events/touch/ios/content-observation/clickable-content-is-inside-a-container.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::StyleChangeScope::StyleChangeScope):
        (WebCore::ContentChangeObserver::StyleChangeScope::~StyleChangeScope):
        (WebCore::ContentChangeObserver::StyleChangeScope::isConsideredHidden const):
        (WebCore::ContentChangeObserver::StyleChangeScope::isConsideredClickable const):
        (WebCore::isConsideredHidden): Deleted.
        * page/ios/ContentChangeObserver.h:

2019-03-08  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Cleanup adjustObservedState
        https://bugs.webkit.org/show_bug.cgi?id=195470
        <rdar://problem/48717823>

        Reviewed by Simon Fraser.

        This is in preparation for introducing an observation window from touchStart -> mouseMoved.
        1. Cancel pending activities (future timers, pending stylesheet recalcs) when visible content change is detected.
        2. The fixed time window takes care of notifying the client -timers, style recalcs during the window should not signal themselves.  
        3. Reset m_isObservingPendingStyleRecalc at StartedStyleRecalc instead of EndedStyleRecalc. 

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::domTimerExecuteDidFinish):
        (WebCore::ContentChangeObserver::styleRecalcDidStart):
        (WebCore::ContentChangeObserver::styleRecalcDidFinish):
        (WebCore::ContentChangeObserver::adjustObservedState):
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::hasPendingActivity const):
        (WebCore::ContentChangeObserver::isObservationTimeWindowActive const):

2019-03-08  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Add StartedDOMTimerExecution and StartedStyleRecalc
        https://bugs.webkit.org/show_bug.cgi?id=195463
        <rdar://problem/48714762>

        Reviewed by Simon Fraser.

        This is in preparation for introducing m_isObservingContentChanges flag to track observing state across events (touchStart -> mouseMoved).

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::domTimerExecuteDidStart):
        (WebCore::ContentChangeObserver::styleRecalcDidStart):
        (WebCore::ContentChangeObserver::styleRecalcDidFinish):
        (WebCore::ContentChangeObserver::setShouldObserveNextStyleRecalc):
        (WebCore::ContentChangeObserver::adjustObservedState):
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::isObservingPendingStyleRecalc const):
        (WebCore::ContentChangeObserver::isObservingStyleRecalc const): Deleted.

2019-03-08  Chris Fleizach  <cfleizach@apple.com>

        AX: AOM accessibleclick does not work on iOS
        https://bugs.webkit.org/show_bug.cgi?id=195423
        <rdar://problem/48682110>

        Reviewed by Joanmarie Diggs.

        Return this value of this method so it can be surfaced to a higher level.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityActivate]):

2019-03-08  Chris Dumez  <cdumez@apple.com>

        imported/w3c/web-platform-tests/FileAPI/reading-data-section/filereader_error.html is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=195441
        <rdar://problem/43437394>

        Reviewed by Alexey Proskuryakov.

        FileReader is an ActiveDOMObject, which means that FileReader::stop() gets called when
        its script execution context is about to get destroyed. FileReader::stop() sets m_state
        to DONE. FileReader::abort() would schedule an asynchronous task and then ASSERT that
        m_state is not DONE, which would hit if FileReader::stop() had been called in between
        the task being scheduled and its execution. To address the issue, have the task abort
        early if isContextStopped() returns true.

        Also replace calls to setPendingActivity() / unsetPendingActivity() with a
        PendingActivity data member as mismatched call to those can lead to leaks.

        * fileapi/FileReader.cpp:
        (WebCore::FileReader::canSuspendForDocumentSuspension const):
        No reason not to suspend if there is no pending read.

        (WebCore::FileReader::stop):
        (WebCore::FileReader::readInternal):
        (WebCore::FileReader::abort):
        (WebCore::FileReader::didFinishLoading):
        (WebCore::FileReader::didFail):
        * fileapi/FileReader.h:

2019-03-08  Zan Dobersek  <zdobersek@igalia.com>

        GLContextEGL: desired EGL config should search for 8-bit components by default
        https://bugs.webkit.org/show_bug.cgi?id=195413

        Reviewed by Carlos Garcia Campos.

        The EGL config search in GLContextEGL should by default look for
        RGBA8888 configurations while allowing RGB565 as an alternative.
        This prevents from accidentally landing on an RGBA1010102
        configuration that is available with some graphics stacks, and which is
        not expected in e.g. window snapshotting that's done for layout test
        output comparison.

        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::getEGLConfig): EGL config search should by
        default request 8-bit color channels.

2019-03-08  Miguel Gomez  <magomez@igalia.com>

        Use a thread safe refcounter for FilterOperation.
        https://bugs.webkit.org/show_bug.cgi?id=194149

        Reviewed by Carlos Garcia Campos.

        Use a thread safe refcounter for FilterOperation.

        * platform/graphics/filters/FilterOperation.h:

2019-03-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Make more fields lazy in JSGlobalObject
        https://bugs.webkit.org/show_bug.cgi?id=195449

        Reviewed by Mark Lam.

        Use arrayBufferConstructor() since getDirect does not work with lazy property.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):

2019-03-07  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver][REGRESSION] Check if visibility change happens while dispatching mouseMoved
        https://bugs.webkit.org/show_bug.cgi?id=195421
        <rdar://problem/48682004>

        Reviewed by Simon Fraser.

        Visibility change might be triggered synchronously while dispatching mouseMoved event.

        Test: fast/events/touch/ios/content-observation/visibility-change-happens-while-in-mousemoved.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::mouseMovedDidStart):
        (WebCore::ContentChangeObserver::mouseMovedDidFinish):
        (WebCore::ContentChangeObserver::isNotifyContentChangeAllowed const):
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::isObservingContentChanges const):

2019-03-07  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Check if max-height change triggers visible content change.
        https://bugs.webkit.org/show_bug.cgi?id=195417
        <rdar://problem/48680631>

        Reviewed by Simon Fraser.

        A fixed max-height non-zero value could indicate visible content change. usps.com uses this technique to show menu panes.  

        Test: fast/events/touch/ios/content-observation/visibility-change-is-max-height-change.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::isConsideredHidden):
        (WebCore::ContentChangeObserver::StyleChangeScope::StyleChangeScope):
        (WebCore::ContentChangeObserver::StyleChangeScope::~StyleChangeScope):
        (WebCore::elementImplicitVisibility): Deleted.
        * page/ios/ContentChangeObserver.h:

2019-03-07  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix failing EWS build for ios-sim

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::touchEventDidStart):

2019-03-07  Eric Carlson  <eric.carlson@apple.com>

        [MSE] Adopt new AVSampleBufferDisplayLayer SPI
        https://bugs.webkit.org/show_bug.cgi?id=195445
        <rdar://problem/48480516>

        Reviewed by Jer Noble.

        No new tests, no functional change.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC): Only register for 
        kCMSampleBufferConsumerNotification_BufferConsumed notiication when
        -[AVSampleBufferDisplayLayer prerollDecodeWithCompletionHandler:] isn't available.
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC): Ditto, for unregistering.
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample): Use 
        -[AVSampleBufferDisplayLayer prerollDecodeWithCompletionHandler:] when possible.

2019-03-07  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Click event fires immediately on hover menu at Ebbets.com
        https://bugs.webkit.org/show_bug.cgi?id=195397

        Reviewed by Simon Fraser.

        This patch introduces TouchEventScope to track changes triggered by touch start.

        Test: fast/events/touch/ios/content-observation/visibility-change-on-touch-start-simple.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::touchEventDidStart):
        (WebCore::ContentChangeObserver::touchEventDidFinish):
        (WebCore::ContentChangeObserver::mouseMovedDidStart):
        (WebCore::ContentChangeObserver::mouseMovedDidFinish):
        (WebCore::ContentChangeObserver::adjustObservedState):
        (WebCore::ContentChangeObserver::TouchEventScope::TouchEventScope):
        (WebCore::ContentChangeObserver::TouchEventScope::~TouchEventScope):
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::isObservingContentChanges const):

2019-03-07  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Introduce fixed duration content observation
        https://bugs.webkit.org/show_bug.cgi?id=195295
        <rdar://problem/48579913>

        Reviewed by Simon Fraser.

        Some pages have a runloop-like scheduling setup where the content triggering change happens at a nested timer firing.
        This patch helps finding cases like that using a 32ms long fixed window. Currently nested timers get dropped on the floor and
        we stop observing for content changes before they even get fired.

        Test: fast/events/touch/ios/content-observation/visibility-change-happens-on-timer-hops.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::ContentChangeObserver):
        (WebCore::ContentChangeObserver::startContentObservationForDuration):
        (WebCore::ContentChangeObserver::completeDurationBasedContentObservation):
        (WebCore::ContentChangeObserver::didInstallDOMTimer):
        (WebCore::ContentChangeObserver::didRemoveDOMTimer):
        (WebCore::ContentChangeObserver::domTimerExecuteDidStart):
        (WebCore::ContentChangeObserver::domTimerExecuteDidFinish):
        (WebCore::ContentChangeObserver::styleRecalcDidStart):
        (WebCore::ContentChangeObserver::styleRecalcDidFinish):
        (WebCore::ContentChangeObserver::cancelPendingActivities):
        (WebCore::ContentChangeObserver::didSuspendActiveDOMObjects):
        (WebCore::ContentChangeObserver::willDetachPage):
        (WebCore::ContentChangeObserver::contentVisibilityDidChange):
        (WebCore::ContentChangeObserver::setShouldObserveNextStyleRecalc):
        (WebCore::ContentChangeObserver::adjustObservedState):
        (WebCore::ContentChangeObserver::StyleChangeScope::StyleChangeScope):
        (WebCore::ContentChangeObserver::StyleChangeScope::~StyleChangeScope):
        (WebCore::ContentChangeObserver::clearTimersAndReportContentChange): Deleted.
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::clearObservedDOMTimers):
        (WebCore::ContentChangeObserver::isObservingContentChanges const):
        (WebCore::ContentChangeObserver::hasPendingActivity const):

2019-03-07  Said Abou-Hallawa  <sabouhallawa@apple.com>

        requestAnimationFrame should execute before the next frame
        https://bugs.webkit.org/show_bug.cgi?id=177484

        Reviewed by Simon Fraser.

        This change fixes two issues with animation timing:

        1. Calling the requestAnimationFrame callbacks would have happened when
           the DisplayLink fires. This may have happened even if the frame is
           missed and no display is committed.

        2. Style changes and layout triggered by script could trigger painting
           at more than 60fps. CoreAnimation commits could happen at more than
           60fps, although WindowServer will throttle those, and only some will
           be shown on the screen.

        This change introduces a new paint scheduling model where painting is
        driven by a "RenderingUpdateScheduler", which only triggers paints once
        per 16.7ms frame.

        Code that previously scheduled a compositing layer flush now schedules a
        "RenderingUpdate", and that update is driven by a DisplayRefreshMonitor
        callback. When the render happens, we service requestAnimationFrame callbacks,
        Web Animations and intersection observations per the "Update the rendering"
        step of the HTML Event Loop specification
        <https://html.spec.whatwg.org/multipage/webappapis.html#update-the-rendering>.

        In the future, more rendering steps will be added to this code.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/mac/AXObjectCacheMac.mm:
        Fix layout tests by adding null check.

        * animation/DocumentAnimationScheduler.cpp: Removed.
        * animation/DocumentAnimationScheduler.h: Removed.
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::DocumentTimeline):
        (WebCore::DocumentTimeline::updateThrottlingState):
        (WebCore::DocumentTimeline::resumeAnimations):
        (WebCore::DocumentTimeline::liveCurrentTime const):
        (WebCore::DocumentTimeline::currentTime):
        (WebCore::DocumentTimeline::animationTimingDidChange):
        (WebCore::DocumentTimeline::scheduleAnimationResolution):
        (WebCore::DocumentTimeline::unscheduleAnimationResolution):
        (WebCore::DocumentTimeline::updateAnimationsAndSendEvents):
        (WebCore::DocumentTimeline::internalUpdateAnimationsAndSendEvents):
        (WebCore::DocumentTimeline::scheduleNextTick):
        (WebCore::DocumentTimeline::updateListOfElementsWithRunningAcceleratedAnimationsForElement):
        Simplify this function by handling the case of no-animations separately.

        (WebCore::DocumentTimeline::resolveAnimationsForElement):
        Simplify the loop and delete hasPendingAcceleratedAnimations because it
        is initialized to true and is not changed inside the loop.

        (WebCore::DocumentTimeline::scheduleAnimationResolutionIfNeeded): Deleted.
        (WebCore::DocumentTimeline::animationResolutionTimerFired): Deleted.
        * animation/DocumentTimeline.h:
        * dom/Document.cpp:
        (WebCore::Document::resolveStyle):
        There is no need to force update in resolveStyle(). notifyFlushRequired()
        will be called eventually which will scheduleRenderingUpdate().

        (WebCore::Document::prepareForDestruction):
        (WebCore::Document::updateAnimationsAndSendEvents):
        (WebCore::Document::serviceRequestAnimationFrameCallbacks):
        (WebCore::Document::windowScreenDidChange):
        (WebCore::Document::updateIntersectionObservations):
        (WebCore::Document::scheduleForcedIntersectionObservationUpdate): Deleted.
        (WebCore::Document::animationScheduler): Deleted.
        * dom/Document.h:
        (WebCore::Document::numberOfIntersectionObservers const):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::serviceRequestAnimationFrameCallbacks):
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        (WebCore::ScriptedAnimationController::animationTimerFired):
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations): Deleted.
        (WebCore::ScriptedAnimationController::documentAnimationSchedulerDidFire): Deleted.
        * dom/ScriptedAnimationController.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::viewportContentsChanged):
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::observe):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::layoutIfNeeded):
        (WebCore::Page::renderingUpdate):
        (WebCore::Page::renderingUpdateScheduler):
        (WebCore::Page::willDisplayPage): Deleted.
        (WebCore::Page::addDocumentNeedingIntersectionObservationUpdate): Deleted.
        (WebCore::Page::updateIntersectionObservations): Deleted.
        (WebCore::Page::scheduleForcedIntersectionObservationUpdate): Deleted.
        * page/Page.h:
        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::didChangeViewExposedRect):
        (WebCore::PageOverlayController::notifyFlushRequired):
        * page/ResourceUsageData.h:
        Include header files that become missing because of adding 
        RenderingUpdateScheduler.cpp.

        * page/RenderingUpdateScheduler.cpp: Added.
        (WebCore::RenderingUpdateScheduler::RenderingUpdateScheduler):
        (WebCore::RenderingUpdateScheduler::scheduleRenderingUpdate):
        (WebCore::RenderingUpdateScheduler::startTimer):
        (WebCore::RenderingUpdateScheduler::clearTimer):
        (WebCore::RenderingUpdateScheduler::windowScreenDidChange):
        (WebCore::RenderingUpdateScheduler::createDisplayRefreshMonitor const):
        (WebCore::RenderingUpdateScheduler::displayRefreshFired):
        * page/RenderingUpdateScheduler.h: Added.
        (WebCore::RenderingUpdateScheduler::create):
        * page/ios/ContentChangeObserver.h:
        Include header files that become missing because of adding 
        RenderingUpdateScheduler.cpp.

        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::notifyFlushRequired):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::scheduleLayerFlushNow):

2019-03-07  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Add a setting to be able to turn content change observation on/off
        https://bugs.webkit.org/show_bug.cgi?id=195353
        <rdar://problem/48626394>

        Reviewed by Simon Fraser.

        Move content observation tests to a dedicated directory.

        Tests: fast/events/touch/ios/content-observation/click-instead-of-hover-simple.html
               fast/events/touch/ios/content-observation/hover-when-style-change-is-async.html
               fast/events/touch/ios/content-observation/stuck-with-hover-state.html
               fast/events/touch/ios/content-observation/style-recalc-schedule-and-force-relalc.html
               fast/events/touch/ios/content-observation/visibility-change-happens-at-the-second-timer.html

        * page/Settings.yaml:
        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::didInstallDOMTimer):
        (WebCore::ContentChangeObserver::isNotifyContentChangeAllowed const):
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::isNotifyContentChangeAllowed const): Deleted.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::resetToConsistentState):

2019-03-07  John Wilander  <wilander@apple.com>

        Make sure an empty host matches the internal representation "nullOrigin" in WebCore::RegistrableDomain::matches()
        https://bugs.webkit.org/show_bug.cgi?id=195435

        Reviewed by Brent Fulgham.

        No new tests. Tests are currently failing and will pass again with
        this patch.

        WebCore::RegistrableDomain::matches() is a quick way to compare a
        RegistrableDomain with a URL. Since RegistrableDomain represents the
        empty host as "nullOrigin," a URL with an empty host needs to match
        that representation in WebCore::RegistrableDomain::matches().
        Failure to do so caused debug assertions in fast/ layout tests after
        https://trac.webkit.org/changeset/242603/webkit.

        * platform/RegistrableDomain.h:
        (WebCore::RegistrableDomain::matches const):

2019-03-07  Justin Fan  <justin_fan@apple.com>

        Unreviewed build fixes since MTLClampToBorderColor is only supported on macOS.

        * Modules/webgpu/GPUSamplerDescriptor.idl:
        * platform/graphics/gpu/GPUSamplerDescriptor.h:
        * platform/graphics/gpu/cocoa/GPUProgrammablePassEncoderMetal.mm: Forgot include.
        * platform/graphics/gpu/cocoa/GPUSamplerMetal.mm:
        (WebCore::mtlAddressModeForAddressMode):
        (WebCore::tryCreateMtlSamplerState):
        (WebCore::mtlBorderColorForBorderColor): Deleted.

2019-03-07  Justin Fan  <justin_fan@apple.com>

        [Web GPU] GPUSampler implementation
        https://bugs.webkit.org/show_bug.cgi?id=195427
        <rdar://problem/48686011>

        Reviewed by Dean Jackson.

        Implement ability to create GPUSamplers and use them as pipeline resource bindings.

        Test: texture-triangle-strip.html updated.

        Add symbols to project:
        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

        GPUSampler creation:
        * Modules/webgpu/GPUSamplerDescriptor.idl: Added.
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createSampler const): Added.
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDevice.idl:
        * Modules/webgpu/WebGPUSampler.cpp: Added.
        (WebCore::WebGPUSampler::create):
        (WebCore::WebGPUSampler::WebGPUSampler):
        * Modules/webgpu/WebGPUSampler.h: Added.
        (WebCore::WebGPUSampler::sampler const):
        * Modules/webgpu/WebGPUSampler.idl: Added.
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::tryCreateSampler const): Added.
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/GPUSampler.h: Added.
        (WebCore::GPUSampler::platformSampler const):
        * platform/graphics/gpu/GPUSamplerDescriptor.h: Added.
        * platform/graphics/gpu/cocoa/GPUSamplerMetal.mm: Added.
        (WebCore::mtlAddressModeForAddressMode):
        (WebCore::mtlBorderColorForBorderColor):
        (WebCore::mtlMinMagFilterForFilterMode):
        (WebCore::mtlMipFilterForFilterMode):
        (WebCore::tryCreateMtlSamplerState):
        (WebCore::GPUSampler::tryCreate):
        (WebCore::GPUSampler::GPUSampler):

        Move GPUCompareFunction to Utils for shared use.
        * platform/graphics/gpu/GPUCompareFunction.h:
        * platform/graphics/gpu/GPUUtils.h:
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::tryCreateMtlDepthStencilState):
        (WebCore::validateAndConvertDepthCompareFunctionToMtl): Deleted.
        * platform/graphics/gpu/cocoa/GPUUtilsMetal.mm:
        (WebCore::platformTextureFormatForGPUTextureFormat):
        (WebCore::platformCompareFunctionForGPUCompareFunction):

        Expand bind groups to accept GPUSamplers:
        * Modules/webgpu/WebGPUBindGroupBinding.h:
        * Modules/webgpu/WebGPUBindGroupBinding.idl:
        * Modules/webgpu/WebGPUBindGroupDescriptor.cpp:
        (WebCore::WebGPUBindGroupDescriptor::asGPUBindGroupDescriptor const):
        * platform/graphics/gpu/GPUBindGroupBinding.h:
        * platform/graphics/gpu/GPUProgrammablePassEncoder.h:
        * platform/graphics/gpu/cocoa/GPUProgrammablePassEncoderMetal.mm:
        (WebCore::GPUProgrammablePassEncoder::setBindGroup):
        (WebCore::GPUProgrammablePassEncoder::setResourceAsBufferOnEncoder):
        (WebCore::GPUProgrammablePassEncoder::setResourceAsSamplerOnEncoder): Added.
        (WebCore::GPUProgrammablePassEncoder::setResourceAsTextureOnEncoder):

        Misc:
        * Modules/webgpu/WebGPUTexture.cpp: Missing includes.
        * Modules/webgpu/WebGPUTexture.h:
        * Modules/webgpu/WebGPUSwapChain.cpp: Removed extra include.

2019-03-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r242297.
        https://bugs.webkit.org/show_bug.cgi?id=195430

        Broke Microsoft Visio. (Requested by dydz on #webkit).

        Reverted changeset:

        "[iOS] Turn mouse event simulation on by default"
        https://bugs.webkit.org/show_bug.cgi?id=195218
        https://trac.webkit.org/changeset/242297

2019-03-07  Sihui Liu  <sihui_liu@apple.com>

        Crash in com.apple.WebCore: WebCore::IDBTransaction::pendingOperationTimerFired + 72
        https://bugs.webkit.org/show_bug.cgi?id=195214
        <rdar://problem/48461116>

        Reviewed by Geoffrey Garen.

        When IDBTransaction is ready to commit, a commit operation would be schedule to 
        m_pendingTransactionOperationQueue. If connection to IDBServer is lost, pending operations are moved to 
        m_transactionOperationsInProgressQueue and will be completed with TransactionOperation::doComplete. doComplete 
        executes complete function of the operation, clears the complete function, and then removes the operation from 
        m_transactionOperationsInProgressQueue. In doComplete, we do early return when complete function is null, 
        since the doComplete could be invoked twice due to the race conditions between receiving "operation complete" 
        message from server and client-side abort.

        However, commit operation does not have a complete function because it should be the last operation of 
        transaction and it gets removed from queue in its perform function. A commit operation would not be removed from 
        m_transactionOperationsInProgressQueue because of the early return. It would be removed from 
        m_transactionOperationMap, which may hold the last ref to the commit operation, in 
        IDBTransaction::connectionClosedFromServer. In this case, when pendingOperationTimerFired is called later, the 
        commit operation left in m_transactionOperationsInProgressQueue would be used and found to be freed. We should
        not use null check of complete function to decide whether an operation is completed.

        * Modules/indexeddb/client/TransactionOperation.h:
        (WebCore::IDBClient::TransactionOperation::doComplete):

2019-03-07  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Log first-party navigations with link decoration
        https://bugs.webkit.org/show_bug.cgi?id=195301
        <rdar://problem/48569971>

        Reviewed by Brent Fulgham.

        Test: http/tests/resourceLoadStatistics/log-cross-site-load-with-link-decoration.html

        This patch adds two new members to WebCore::ResourceLoadStatistics:
        - topFrameLinkDecorationsFrom, a set of domains
        - gotLinkDecorationFromPrevalentResource, a boolean state

        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::encode const):
        (WebCore::ResourceLoadStatistics::decode):
        (WebCore::ResourceLoadStatistics::toString const):
        (WebCore::ResourceLoadStatistics::merge):
        * loader/ResourceLoadStatistics.h:

2019-03-07  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK] REGRESSION (r242132): Fixed position banners flicker and move when scrolling (Apple, Tesla, YouTube, Reddit)
        https://bugs.webkit.org/show_bug.cgi?id=195396
        rdar://problem/48518959

        Reviewed by Antti Koivisto.
        
        r242132 introduced two issues that contributed to jumpiness of position:fixed layers when scrolling.
        
        First, ScrollingTreeScrollingNode::wasScrolledByDelegatedScrolling() would early return if the scroll position
        hadn't changed. It also needs to check the supplied layoutViewport (if any), but in some cases running the
        notifyRelatedNodesAfterScrollPositionChange() code is necessary even without a scroll position change:
        if the web process has committed new scrolling tree state (e.g. with new fixed constraints) since
        the last call, we have to run the layer positioning code to have fixed layers re-adjust their position relative
        to the root. This was the primary bug fix.

        Secondly, a layer tree commit can give ScrollingTreeFrameScrollingNode a new layout viewport, but we need to
        adjust this by the scrolling tree's current scroll position in case it gets used before the next scroll.

        Currently no way to test this, as it's very timing-dependent.

        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNode::scrollPositionAndLayoutViewportMatch):
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::scrollPositionAndLayoutViewportMatch):
        (WebCore::ScrollingTreeScrollingNode::wasScrolledByDelegatedScrolling):
        * page/scrolling/ScrollingTreeScrollingNode.h:

2019-03-07  Youenn Fablet  <youenn@apple.com>

        Introduce a quota manager for Cache API/Service Worker/IDB storage
        https://bugs.webkit.org/show_bug.cgi?id=195283

        Reviewed by Chris Dumez.

        Introduce a generic quota manager and quota users to be used in Network Process.
        Quota manager/users are scoped by client origin.
        Quota manager is used to check for quota by an entity wanting to execute a storage task of a given taskSize.
        Quota manager will check the current space used by all its quota users.
        If the size + taskSize is above quota, it will call a function to try extend the quota.
        In the meantime, the task (and all tasks that may be added) are queued.

        Once the new quota is received, the quota manager will either allow or disallow the first task in the queue.
        The quota manager will try to execute as many tasks as possible with the provided quota.
        If some tasks are remaining and quota limit is hit, the quota manager will compute the space needed for all remaining requests
        and do another quota extension request.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/ClientOrigin.h:
        * storage/StorageQuotaManager.cpp: Added.
        (WebCore::StorageQuotaManager::~StorageQuotaManager):
        (WebCore::StorageQuotaManager::spaceUsage const):
        (WebCore::StorageQuotaManager::requestSpace):
        (WebCore::StorageQuotaManager::askForMoreSpace):
        (WebCore::StorageQuotaManager::processPendingRequests):
        * storage/StorageQuotaManager.h: Added.
        (WebCore::StorageQuotaManager::StorageQuotaManager):
        (WebCore::StorageQuotaManager::addUser):
        (WebCore::StorageQuotaManager::removeUser):
        * storage/StorageQuotaUser.h: Added.

2019-03-07  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Make it possible to purge only script-accessible cookies
        https://bugs.webkit.org/show_bug.cgi?id=195383
        <rdar://problem/48570136>

        Reviewed by Brent Fulgham.

        Test: http/tests/resourceLoadStatistics/delete-script-accessible-cookies.html

        This patch provides the ability to purge all script-accessible cookies while leaving
        HttpOnly cookies in place.

        * loader/CookieJar.h:
            Added boolean enum IncludeHttpOnlyCookies for use as function parameter.
        * platform/network/NetworkStorageSession.h:
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::deleteCookiesForHostnames):
            Support for the new IncludeHttpOnlyCookies flag.
        * platform/network/curl/NetworkStorageSessionCurl.cpp:
        (WebCore::NetworkStorageSession::deleteCookiesForHostnames):
            Stubbed out the new function and added a FIXME comment.
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::deleteCookiesForHostnames):
            Stubbed out the new function and added a FIXME comment.

2019-03-06  Mark Lam  <mark.lam@apple.com>

        Exception is a JSCell, not a JSObject.
        https://bugs.webkit.org/show_bug.cgi?id=195392

        Reviewed by Saam Barati.

        * bridge/objc/objc_utility.h:
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::throwError):
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::throwInvalidAccessError):
        * bridge/runtime_object.h:

2019-03-07  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: lazily create the agent
        https://bugs.webkit.org/show_bug.cgi?id=195241

        Reviewed by Joseph Pecoraro.

        No functionality change.

        * html/canvas/CanvasRenderingContext.h:
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::instances): Added.
        (WebCore::CanvasRenderingContext::instancesMutex): Added.
        (WebCore::CanvasRenderingContext::CanvasRenderingContext):
        (WebCore::CanvasRenderingContext::~CanvasRenderingContext):

        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::instances): Added.
        (WebCore::WebGLProgram::instancesMutex): Added.
        (WebCore::WebGLProgram::WebGLProgram):
        (WebCore::WebGLProgram::~WebGLProgram):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::~WebGLRenderingContextBase):

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::createLazyAgents):

        * inspector/agents/InspectorCanvasAgent.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::enable):
        (WebCore::InspectorCanvasAgent::disable):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        (WebCore::InspectorCanvasAgent::didCreateCanvasRenderingContext):
        (WebCore::InspectorCanvasAgent::canvasDestroyed):
        (WebCore::InspectorCanvasAgent::didCreateProgram):
        (WebCore::InspectorCanvasAgent::willDeleteProgram):
        (WebCore::InspectorCanvasAgent::bindCanvas): Added.
        (WebCore::InspectorCanvasAgent::canvasDestroyedTimerFired):

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didCreateCanvasRenderingContext):
        (WebCore::InspectorInstrumentation::didCreateProgram):
        (WebCore::InspectorInstrumentation::willDeleteProgram):

2019-03-06  Ross Kirsling  <ross.kirsling@sony.com>

        [Win] Remove -DUCHAR_TYPE=wchar_t stopgap and learn to live with char16_t.
        https://bugs.webkit.org/show_bug.cgi?id=195346

        Reviewed by Fujii Hironori.

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::appendLinkedFonts):
        (WebCore::getLinkedFonts):
        (WebCore::FontCache::systemFallbackForCharacters):
        (WebCore::FontCache::fontFromDescriptionAndLogFont):
        (WebCore::createGDIFont):
        (WebCore::FontCache::getFontSelectionCapabilitiesInFamily):
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/GlyphPageTreeNodeCairoWin.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::createIconForFiles):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::mimeTypeCache):
        (WebCore::MediaPlayerPrivateMediaFoundation::startCreateMediaSource):
        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::itemizeShapeAndPlace):
        (WebCore::UniscribeController::shape):
        * platform/network/win/DownloadBundleWin.cpp:
        (WebCore::DownloadBundle::appendResumeData):
        (WebCore::DownloadBundle::extractResumeData):
        * platform/text/win/LocaleWin.cpp:
        (WebCore::LCIDFromLocaleInternal):
        (WebCore::LCIDFromLocale):
        (WebCore::LocaleWin::getLocaleInfoString):
        * platform/win/BString.cpp:
        (WebCore::BString::BString):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::getWebLocData):
        (WebCore::createGlobalData):
        (WebCore::getFileDescriptorData):
        (WebCore::getURL):
        (WebCore::getCFData):
        (WebCore::setCFData):
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::asFilenames const):
        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageIconForCachedImageFilename):
        (WebCore::dragLabelFont):
        * platform/win/MIMETypeRegistryWin.cpp:
        (WebCore::mimeTypeForExtension):
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::read):
        (WebCore::filesystemPathFromUrlOrTitle):
        (WebCore::Pasteboard::writeURLToDataObject):
        (WebCore::createGlobalImageFileDescriptor):
        (WebCore::createGlobalHDropContent):
        * platform/win/SSLKeyGeneratorWin.cpp:
        (WebCore::signedPublicKeyAndChallengeString):
        * platform/win/SharedBufferWin.cpp:
        (WebCore::SharedBuffer::createFromReadingFile):
        * rendering/RenderThemeWin.cpp:
        (WebCore::fillFontDescription):
        Use wchar helpers as needed.

2019-03-06  Devin Rousso  <drousso@apple.com>

        Web Inspector: DOM Debugger: event breakpoints still fire when breakpoints are disabled
        https://bugs.webkit.org/show_bug.cgi?id=195377
        <rdar://problem/48651645>

        Reviewed by Joseph Pecoraro and Matt Baker.

        Test: inspector/dom-debugger/event-listener-breakpoints.html

        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::willHandleEvent):
        (WebCore::InspectorDOMDebuggerAgent::willFireTimer):
        (WebCore::InspectorDOMDebuggerAgent::willFireAnimationFrame):

2019-03-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Crash when attempting to change input type while dismissing datalist suggestions
        https://bugs.webkit.org/show_bug.cgi?id=195384
        <rdar://problem/48563718>

        Reviewed by Brent Fulgham.

        When closing a datalist suggestion menu, WebPageProxy sends a message to WebPage instructing it to tell its
        active datalist suggestions picker to close. However, for a myriad of reasons, the suggestions picker (kept
        alive by its text input type) may have already gone away by this point. To mitigate this, make WebPage weakly
        reference its active datalist suggestions picker.

        Test: fast/forms/datalist/change-input-type-after-closing-datalist-suggestions.html

        * platform/DataListSuggestionPicker.h:

        Make DataListSuggestionPicker capable of being weakly referenced. Additionally, fix some minor preexisting
        issues in this header (#imports instead of #includes, as well as an unnecessary include of IntRect.h).

2019-03-06  Ryan Haddad  <ryanhaddad@apple.com>

        Remove an unneeded assert that was added with r242113
        https://bugs.webkit.org/show_bug.cgi?id=195391

        Reviewed by Simon Fraser.

        Many layout tests are failing ASSERT(m_mediaBufferingIsSuspended). Since m_mediaBufferingIsSuspended is
        protected by an 'if' statement directly afterwards, the assertion should be safe to remove.

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

2019-03-06  Justin Fan  <justin_fan@apple.com>

        Unreviewed build fix. Replace a forward declaration with an include.

        * Modules/webgpu/WebGPUTextureView.cpp:
        * Modules/webgpu/WebGPUTextureView.h:

2019-03-06  Justin Fan  <justin_fan@apple.com>

        [Web GPU] GPUTexture and GPUTextureView updates, and related GPUBindGroup updates
        https://bugs.webkit.org/show_bug.cgi?id=195347

        Reviewed by Dean Jackson.

        Implement the ability to display image data as a GPUTexture in the rendering pipeline. Improve GPUTexture and 
        GPUTextureView implementations. Rename various bind group classes to GPU* to match API.

        Test: webgpu/texture-triangle-strip.html

        * Modules/webgpu/WebGPUBindGroupDescriptor.cpp:
        (WebCore::WebGPUBindGroupDescriptor::asGPUBindGroupDescriptor const): Update to validate GPUTextureView resources.
        * Modules/webgpu/WebGPUCommandBuffer.cpp: Move instead of copy the converted view objects.
        (WebCore::WebGPUCommandBuffer::copyBufferToTexture):
        (WebCore::WebGPUCommandBuffer::copyTextureToBuffer):
        (WebCore::WebGPUCommandBuffer::copyTextureToTexture):
        * Modules/webgpu/WebGPUCommandBuffer.h:
        (WebCore::WebGPUCommandBuffer::commandBuffer const): No longer returns const so used resources can be registered on it.
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createBindGroupLayout const): Rename WebGPUBindGroupLayoutDescriptor and replace unnecessary rvalue reference.
        * Modules/webgpu/WebGPUDevice.h: Ditto.
        * Modules/webgpu/WebGPUDevice.idl: Ditto.
        * Modules/webgpu/WebGPUProgrammablePassEncoder.cpp:
        (WebCore::WebGPUProgrammablePassEncoder::setBindGroup const):
        * Modules/webgpu/WebGPUProgrammablePassEncoder.h:
        * Modules/webgpu/WebGPUQueue.cpp:
        (WebCore::WebGPUQueue::submit):
        * Modules/webgpu/WebGPURenderPassDescriptor.cpp:
        (WebCore::WebGPURenderPassDescriptor::asGPURenderPassDescriptor const):
        * Modules/webgpu/WebGPUTexture.cpp:
        (WebCore::WebGPUTexture::~WebGPUTexture): Clean up any resources created for and from this WebGPUTexture.
        (WebCore::WebGPUTexture::createDefaultTextureView): Now returns an empty object other than null on failure.
        (WebCore::WebGPUTexture::destroy):
        (WebCore::WebGPUTexture::destroyImpl):
        * Modules/webgpu/WebGPUTexture.h: Keep a list of any views created from this texture.
        * Modules/webgpu/WebGPUTexture.idl: Enable destroy.
        * Modules/webgpu/WebGPUTextureView.cpp:
        (WebCore::WebGPUTextureView::create):
        (WebCore::WebGPUTextureView::WebGPUTextureView):
        (WebCore::WebGPUTextureView::destroy):
        * Modules/webgpu/WebGPUTextureView.h:
        (WebCore::WebGPUTextureView::~WebGPUTextureView): Clean up any resources backing this WebGPUTextureView.
        (WebCore::WebGPUTextureView::texture const):
        (WebCore::WebGPUTextureView::texture): Deleted.
        * platform/graphics/gpu/GPUBindGroupLayout.h:
        * platform/graphics/gpu/GPUCommandBuffer.h:
        (WebCore::GPUCommandBuffer::usedTextures const): Keep a list of all texture resources that will be used by this command buffer on submit.
        (WebCore::GPUCommandBuffer::isEncodingPass const): Added to prevent multiple pass encoders from being active on one command buffer.
        (WebCore::GPUCommandBuffer::setIsEncodingPass):
        (WebCore::GPUCommandBuffer::useTexture):
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::tryCreateBindGroupLayout const):
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/GPUPipelineLayout.cpp:
        (WebCore::GPUPipelineLayout::GPUPipelineLayout):
        * platform/graphics/gpu/GPUProgrammablePassEncoder.cpp:
        (WebCore::GPUProgrammablePassEncoder::GPUProgrammablePassEncoder):
        * platform/graphics/gpu/GPUProgrammablePassEncoder.h:
        (WebCore::GPUProgrammablePassEncoder::setVertexBuffer):
        (WebCore::GPUProgrammablePassEncoder::setFragmentBuffer):
        (): Deleted.
        * platform/graphics/gpu/GPUQueue.h:
        * platform/graphics/gpu/GPURenderPassEncoder.h:
        * platform/graphics/gpu/GPUTexture.h:
        (WebCore::GPUTexture::isReadOnly const):
        (WebCore::GPUTexture::destroy):
        * platform/graphics/gpu/cocoa/GPUBindGroupLayoutMetal.mm:
        (WebCore::MTLDataTypeForBindingType):
        (WebCore::GPUBindGroupLayout::tryCreate):
        * platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm:
        (WebCore::GPUCommandBuffer::create):
        (WebCore::GPUCommandBuffer::~GPUCommandBuffer): Ensure blitEncoder is ended before releasing it.
        (WebCore::GPUCommandBuffer::endBlitEncoding):
        (WebCore::GPUCommandBuffer::copyBufferToTexture): Ensure textures are marked for usage before submission occurs.
        (WebCore::GPUCommandBuffer::copyTextureToBuffer):
        (WebCore::GPUCommandBuffer::copyTextureToTexture):
        * platform/graphics/gpu/cocoa/GPUDeviceMetal.mm:
        (WebCore::GPUDevice::create):
        (WebCore::GPUDevice::GPUDevice):
        * platform/graphics/gpu/cocoa/GPUProgrammablePassEncoderMetal.mm:
        (WebCore::GPUProgrammablePassEncoder::endPass):
        (WebCore::GPUProgrammablePassEncoder::setBindGroup): Now supports texture resources.
        (WebCore::GPUProgrammablePassEncoder::setResourceAsBufferOnEncoder): Just moved.
        (WebCore::GPUProgrammablePassEncoder::setResourceAsTextureOnEncoder):
        * platform/graphics/gpu/cocoa/GPUQueueMetal.mm:
        (WebCore::GPUQueue::submit): Ensures destroyed GPUTextures are not submitted.
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::GPURenderPassEncoder::tryCreate): Ensure any other encoders are ended before attempting to activate a new one.
        (WebCore::GPURenderPassEncoder::platformPassEncoder const):
        (WebCore::GPURenderPassEncoder::endPass): Invalidates the MTLCommandEncoder upon success.
        (WebCore::GPURenderPassEncoder::setPipeline):
        (WebCore::GPURenderPassEncoder::setVertexBuffers):
        (WebCore::GPURenderPassEncoder::draw):
        (WebCore::GPURenderPassEncoder::useResource):
        (WebCore::GPURenderPassEncoder::setVertexBuffer):
        (WebCore::GPURenderPassEncoder::setFragmentBuffer):
        * platform/graphics/gpu/cocoa/GPUSwapChainMetal.mm:
        (WebCore::GPUSwapChain::getNextTexture):
        * platform/graphics/gpu/cocoa/GPUTextureMetal.mm:
        (WebCore::storageModeForPixelFormatAndSampleCount): 
                Always create MTLStorageModePrivate textures on macOS, as Web GPU doesn't provide CPU access to textures anyway.
        (WebCore::tryCreateMtlTextureDescriptor):
        (WebCore::GPUTexture::create):
        (WebCore::GPUTexture::GPUTexture):
        (WebCore::GPUTexture::tryCreateDefaultTextureView): Renamed from createDefaultTextureView.

        Update files and symbols in project:
        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/streams/WebGPUBindGroupLayoutDescriptor.h: Removed.
        * Modules/webgpu/GPUBindGroupLayoutBinding.h: Renamed from Source/WebCore/platform/graphics/gpu/GPUBindGroupLayoutBinding.h.
        * Modules/webgpu/GPUBindGroupLayoutBinding.idl: Renamed from Source/WebCore/Modules/webgpu/WebGPUBindGroupLayoutBinding.idl.
        * Modules/webgpu/GPUBindGroupLayoutDescriptor.h: Renamed from Source/WebCore/platform/graphics/gpu/GPUBindGroupLayoutDescriptor.h.
        * Modules/webgpu/GPUBindGroupLayoutDescriptor.idl: Renamed from Source/WebCore/Modules/webgpu/WebGPUBindGroupLayoutDescriptor.idl.
        * Modules/webgpu/GPUShaderStageBit.h: Renamed from Source/WebCore/Modules/webgpu/WebGPUShaderStageBit.h.
        * Modules/webgpu/GPUShaderStageBit.idl: Renamed from Source/WebCore/Modules/webgpu/WebGPUShaderStageBit.idl.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2019-03-06  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Pack and unpack data at entry points and exit points
        https://bugs.webkit.org/show_bug.cgi?id=193877

        Reviewed by Dean Jackson.

        This implements the bulk of the rest of the Metal code generation piece.
        Specifically, this patch adds support for the packing and unpacking steps
        at the beginning of the entry point functions and all returns from those
        functions. It does this by creating an object, EntryPointScaffolding, that
        knows how to emit all the helper types, packing / unpacking code, and the
        function signature. This patch also accepts parts of the
        PipelineStateDescriptor so we know the data layout we should be packing and
        unpacking.

        This is the last patch before enough of the compiler is present that we can
        start testing it. The next patch will start porting the test suite.

        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:
        (WebCore::WHLSL::Metal::attributeForSemantic):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::EntryPointScaffolding):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::mappedBindGroups const):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::resourceHelperTypes):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::resourceSignature):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::builtInsSignature):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::mangledInputPath):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::mangledOutputPath):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::unpackResourcesAndNamedBuiltIns):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::VertexEntryPointScaffolding):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::helperTypes):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::signature):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::unpack):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::pack):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::FragmentEntryPointScaffolding):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::helperTypes):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::signature):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::unpack):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::pack):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::ComputeEntryPointScaffolding):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::helperTypes):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::signature):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::unpack):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::pack):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::helperTypes): Deleted.
        (WebCore::WHLSL::Metal::EntryPointScaffolding::signature): Deleted.
        (WebCore::WHLSL::Metal::EntryPointScaffolding::unpack): Deleted.
        (WebCore::WHLSL::Metal::EntryPointScaffolding::pack): Deleted.
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.h:
        (WebCore::WHLSL::Metal::EntryPointScaffolding::parameterVariables):
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDeclarationWriter::toString):
        (WebCore::WHLSL::Metal::FunctionDeclarationWriter::visit):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::FunctionDefinitionWriter):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::generateNextVariableName):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::constantExpressionString):
        (WebCore::WHLSL::Metal::RenderFunctionDefinitionWriter::RenderFunctionDefinitionWriter):
        (WebCore::WHLSL::Metal::RenderFunctionDefinitionWriter::takeVertexMappedBindGroups):
        (WebCore::WHLSL::Metal::RenderFunctionDefinitionWriter::takeFragmentMappedBindGroups):
        (WebCore::WHLSL::Metal::RenderFunctionDefinitionWriter::createEntryPointScaffolding):
        (WebCore::WHLSL::Metal::ComputeFunctionDefinitionWriter::ComputeFunctionDefinitionWriter):
        (WebCore::WHLSL::Metal::ComputeFunctionDefinitionWriter::takeMappedBindGroups):
        (WebCore::WHLSL::Metal::ComputeFunctionDefinitionWriter::createEntryPointScaffolding):
        (WebCore::WHLSL::Metal::sharedMetalFunctions):
        (WebCore::WHLSL::Metal::metalFunctions):
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLMappedBindings.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLMetalCodeGenerator.h.
        * Modules/webgpu/WHLSL/Metal/WHLSLMetalCodeGenerator.cpp:
        (WebCore::WHLSL::Metal::generateMetalCodeShared):
        (WebCore::WHLSL::Metal::generateMetalCode):
        * Modules/webgpu/WHLSL/Metal/WHLSLMetalCodeGenerator.h:
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.h:
        (WebCore::WHLSL::Intrinsics::float2Type const):
        * Modules/webgpu/WHLSL/WHLSLPipelineDescriptor.h: Added.
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp: Added.
        (WebCore::WHLSL::prepareShared):
        (WebCore::WHLSL::prepare):
        * Modules/webgpu/WHLSL/WHLSLPrepare.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLMetalCodeGenerator.h.
        * Modules/webgpu/WHLSL/WHLSLSemanticMatcher.cpp: Added.
        (WebCore::WHLSL::findEntryPoint):
        (WebCore::WHLSL::matchMode):
        (WebCore::WHLSL::matchResources):
        (WebCore::WHLSL::matchInputsOutputs):
        (WebCore::WHLSL::isAcceptableFormat):
        (WebCore::WHLSL::matchVertexAttributes):
        (WebCore::WHLSL::matchColorAttachments):
        (WebCore::WHLSL::matchDepthAttachment):
        (WebCore::WHLSL::matchSemantics):
        * Modules/webgpu/WHLSL/WHLSLSemanticMatcher.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-03-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Move RenderObject::isTransparentOrFullyClippedRespectingParentFrames() to RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=195300

        Reviewed by Simon Fraser.

        Move isTransparentOrFullyClippedRespectingParentFrames() from RenderObject to RenderLayer, since this function
        asks questions about RenderLayers rather than their renderers. No change in behavior.

        * rendering/RenderLayer.cpp:
        (WebCore::enclosingFrameRenderLayer):
        (WebCore::parentLayerCrossFrame):

        Some static helpers currently in RenderObject that walk up the layer hierarchy through subframes are redundant
        with static helpers in RenderLayer. Now that isTransparentOrFullyClippedRespectingParentFrames exists in
        RenderLayer, simply use this existing helper instead and split logic to grab the enclosing layer around the
        owner element of a frame into a separate helper.

        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::enclosingFrameRenderLayer): Deleted.
        (WebCore::parentLayerCrossingFrameBoundaries): Deleted.
        (WebCore::RenderObject::isTransparentOrFullyClippedRespectingParentFrames const): Deleted.

        Moved from RenderObject.

        * rendering/RenderObject.h:

2019-03-06  Sihui Liu  <sihui_liu@apple.com>

        Assertion Failed: m_databaseQueue.isKilled() in UniqueIDBDatabase::~UniqueIDBDatabase()
        https://bugs.webkit.org/show_bug.cgi?id=195073
        <rdar://problem/48285200>

        Reviewed by Geoffrey Garen.

        r240931 removed a retain cycle between IDBConnectionToServer and IDBConnectionToServerDelegate, so 
        IDBConnectionToServerDelegate, or InProcessIDBServer would not live forever. When IDBDatabase is gone, 
        InProcessIDBServer would schedule a notifification to IDBServer with databaseConnectionClosed. IDBServer would 
        then notify UniqueIDBDatabase. When UniqueIDBDatabase finds all database connections are gone, it would acquires
        its only reference pointer from IDBServer schedule and perform a shutdown that kills its database task queue.

        The assertion failure tells us UniqueIDBDatabase was destructed at when IDBServer was destructed, which means 
        UniqueIDBDatabase had not acquired its pointer. It's probably because UniqueIDBDatabase had unfinished tasks or
        the operation timer function had not been executed. Since UniqueIDBDatabase needs to complete shutdown process,
        we should make IDBServer live as long as UniqueIDBDatabase by keeping a reference pointer of IDBServer in 
        UniqueIDBDatabase. 

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::UniqueIDBDatabase):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::scheduleShutdownForClose):
        (WebCore::IDBServer::UniqueIDBDatabase::openBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::postDatabaseTask):
        (WebCore::IDBServer::UniqueIDBDatabase::postDatabaseTaskReply):
        (WebCore::IDBServer::UniqueIDBDatabase::immediateCloseForUserDelete):
        (WebCore::IDBServer::UniqueIDBDatabase::notifyServerAboutClose):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        (WebCore::IDBServer::UniqueIDBDatabase::server):

2019-03-06  Rob Buis  <rbuis@igalia.com>

        Consider supporting the `referrerpolicy` attribute.
        https://bugs.webkit.org/show_bug.cgi?id=179053

        Reviewed by Darin Adler.

        This patch adds 'referrerpolicy' attribute support for iframe.
        If set, the value is restricted to the ReferrerPolicy enum, and
        if valid it is used for the subframe load.
        If not set or invalid, the current behavior is kept.

        Tests: http/tests/referrer-policy-iframe/no-referrer-when-downgrade/cross-origin-http-http.html
               http/tests/referrer-policy-iframe/no-referrer-when-downgrade/cross-origin-http.https.html
               http/tests/referrer-policy-iframe/no-referrer-when-downgrade/same-origin.html
               http/tests/referrer-policy-iframe/no-referrer/cross-origin-http-http.html
               http/tests/referrer-policy-iframe/no-referrer/cross-origin-http.https.html
               http/tests/referrer-policy-iframe/no-referrer/same-origin.html
               http/tests/referrer-policy-iframe/origin-when-cross-origin/cross-origin-http-http.html
               http/tests/referrer-policy-iframe/origin-when-cross-origin/cross-origin-http.https.html
               http/tests/referrer-policy-iframe/origin-when-cross-origin/same-origin.html
               http/tests/referrer-policy-iframe/origin/cross-origin-http-http.html
               http/tests/referrer-policy-iframe/origin/cross-origin-http.https.html
               http/tests/referrer-policy-iframe/origin/same-origin.html
               http/tests/referrer-policy-iframe/same-origin/cross-origin-http-http.html
               http/tests/referrer-policy-iframe/same-origin/cross-origin-http.https.html
               http/tests/referrer-policy-iframe/same-origin/same-origin.html
               http/tests/referrer-policy-iframe/strict-origin-when-cross-origin/cross-origin-http-http.html
               http/tests/referrer-policy-iframe/strict-origin-when-cross-origin/cross-origin-http.https.html
               http/tests/referrer-policy-iframe/strict-origin-when-cross-origin/same-origin.html
               http/tests/referrer-policy-iframe/strict-origin/cross-origin-http-http.html
               http/tests/referrer-policy-iframe/strict-origin/cross-origin-http.https.html
               http/tests/referrer-policy-iframe/strict-origin/same-origin.html
               http/tests/referrer-policy-iframe/unsafe-url/cross-origin-http-http.html
               http/tests/referrer-policy-iframe/unsafe-url/cross-origin-http.https.html
               http/tests/referrer-policy-iframe/unsafe-url/same-origin.html

        * html/HTMLAttributeNames.in:
        * html/HTMLFrameOwnerElement.h:
        (WebCore::HTMLFrameOwnerElement::referrerPolicy const):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::setReferrerPolicyForBindings):
        (WebCore::HTMLIFrameElement::referrerPolicyForBindings const):
        (WebCore::HTMLIFrameElement::referrerPolicy const):
        * html/HTMLIFrameElement.h:
        * html/HTMLIFrameElement.idl:
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadSubframe):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::referrerPolicyAttributeEnabled const):
        (WebCore::RuntimeEnabledFeatures::setReferrerPolicyAttributeEnabled):
        * platform/ReferrerPolicy.cpp:
        (WebCore::parseReferrerPolicy):
        * platform/ReferrerPolicy.h:

2019-03-05  Takashi Komori  <Takashi.Komori@sony.com>

        [curl] Remove unnecessary file.
        https://bugs.webkit.org/show_bug.cgi?id=195350

        Reviewed by Fujii Hironori.

        Removed unused file.

        No new tests. No change in behavior.

        * platform/network/curl/CookieJarCurlDatabase.cpp: Removed.

2019-03-05  Eric Liang  <ericliang@apple.com>

        AX: Add remote search support for keyboard focusable element search type
        https://bugs.webkit.org/show_bug.cgi?id=195336

        Reviewed by Chris Fleizach.

        Added AXKeyboardFocusable search key to return default keyboard-focusable elements for accessibility.

        Test: accessibility/mac/search-predicate-keyboard-focusable.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isAccessibilityObjectSearchMatchAtIndex):
        (WebCore::AccessibilityObject::isKeyboardFocusable const):
        * accessibility/AccessibilityObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (createAccessibilitySearchKeyMap):

2019-03-05  Don Olmstead  <don.olmstead@sony.com>

        [WinCairo] Enable CSS Typed OM
        https://bugs.webkit.org/show_bug.cgi?id=195340

        Reviewed by Myles C. Maxfield.

        * bindings/js/CallTracerTypes.h:

2019-03-05  Sihui Liu  <sihui_liu@apple.com>

        Fix a typo in Web SQL quirk
        https://bugs.webkit.org/show_bug.cgi?id=195338

        Reviewed by Geoffrey Garen.

        * page/Quirks.cpp:
        (WebCore::Quirks::hasWebSQLSupportQuirk const):

2019-03-05  Daniel Bates  <dabates@apple.com>

        [iOS] Should not scroll when checkbox, radio, submit, reset, or button is spacebar activated
        https://bugs.webkit.org/show_bug.cgi?id=195281
        <rdar://problem/48564347>

        Reviewed by Simon Fraser.

        Do not call the base class's default event handler (HTMLTextFormControlElement::defaultEventHandler())
        when WebCore sees a keydown of the spacebar as we consider such an event as handled.
        Otherwise, calling the base class's default event handler ultimately gives the embedding
        client a chance to wrongly handle the event. In the case of iOS, keydown of the spacebar
        causes the page to scroll.

        WebCore implements spacebar activation on keydown for form controls. For IE compatibility
        WebCore does not mark such keydown events as handled so that a DOM keypress event will
        be subsequently dispatched. The current logic only skips calling the base class's default
        event handler if the DOM event was not marked handled. This is insufficient. We need to
        know whether WebCore handled the event. If asking the input type to handle the key down
        marks the DOM event as handled then, clearly, WebCore handled the event. However, if the
        event is not marked as handled, but WebCore actually accounted for this event then we need
        to know this so that we do not call the base class's default event handler and ultimately
        the embedding client asking for an interpretation of the key event. Towards this, have
        InputType::handleKeydownEvent() return a bit whether or not the base class's default
        event handler should be invoked.

        Tests: fast/events/ios/activating-button-should-not-scroll-page.html
               fast/events/ios/activating-checkbox-should-not-scroll-page.html
               fast/events/ios/activating-radio-button-should-not-scroll-page.html
               fast/events/ios/activating-reset-button-should-not-scroll-page.html
               fast/events/ios/activating-submit-button-should-not-scroll-page.html

        * html/BaseCheckableInputType.cpp:
        (WebCore::BaseCheckableInputType::handleKeydownEvent): Return ShouldCallBaseEventHandler::No
        if WebCore handled the spacebar activation. Otherewise, return ShouldCallBaseEventHandler::Yes.
        * html/BaseCheckableInputType.h:
        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::handleKeydownEvent): Ditto.
        * html/BaseChooserOnlyDateAndTimeInputType.h:
        * html/BaseClickableWithKeyInputType.cpp:
        (WebCore::BaseClickableWithKeyInputType::handleKeydownEvent): Keep our current behavior by returning ShouldCallBaseEventHandler::Yes.
        * html/BaseClickableWithKeyInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler): Do not fallthrough and call the base class's default
        event handler if the input type told us it handled the event regardless of whether the event was handled
        from the perspective of the DOM.
        * html/InputType.cpp:
        (WebCore::InputType::handleKeydownEvent): Keep our current behavior by returning ShouldCallBaseEventHandler::Yes.
        * html/InputType.h:

        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::handleKeydownEvent):
        * html/NumberInputType.h:
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::handleKeydownEvent):
        * html/RadioInputType.h:
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleKeydownEvent):
        * html/RangeInputType.h:
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::handleKeydownEvent):
        * html/SearchInputType.h:
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::handleKeydownEvent):
        * html/TextFieldInputType.h:
        Keep our current behavior by returning ShouldCallBaseEventHandler::Yes.

2019-03-05  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Implement Cookie Accept Policy.
        https://bugs.webkit.org/show_bug.cgi?id=191645

        Reviewed by Fujii Hironori.

        Make Curl network layer respect to coookie accept policy.
        This patch fixes tests below on TestRunner, but doesn't fix tests on DumpRenderTree.

        Tests: http/tests/cookies/only-accept-first-party-cookies.html
               http/tests/cookies/third-party-cookie-relaxing.html
               http/tests/security/cookies/third-party-cookie-blocking-redirect.html
               http/tests/security/cookies/third-party-cookie-blocking-user-action.html
               http/tests/security/cookies/third-party-cookie-blocking-xslt.xml
               http/tests/security/cookies/third-party-cookie-blocking.html

        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::cookiesForSession):
        (WebCore::CookieJarCurl::setCookiesFromDOM const):
        (WebCore::CookieJarCurl::setCookiesFromHTTPResponse const):
        (WebCore::CookieJarCurl::setCookieAcceptPolicy const):
        (WebCore::CookieJarCurl::cookieAcceptPolicy const):
        (WebCore::CookieJarCurl::getRawCookies const):
        * platform/network/curl/CookieJarCurl.h:
        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::openDatabase):
        (WebCore::CookieJarDB::isEnabled const):
        (WebCore::CookieJarDB::checkCookieAcceptPolicy):
        (WebCore::CookieJarDB::hasCookies):
        (WebCore::CookieJarDB::searchCookies):
        (WebCore::CookieJarDB::canAcceptCookie):
        (WebCore::CookieJarDB::setCookie):
        (WebCore::CookieJarDB::setEnabled): Deleted.
        * platform/network/curl/CookieJarDB.h:
        (WebCore::CookieJarDB::setAcceptPolicy):
        (WebCore::CookieJarDB::acceptPolicy const):
        * platform/network/curl/CookieUtil.cpp:
        (WebCore::CookieUtil::parseCookieAttributes):
        (WebCore::CookieUtil::parseCookieHeader):
        * platform/network/curl/CurlResourceHandleDelegate.cpp:
        (WebCore::handleCookieHeaders):
        (WebCore::CurlResourceHandleDelegate::curlDidReceiveResponse):

2019-03-05  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Assert on if notify content change is allowed
        https://bugs.webkit.org/show_bug.cgi?id=195332
        <rdar://problem/48603276>

        Reviewed by Simon Fraser.

        Assert we don't notify the client about the state change while in handleSyntheticClick().

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::domTimerExecuteDidStart):
        (WebCore::ContentChangeObserver::domTimerExecuteDidFinish):
        (WebCore::ContentChangeObserver::adjustObservedState):
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::isObservingContentChanges const):
        (WebCore::ContentChangeObserver::isNotifyContentChangeAllowed const):

2019-03-05  Said Abou-Hallawa  <sabouhallawa@apple.com>

        SVGPathSegList.insertItemBefore() should fail if the newItem belongs to an animating animPathSegList
        https://bugs.webkit.org/show_bug.cgi?id=195333
        <rdar://problem/48475802>

        Reviewed by Simon Fraser.

        Because the SVG1.1 specs states that the newItem should be removed from
        its original list before adding it to another list,
        SVGPathSegList.insertItemBefore() should fail if the new item belongs to
        an animating animPathSegList since it is read-only.

        Test: svg/dom/SVGPathSegList-insert-from-animating-animPathSegList.svg

        * svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::processIncomingListItemValue):

2019-03-05  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Send content change notification through adjustObservedState
        https://bugs.webkit.org/show_bug.cgi?id=195328
        <rdar://problem/48601143>

        Reviewed by Simon Fraser.

        Have a dedicated place for the notification logic.

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::stopDurationBasedContentObservation):
        (WebCore::ContentChangeObserver::didInstallDOMTimer):
        (WebCore::ContentChangeObserver::didRemoveDOMTimer):
        (WebCore::ContentChangeObserver::domTimerExecuteDidFinish):
        (WebCore::ContentChangeObserver::styleRecalcDidFinish):
        (WebCore::ContentChangeObserver::mouseMovedDidStart):
        (WebCore::ContentChangeObserver::adjustObservedState):
        (WebCore::ContentChangeObserver::registerDOMTimer): Deleted.
        (WebCore::ContentChangeObserver::unregisterDOMTimer): Deleted.
        (WebCore::ContentChangeObserver::notifyContentChangeIfNeeded): Deleted.
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::registerDOMTimer):
        (WebCore::ContentChangeObserver::unregisterDOMTimer):

2019-03-05  Youenn Fablet  <youenn@apple.com>

        MockLibWebRTCPeerConnection is leaking some session description
        https://bugs.webkit.org/show_bug.cgi?id=195315
        <rdar://problem/47840038>

        Reviewed by David Kilzer.

        Make sure to release raw pointers given from WebCore to mock libwebrtc layer.
        Covered by existing tests when run in leaks mode.

        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::MockLibWebRTCPeerConnection::SetLocalDescription):
        (WebCore::MockLibWebRTCPeerConnection::SetRemoteDescription):

2019-03-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r242403.

        Caused layout test crashes on iOS simulator.

        Reverted changeset:

        "[ContentChangeObserver] Introduce fixed duration content
        observation"
        https://bugs.webkit.org/show_bug.cgi?id=195295
        https://trac.webkit.org/changeset/242403

2019-03-05  Frederic Wang  <fwang@igalia.com>

        Web Inspector: Better categorize CPU usage per-thread / worker
        https://bugs.webkit.org/show_bug.cgi?id=194564

        Unreviewed compilation fix.

        * page/ResourceUsageData.h: Add missing headers.

2019-03-05  Frederic Wang  <fwang@igalia.com>

        Share more code for updating the state of frame scrolling nodes
        https://bugs.webkit.org/show_bug.cgi?id=195254

        Unreviewed compilation warning fix.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated): Add UNUSED_PARAM on non-Cocoa
        platforms.

2019-03-05  Cathie Chen  <cathiechen@igalia.com>

        The include file in ScrollingStateFrameHostingNode.h is wrong.
        https://bugs.webkit.org/show_bug.cgi?id=195280

        Reviewed by Frédéric Wang.

        * page/scrolling/ScrollingStateFrameHostingNode.h:

2019-03-04  Justin Fan  <justin_fan@apple.com>

        Unreviewed build fix for High Sierra.

        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm: Should fix "global constructor" error.

2019-03-04  Brent Fulgham  <bfulgham@apple.com>

        Use a SQLite database to hold the ResourceLoadStatistics data
        https://bugs.webkit.org/show_bug.cgi?id=194867
        <rdar://problem/24240854>

        Reviewed by Chris Dumez.

        Add a new runtime feature flag to support use of an experimental database
        back-end. Also expose some SQLite function calls for use outside of WebCore.

        No change in functionality, so no new tests.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setItpDatabaseModeEnabled):
        (WebCore::RuntimeEnabledFeatures::itpDatabaseModeEnabled const):
        * platform/sql/SQLiteDatabase.h:
        * platform/sql/SQLiteStatement.h:

2019-03-04  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Blitting function prototypes
        https://bugs.webkit.org/show_bug.cgi?id=195224
        <rdar://problem/48538902>

        Reviewed by Dean Jackson.

        Implement barebones GPUCommandBuffer::copy* prototypes while rounding out GPUTexture implementation details.

        Test: webgpu/blit-commands.html

        * Modules/webgpu/GPUOrigin3D.h: Added.
        * Modules/webgpu/GPUOrigin3D.idl: Added.
        * Modules/webgpu/WebGPUCommandBuffer.cpp: Add copy view struct implementations.
        (WebCore::WebGPUBufferCopyView::asGPUBufferCopyView const): Added.
        (WebCore::WebGPUTextureCopyView::asGPUTextureCopyView const): Added.
        (WebCore::WebGPUCommandBuffer::copyBufferToBuffer): Added.
        (WebCore::WebGPUCommandBuffer::copyBufferToTexture): Added.
        (WebCore::WebGPUCommandBuffer::copyTextureToBuffer): Added.
        (WebCore::WebGPUCommandBuffer::copyTextureToTexture): Added.
        * Modules/webgpu/WebGPUCommandBuffer.h: Add new functions and supporting structs.
        * Modules/webgpu/WebGPUCommandBuffer.idl: Ditto.
        * Modules/webgpu/WebGPURenderPassDescriptor.cpp: Refactor constructors to copy the entire base class.
        (WebCore::GPURenderPassColorAttachmentDescriptor::GPURenderPassColorAttachmentDescriptor):
        (WebCore::GPURenderPassDepthStencilAttachmentDescriptor::GPURenderPassDepthStencilAttachmentDescriptor):
        (WebCore::WebGPURenderPassDescriptor::asGPURenderPassDescriptor const):
        (WebCore::attachment): Deleted.
        * Modules/webgpu/WebGPUTexture.h:
        (WebCore::WebGPUTexture::texture const): Added.
        * platform/graphics/gpu/GPUBuffer.h:
        (WebCore::GPUBuffer::byteLength const): Added.
        (WebCore::GPUBuffer::isTransferSource const): Added.
        (WebCore::GPUBuffer::isTransferDestination const): Renamed from isTransferDst. Refactored for OptionSet API.
        (WebCore::GPUBuffer::isVertex const): Ditto.
        (WebCore::GPUBuffer::isUniform const): Ditto.
        (WebCore::GPUBuffer::isStorage const): Ditto.
        (WebCore::GPUBuffer::isMappable const): Ditto.
        (WebCore::GPUBuffer::isMapWrite const): Ditto.
        (WebCore::GPUBuffer::isMapRead const): Ditto.
        * platform/graphics/gpu/GPUBufferUsage.h: Refactored for better bit flag style.
        * platform/graphics/gpu/GPUCommandBuffer.h:
        (WebCore::GPUCommandBuffer::blitEncoder const): Added.
        * platform/graphics/gpu/GPURenderPassDescriptor.h: 
        * platform/graphics/gpu/GPUTexture.h: Cache usage flags for reference.
        (WebCore::GPUTexture::isTransferSrc const): Added.
        (WebCore::GPUTexture::isTransferDst const): Added.
        (WebCore::GPUTexture::isOutputAttachment const): Added.
        * platform/graphics/gpu/GPUTextureUsage.h: Refactor to match GPUBufferUsage.h.
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::validateBufferUsage): Renamed from validateBufferCreate, refactored for OptionSet.
        (WebCore::GPUBuffer::tryCreate):
        (WebCore::GPUBuffer::GPUBuffer):
        (WebCore::GPUBuffer::isReadOnly const):
        (WebCore::GPUBuffer::setSubData): Add alignment check according to Metal docs.
        * platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm: 
        (WebCore::GPUCommandBuffer::create): No need to use this alias here.
        (WebCore::GPUCommandBuffer::GPUCommandBuffer): Ditto.
        (WebCore::GPUCommandBuffer::copyBufferToBuffer): Added.
        (WebCore::GPUCommandBuffer::copyBufferToTexture): Added.
        (WebCore::GPUCommandBuffer::copyTextureToBuffer): Added. 
        (WebCore::GPUCommandBuffer::copyTextureToTexture): Added. 
        * platform/graphics/gpu/cocoa/GPUQueueMetal.mm:
        (WebCore::GPUQueue::submit): End encoding on the MTLCommandBuffer's blitCommandEncoder if it was used.
        * platform/graphics/gpu/cocoa/GPUSwapChainMetal.mm:
        (WebCore::GPUSwapChain::getNextTexture): Now provide usage flags to texture creation.
        * platform/graphics/gpu/cocoa/GPUTextureMetal.mm:
        (WebCore::mtlTextureUsageForGPUTextureUsageFlags): Refactor validation.
        (WebCore::tryCreateMtlTextureDescriptor): Ditto.
        (WebCore::GPUTexture::tryCreate): Now provide usage flags to texture creation.
        (WebCore::GPUTexture::create): Ditto.
        (WebCore::GPUTexture::GPUTexture): Ditto.
        (WebCore::GPUTexture::createDefaultTextureView): Ditto.

2019-03-04  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Introduce fixed duration content observation
        https://bugs.webkit.org/show_bug.cgi?id=195295
        <rdar://problem/48579913>

        Reviewed by Simon Fraser.

        Some pages have a runloop-like scheduling setup where the content triggering change happens at a nested timer firing.
        This patch helps finding cases like that using a 32ms long fixed window. Currently nested timers get dropped on the floor and
        we stop observing for content changes before they even get fired.

        Test: fast/events/touch/ios/visibility-change-happens-on-timer-hops.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::ContentChangeObserver):
        (WebCore::ContentChangeObserver::startContentObservationForDuration):
        (WebCore::ContentChangeObserver::stopDurationBasedContentObservation):
        (WebCore::ContentChangeObserver::hasDeterminateState const):
        (WebCore::ContentChangeObserver::adjustObservedState):
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::isObservingContentChanges const):
        (WebCore::ContentChangeObserver::hasPendingActivity const):

2019-03-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Native text selection UI is incorrectly suppressed in Microsoft Visio
        https://bugs.webkit.org/show_bug.cgi?id=195178
        <rdar://problem/48519394>

        Reviewed by Darin Adler.

        Currently, our heuristics for detecting hidden editable areas attempt to search for empty parent renderers with
        "overflow: hidden". It does this by ascending the layer tree in search of renderers that have an empty content
        size, and whose renderers' styles indicate that they have overflow: hidden in the X or Y directions. This fails
        in the case where a child renderer is positioned out of flow, relative to one of its parent layers, since the
        child will be visible, but we'll incorrectly believe that it is hidden. This leads to selection UI unexpectedly
        disappearing in the online version of Microsoft Visio.

        To fix this, we check whether the enclosing layer around the editable element has an empty clip rect; if the
        element is inside of a subframe, we additionally walk up to each enclosing frame's layer and check if that
        frame's layer has an empty clip rect.

        Test: editing/selection/ios/do-not-hide-selection-in-visible-container.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isTransparentOrFullyClippedRespectingParentFrames const):

2019-03-01  Ryosuke Niwa  <rniwa@webkit.org>

        gPictureOwnerMap is unnecessary
        https://bugs.webkit.org/show_bug.cgi?id=195228

        Reviewed by Zalan Bujtas.

        Just store in HTMLImageElement. An extra pointer isn't going to affect the memory use here.
        If anything, we should worry about m_editableImage and m_pendingClonedAttachmentID instead.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::pictureElement const):
        (WebCore::HTMLImageElement::setPictureElement):
        * html/HTMLImageElement.h:

2019-03-04  Daniel Bates  <dabates@apple.com>

        [iOS] Caret x-position in empty text area does not match text field
        https://bugs.webkit.org/show_bug.cgi?id=195125
        <rdar://problem/47161070>

        Remove the word "use" in the added comment to make it read well.

        * css/html.css:
        (textarea):

2019-03-04  Joseph Pecoraro  <pecoraro@apple.com>

        ITMLKit Inspector: Data Bindings / Associated Data for nodes
        https://bugs.webkit.org/show_bug.cgi?id=195290
        <rdar://problem/48304019>

        Reviewed by Devin Rousso.

        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getDataBindingsForNode):
        (WebCore::InspectorDOMAgent::getAssociatedDataForNode):
        Stub these for web pages, they will only be used for ITMLKit right now.

2019-03-04  Daniel Bates  <dabates@apple.com>

        [iOS] Caret x-position in empty text area does not match text field
        https://bugs.webkit.org/show_bug.cgi?id=195125
        <rdar://problem/47161070>

        Reviewed by Darin Adler.

        Fix up User Agent styles for <textarea> on iOS such that they have the same left padding
        width and same text-indent as <input type="text">. This makes the x-position of the caret
        in an empty textarea match the position of the caret in an empty text field.

        Test: fast/forms/textarea/ios/caret-x-position-in-textarea-matches-textfield.html

        * css/html.css:
        (textarea): For iOS Family, do not use the padding shorthand property. Instead explicitly specify
        padding-top and padding-bottom to be 2px to keep our current behavior (because it looks reasonable)
        and do not specify left and right padding so that we inherit the padding set earlier in this file.
        (textarea::placeholder): Deleted. This was added to "try" to make fix up the position of the placeholder
        text so as to match the position of the textarea's inner text and the position of a text field's inner
        text. This fix up may have worked out visually when it was added, but based on the discovery of the
        hardcoded 3px left and right padding (see below remark) it looks like it was always one pixel too short.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::createInnerTextStyle): Remove hardcoded 3px left and right padding.

2019-03-04  Youenn Fablet  <youenn@apple.com>

        Make sure to correctly notify of end of a ServiceWorkerJob when the context is stopped
        https://bugs.webkit.org/show_bug.cgi?id=195195

        Reviewed by Chris Dumez.

        Before the patch, we were notifying that some jobs were finished too aggressively at context stop time.
        This was confusing the Network Process.
        Only notify such jobs that have pending loads.
        Improve the tracking of jobs doing registration resolution to ensure the Network Process gets notified
        in case of a registration promise being resolved but the settling callback being not yet called while the context is stopped.

        Covered by existing tests not crashing anymore, in particular imported/w3c/web-platform-tests/service-workers/service-worker/skip-waiting.https.html.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::notifyRegistrationIsSettled):
        (WebCore::ServiceWorkerContainer::stop):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::cancelPendingLoad):
        * workers/service/ServiceWorkerJob.h:
        (WebCore::ServiceWorkerJob::isLoading const):

2019-03-04  Chris Dumez  <cdumez@apple.com>

        [iOS] Improve our file picker
        https://bugs.webkit.org/show_bug.cgi?id=195284
        <rdar://problem/45655856>

        Reviewed by Tim Horton and Wenson Hsieh.

        Export UTIUtilities.h so that it can be used from WebKit2.

        * WebCore.xcodeproj/project.pbxproj:

2019-03-04  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Decouple mouseMoved event and the "is observing content change" status.
        https://bugs.webkit.org/show_bug.cgi?id=195286

        Reviewed by Simon Fraser.

        Now isObservingContentChanges returns true only when we are actively observing content change during timer firing and/or style recalculating.
        This patch also renames a couple of functions to follow the didStart/didFinish pattern.

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::domTimerExecuteDidStart):
        (WebCore::ContentChangeObserver::domTimerExecuteDidFinish):
        (WebCore::ContentChangeObserver::styleRecalcDidStart):
        (WebCore::ContentChangeObserver::styleRecalcDidFinish):
        (WebCore::ContentChangeObserver::mouseMovedDidStart):
        (WebCore::ContentChangeObserver::mouseMovedDidFinish):
        (WebCore::ContentChangeObserver::setShouldObserveNextStyleRecalc):
        (WebCore::ContentChangeObserver::StyleChangeScope::StyleChangeScope):
        (WebCore::ContentChangeObserver::MouseMovedScope::MouseMovedScope):
        (WebCore::ContentChangeObserver::MouseMovedScope::~MouseMovedScope):
        (WebCore::ContentChangeObserver::StyleRecalcScope::StyleRecalcScope):
        (WebCore::ContentChangeObserver::StyleRecalcScope::~StyleRecalcScope):
        (WebCore::ContentChangeObserver::DOMTimerScope::DOMTimerScope):
        (WebCore::ContentChangeObserver::DOMTimerScope::~DOMTimerScope):
        (WebCore::ContentChangeObserver::startObservingDOMTimerExecute): Deleted.
        (WebCore::ContentChangeObserver::stopObservingDOMTimerExecute): Deleted.
        (WebCore::ContentChangeObserver::startObservingStyleRecalc): Deleted.
        (WebCore::ContentChangeObserver::stopObservingStyleRecalc): Deleted.
        (WebCore::ContentChangeObserver::startObservingMouseMoved): Deleted.
        (WebCore::ContentChangeObserver::stopObservingMouseMoved): Deleted.
        (WebCore::ContentChangeObserver::setShouldObserveStyleRecalc): Deleted.
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::setShouldObserveDOMTimerScheduling):
        (WebCore::ContentChangeObserver::isObservingDOMTimerScheduling const):
        (WebCore::ContentChangeObserver::isObservingStyleRecalc const):
        (WebCore::ContentChangeObserver::isObservingContentChanges const):
        (WebCore::ContentChangeObserver::startObservingDOMTimerScheduling): Deleted.
        (WebCore::ContentChangeObserver::stopObservingDOMTimerScheduling): Deleted.
        (WebCore::ContentChangeObserver::shouldObserveStyleRecalc const): Deleted.

2019-03-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Offer @makeTypeError instead of exposing @TypeError
        https://bugs.webkit.org/show_bug.cgi?id=193858

        Reviewed by Mark Lam.

        Use @makeTypeError instead.

        * Modules/mediastream/RTCPeerConnection.js:
        * Modules/mediastream/RTCPeerConnectionInternals.js:
        * Modules/streams/ReadableByteStreamInternals.js:
        (readableByteStreamControllerClose):
        (readableByteStreamControllerPullInto):
        * Modules/streams/ReadableStream.js:
        (cancel):
        (pipeTo):
        * Modules/streams/ReadableStreamBYOBReader.js:
        (cancel):
        (read):
        * Modules/streams/ReadableStreamDefaultReader.js:
        (cancel):
        (read):
        * Modules/streams/ReadableStreamInternals.js:
        (readableStreamReaderGenericRelease):
        * Modules/streams/WritableStream.js:
        (abort):
        (close):
        (write):
        (getter.closed):
        (getter.ready):

2019-03-04  Simon Fraser  <simon.fraser@apple.com>

        Share more code between overflow and frame scrolling nodes, fixing overflow scrollbar display
        https://bugs.webkit.org/show_bug.cgi?id=195258

        Reviewed by Antti Koivisto.

        This patch moves management of scrollbar layers and scrollbar painters ("NSScrollerImp") down to
        ScrollingStateScrollingNode to be shared between frame and overflow nodes, allowing for
        scrolling thread updates of overflow scrollbars. It also moves some scrolling tree-side code
        to ScrollingTreeScrollingNodeDelegateMac to be shared between the "tree" nodes for overflow and frames.

        Layers for scrollbars are given to scrolling state nodes via setNodeLayers() now, and
        RenderLayerCompositor::updateScrollingNodeLayers() is added to provide a bottleneck to call that.
        At some point AsyncScrollingCoordinator::scrollableAreaScrollbarLayerDidChange() should be relieved
        of the responsibility of pushing scrollbar layers (but the scrolling state tree needs to hold
        references to GraphicsLayers before that becomes safe).
        
        The actual fix that allows overflow scrollbars to show is the change in
        AsyncScrollingCoordinator::scrollableAreaScrollbarLayerDidChange() that calls scrollableArea.*ScrollbarLayerDidChange()
        for all ScrollableAreas. This ensures that the CALayer is pushed onto the NSScrollerImp.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::scrollableAreaScrollbarLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::setNodeLayers):
        (WebCore::AsyncScrollingCoordinator::setFrameScrollingNodeState):
        (WebCore::AsyncScrollingCoordinator::setScrollingNodeScrollableAreaGeometry):
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
        (WebCore::ScrollingStateFrameScrollingNode::setAllPropertiesChanged):
        (WebCore::ScrollingStateFrameScrollingNode::setVerticalScrollbarLayer): Deleted.
        (WebCore::ScrollingStateFrameScrollingNode::setHorizontalScrollbarLayer): Deleted.
        (WebCore::ScrollingStateFrameScrollingNode::setScrollerImpsFromScrollbars): Deleted.
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setAllPropertiesChanged):
        (WebCore::ScrollingStateScrollingNode::setHorizontalScrollbarLayer):
        (WebCore::ScrollingStateScrollingNode::setVerticalScrollbarLayer):
        (WebCore::ScrollingStateScrollingNode::setScrollerImpsFromScrollbars):
        * page/scrolling/ScrollingStateScrollingNode.h:
        (WebCore::ScrollingStateScrollingNode::horizontalScrollbarLayer const):
        (WebCore::ScrollingStateScrollingNode::verticalScrollbarLayer const):
        (WebCore::ScrollingStateScrollingNode::verticalScrollerImp const):
        (WebCore::ScrollingStateScrollingNode::horizontalScrollerImp const):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::setOrClearLatchedNode):
        (WebCore::ScrollingTree::handleWheelEvent):
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm: Renamed from Source/WebCore/page/scrolling/mac/ScrollingStateFrameScrollingNodeMac.mm.
        (WebCore::ScrollingStateScrollingNode::setScrollerImpsFromScrollbars):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::handleWheelEvent):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::repositionRelatedLayers):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::~ScrollingTreeFrameScrollingNodeMac): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::releaseReferencesToScrollerImpsOnTheMainThread): Deleted.
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::commitStateBeforeChildren):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::handleWheelEvent):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::repositionRelatedLayers):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::~ScrollingTreeScrollingNodeDelegateMac):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::updateFromStateNode):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::handleWheelEvent):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::updateScrollbarPainters):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::releaseReferencesToScrollerImpsOnTheMainThread):
        * platform/ScrollbarThemeComposite.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::didChangePlatformLayerForLayer):
        (WebCore::RenderLayerCompositor::updateScrollingNodeLayers):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForScrollingRole):
        * rendering/RenderLayerCompositor.h:

2019-03-04  Jer Noble  <jer.noble@apple.com>

        Remove HEVC as a codec requiring hardware support.
        https://bugs.webkit.org/show_bug.cgi?id=194960
        <rdar://problem/47741432>

        Reviewed by Eric Carlson.

        * page/cocoa/SettingsBaseCocoa.mm:
        (WebCore::SettingsBase::defaultMediaContentTypesRequiringHardwareSupport):

2019-03-04  Jer Noble  <jer.noble@apple.com>

        [iOS] Fullscreen "stay in page" option breaks video playback
        https://bugs.webkit.org/show_bug.cgi?id=195277
        <rdar://problem/48537317>

        Reviewed by Eric Carlson.

        Add a LOG entry when playback is rejected due to media playback suspension.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackPermitted const):

2019-03-04  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * dom/Document.h:

2019-03-03  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Content observation should be limited to the current document.
        https://bugs.webkit.org/show_bug.cgi?id=195256
        <rdar://problem/48544402>

        Move ContentChangeObserver from Page to Document.
        It limits content observation to the target node's owner document.

        Reviewed by Simon Fraser.

        * dom/Document.cpp:
        (WebCore::m_contentChangeObserver):
        (WebCore::Document::updateStyleIfNeeded):
        (WebCore::Document::willDetachPage):
        (WebCore::Document::platformSuspendOrStopActiveDOMObjects):
        (WebCore::m_undoManager): Deleted.
        * dom/Document.h:
        (WebCore::Document::contentChangeObserver):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::removeById):
        (WebCore::DOMTimer::fired):
        * page/Frame.cpp:
        (WebCore::Frame::willDetachPage):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::pointerLockController const):
        (WebCore::Page::contentChangeObserver): Deleted.
        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::ContentChangeObserver):
        (WebCore::ContentChangeObserver::didInstallDOMTimer):
        (WebCore::ContentChangeObserver::stopObservingDOMTimerExecute):
        (WebCore::ContentChangeObserver::stopObservingStyleRecalc):
        (WebCore::ContentChangeObserver::clearTimersAndReportContentChange):
        (WebCore::ContentChangeObserver::startObservingMouseMoved):
        (WebCore::ContentChangeObserver::hasDeterminateState const):
        (WebCore::ContentChangeObserver::adjustObservedState):
        (WebCore::ContentChangeObserver::notifyContentChangeIfNeeded):
        (WebCore::ContentChangeObserver::StyleChangeScope::StyleChangeScope):
        (WebCore::ContentChangeObserver::StyleChangeScope::~StyleChangeScope):
        (WebCore::ContentChangeObserver::MouseMovedScope::MouseMovedScope):
        (WebCore::ContentChangeObserver::MouseMovedScope::~MouseMovedScope):
        (WebCore::ContentChangeObserver::StyleRecalcScope::StyleRecalcScope):
        (WebCore::ContentChangeObserver::StyleRecalcScope::~StyleRecalcScope):
        (WebCore::ContentChangeObserver::DOMTimerScope::DOMTimerScope):
        (WebCore::ContentChangeObserver::DOMTimerScope::~DOMTimerScope):
        (WebCore::hasPendingStyleRecalc): Deleted.
        * page/ios/ContentChangeObserver.h:
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::mouseMoved):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateElementRenderer):

2019-03-02  Simon Fraser  <simon.fraser@apple.com>

        Share more code for updating the state of frame scrolling nodes
        https://bugs.webkit.org/show_bug.cgi?id=195254

        Reviewed by Antti Koivisto.

        Responsibility for updating state on ScrollingStateFrameScrolling nodes was split between
        AsyncScrollingCoordinator::frameViewLayoutUpdated(), which is called post-layout, and
        RenderLayerCompositor. This patch gives that responsibility entirely to RenderLayerCompositor,
        ensuring that we update frame scrolling nodes at the same time as the rest of the scrolling
        state tree.
        
        We also share code between updating ScrollingStateFrameScrollingNodes and
        ScrollingStateOverflowScrollingNodews, since both can be updated from a ScrollableArea.
        Some minor cleanup of ScrollableArea is doing to help. For the first time, we're pushing
        ScrollableAreaParameters for overflow scrolling nodes, allowing rubber-banding to work
        on macOS.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::setRectRelativeToParentNode):
        (WebCore::AsyncScrollingCoordinator::setFrameScrollingNodeState):
        (WebCore::AsyncScrollingCoordinator::setScrollingNodeScrollableAreaGeometry):
        (WebCore::AsyncScrollingCoordinator::setViewportConstraintedNodeConstraints):
        (WebCore::AsyncScrollingCoordinator::setScrollingNodeGeometry): Deleted.
        (WebCore::AsyncScrollingCoordinator::setViewportConstraintedNodeGeometry): Deleted.
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::setRectRelativeToParentNode):
        (WebCore::ScrollingCoordinator::setScrollingNodeScrollableAreaGeometry):
        (WebCore::ScrollingCoordinator::setFrameScrollingNodeState):
        (WebCore::ScrollingCoordinator::setViewportConstraintedNodeConstraints):
        (WebCore::ScrollingCoordinator::setScrollingNodeGeometry): Deleted.
        (WebCore::ScrollingCoordinator::setViewportConstraintedNodeGeometry): Deleted.
        * platform/ScrollView.h:
        (WebCore::ScrollView::horizontalScrollbarMode const): Deleted.
        (WebCore::ScrollView::verticalScrollbarMode const): Deleted.
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::reachableTotalContentsSize const):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::horizontalScrollbarMode const):
        (WebCore::ScrollableArea::verticalScrollbarMode const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::overhangAmount const):
        (WebCore::RenderLayer::reachableTotalContentsSize const):
        (WebCore::RenderLayer::scrollableContentsSize const): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::updateBackingAndHierarchy):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForViewportConstrainedRole):
        (WebCore::RenderLayerCompositor::rootParentRelativeScrollableRect const):
        (WebCore::RenderLayerCompositor::parentRelativeScrollableRect const):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForScrollingRole):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForFrameHostingRole):
        (WebCore::RenderLayerCompositor::computeFrameScrollingGeometry const): Deleted.
        (WebCore::RenderLayerCompositor::computeFrameHostingGeometry const): Deleted.
        (WebCore::RenderLayerCompositor::computeOverflowScrollingGeometry const): Deleted.
        * rendering/RenderLayerCompositor.h:

2019-03-02  Darin Adler  <darin@apple.com>

        Retire legacy dtoa function and DecimalNumber class
        https://bugs.webkit.org/show_bug.cgi?id=195253

        Reviewed by Daniel Bates.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::formatNumberValue const): Use makeString instead
        of DecimalNumber. Also changed return type to String and use StringView and
        removed special handling of literals.
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText const): Removed an
        unnecessary use of StringBuilder.

        * css/CSSPrimitiveValue.h: Updated for changes to formatNumberValue.

2019-03-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] Cleanups in SoupNetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=195247

        Reviewed by Daniel Bates.

        This renames clientCertificates to allowedCertificates, since they are not client
        certificates at all, but server certificates. It also adds a using statement to avoid
        repeating the long type of the map, and avoids an unnecessary copy.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::allowedCertificates):
        (WebCore::SoupNetworkSession::checkTLSErrors):
        (WebCore::SoupNetworkSession::allowSpecificHTTPSCertificateForHost):
        (WebCore::clientCertificates): Deleted.

2019-03-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        -Wformat error in SharedBuffer::tryCreateArrayBuffer
        https://bugs.webkit.org/show_bug.cgi?id=195004

        Reviewed by Darin Adler.

        Seems C++ has no format specifier appropriate for printing the result of sizeof. We should
        just not try to print it. Anyway, that's easy in this case, because sizeof(char) is
        guaranteed to be 1. This code was an attempt to be pedantic to account for mythical systems
        with char larger than one byte, but perhaps it didn't realize sizeof always returns
        multiples of char and so sizeof(char) is always one even on such mythical systems.

        Note the sizeof(char) use two lines up is left since it's not clear that switching it to 1
        would actually be more readable.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::tryCreateArrayBuffer const):

2019-03-03  Tim Horton  <timothy_horton@apple.com>

        Remove some more unused 32-bit code
        https://bugs.webkit.org/show_bug.cgi?id=195255

        Reviewed by Darin Adler.

        * platform/gamepad/cocoa/GameControllerGamepad.h:
        * platform/gamepad/cocoa/GameControllerGamepad.mm:
        * platform/gamepad/cocoa/GameControllerGamepadProvider.h:
        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::globalPointForEvent):
        (WebCore::pointForEvent):
        (WebCore::mouseButtonForEvent):
        (WebCore::PlatformMouseEventBuilder::PlatformMouseEventBuilder):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::servicesRolloverButtonCell const):
        (WebCore::RenderThemeMac::paintImageControlsButton):
        (WebCore::RenderThemeMac::imageControlsButtonSize const):
        (WebCore::RenderThemeMac::imageControlsButtonPositionOffset const):

2019-03-02  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Introduce ContentChangeObserver::MouseMovedScope
        https://bugs.webkit.org/show_bug.cgi?id=195252
        <rdar://problem/48539446>

        Reviewed by Simon Fraser.

        Scope the mouse-moved event to make the callsites less error-prone. 

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::startObservingMouseMoved):
        (WebCore::ContentChangeObserver::stopObservingMouseMoved):
        (WebCore::ContentChangeObserver::MouseMovedScope::MouseMovedScope):
        (WebCore::ContentChangeObserver::MouseMovedScope::~MouseMovedScope):
        (WebCore::ContentChangeObserver::startObservingContentChanges): Deleted.
        (WebCore::ContentChangeObserver::stopObservingContentChanges): Deleted.
        * page/ios/ContentChangeObserver.h:
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::mouseMoved):

2019-03-02  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Introduce ContentChangeObserver::adjustObservedState
        https://bugs.webkit.org/show_bug.cgi?id=195244
        <rdar://problem/48536737>

        Reviewed by Simon Fraser.

        Move state change handling code to adjustObservedState() and introduce signalContentChangeIfNeeded() to
        let the client know about the state change (or lack of state change).

        Test: fast/events/touch/ios/visibility-change-happens-at-the-second-timer.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::didInstallDOMTimer):
        (WebCore::ContentChangeObserver::didRemoveDOMTimer):
        (WebCore::ContentChangeObserver::stopObservingDOMTimerExecute):
        (WebCore::ContentChangeObserver::stopObservingStyleRecalc):
        (WebCore::ContentChangeObserver::clearTimersAndReportContentChange):
        (WebCore::ContentChangeObserver::didContentVisibilityChange):
        (WebCore::ContentChangeObserver::addObservedDOMTimer):
        (WebCore::ContentChangeObserver::removeObservedDOMTimer):
        (WebCore::ContentChangeObserver::setShouldObserveStyleRecalc):
        (WebCore::ContentChangeObserver::adjustObservedState):
        (WebCore::ContentChangeObserver::signalContentChangeIfNeeded):
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::isObservingDOMTimerScheduling const):
        (WebCore::ContentChangeObserver::addObservedDOMTimer): Deleted.
        (WebCore::ContentChangeObserver::setShouldObserveStyleRecalc): Deleted.

2019-03-02  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Move away from WKContentChange values
        https://bugs.webkit.org/show_bug.cgi?id=195240
        <rdar://problem/48532358>

        Reviewed by Simon Fraser.

        This is in preparation for moving towards a state machine-like implementation.

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::didInstallDOMTimer): Do not install the timer if we are already in "hover" state.
        (WebCore::ContentChangeObserver::didRemoveDOMTimer):
        (WebCore::ContentChangeObserver::startObservingDOMTimerExecute):
        (WebCore::ContentChangeObserver::stopObservingDOMTimerExecute):
        (WebCore::ContentChangeObserver::startObservingStyleRecalc): No need to start observing the style recalc if we are already in "hover" state.
        (WebCore::ContentChangeObserver::stopObservingStyleRecalc):
        (WebCore::ContentChangeObserver::clearTimersAndReportContentChange):
        (WebCore::ContentChangeObserver::didContentVisibilityChange):
        (WebCore::ContentChangeObserver::startObservingContentChanges):
        (WebCore::ContentChangeObserver::observedContentChange const):
        (WebCore::ContentChangeObserver::removeObservedDOMTimer):
        (WebCore::ContentChangeObserver::hasDeterminedState const):
        (WebCore::ContentChangeObserver::observedContentChange): Deleted.
        (WebCore::ContentChangeObserver::resetObservedContentChange): Deleted.
        (WebCore::ContentChangeObserver::setObservedContentChange): Deleted.
        (WebCore::ContentChangeObserver::addObservedDOMTimer): Deleted.
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::addObservedDOMTimer):
        (WebCore::ContentChangeObserver::clearObservedDOMTimers):
        (WebCore::ContentChangeObserver::hasVisibleChangeState const):
        (WebCore::ContentChangeObserver::hasObservedDOMTimer const):
        (WebCore::ContentChangeObserver::setHasNoChangeState):
        (WebCore::ContentChangeObserver::setHasIndeterminateState):
        (WebCore::ContentChangeObserver::setHasVisibleChangeState):
        (WebCore::ContentChangeObserver::countOfObservedDOMTimers const): Deleted.

2019-03-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Programmatic paste access should be granted when copying and pasting within the same origin
        https://bugs.webkit.org/show_bug.cgi?id=195053
        <rdar://problem/48134710>

        Reviewed by Ryosuke Niwa.

        Plumb the document pasteboard identifier through the client when making a DOM paste access request. See WebKit
        ChangeLog for more details.

        Test: editing/pasteboard/ios/dom-paste-same-origin.html

        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMPasteAccess.h: Renamed from Source/WebCore/dom/DOMPasteAccessPolicy.h.

        Introduce DOMPasteAccessResponse, which is either DeniedForGesture, GrantedForCommand, or GrantedForGesture. In
        particular, when pasteboard identifiers match, we only grant access for the current paste command, rather than
        throughout the user gesture.

        * dom/UserGestureIndicator.h:
        (WebCore::UserGestureToken::didRequestDOMPasteAccess):
        * loader/EmptyClients.cpp:
        * page/EditorClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::requestDOMPasteAccess):

2019-02-27  Darin Adler  <darin@apple.com>

        Fixed makeString(float) to do shortest-form serialization without first converting to double
        https://bugs.webkit.org/show_bug.cgi?id=195142

        Reviewed by Daniel Bates.

        * platform/graphics/Color.cpp: Removed unneeded include of DecimalNumber.h.

2019-03-02  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r242132): Incorrect positioning with multiple position:fixed elements
        https://bugs.webkit.org/show_bug.cgi?id=195246

        Reviewed by Frederic Wang.

        r242132 introduced a bug where the management of 'cumulativeDelta' in ScrollingTree::notifyRelatedNodesRecursive
        was incorrect. This value should propagate from ancestors to descendants, but not between siblings in the scrolling
        tree, which it did, causing sibling position:fixed to behave incorrectly.

        Test: scrollingcoordinator/mac/multiple-fixed.html

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::notifyRelatedNodesRecursive):
        * page/scrolling/ScrollingTree.h:

2019-03-02  Darin Adler  <darin@apple.com>

        Improve some comments
        https://bugs.webkit.org/show_bug.cgi?id=195243

        Reviewed by Daniel Bates.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _addAccessibilityObject:toTextMarkerArray:]):
        Fix a typo in a comment.

        * dom/RadioButtonGroups.cpp: Fix a typo in a comment.
        (WebCore::RadioButtonGroups::checkedButtonForGroup const): Use nullptr instead of 0.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement): Improved a comment, but sadly made
        it a bit longer. Use nullptr instead of 0.
        (WebCore::HTMLInputElement::didMoveToNewDocument): Added a comment.

2019-03-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Datalist] fast/forms/datalist/datalist-child-validation.html crashes with a debug assertion in isValidFormControlElement()
        https://bugs.webkit.org/show_bug.cgi?id=190620
        <rdar://problem/19226679>

        Reviewed by Ryosuke Niwa.

        Fixes and re-enables an existing layout test that is asserting on debug builds (and failing on release builds).
        To understand why we hit this assertion, we first note several observations:

            -   The validity of a form control (`isValid()`) depends on the value of `willValidate()`.
            -   Both of these results are cached in member variables: `m_isValid` and `m_willValidate`, respectively.
            -   `willValidate()` changes the cached value of `m_willValidate` if necessary, but `isValid()` uses the
                cached value without update.

        Now, consider the following scenario:

            1.  Something changes in the DOM that changes the result of `willValidate()`. This can happen as a result of
                several things:
                a.  The form control changes readonly state
                b.  The form control changes disabled state
                c.  The form control is added to a datalist element
                d.  The form control is removed from a datalist element
            2.  Call `willValidate()`.
            3.  Call `isValid()`.

        In scenarios (a) - (c), we ensure that cached form control validity (`m_isValid`) is updated alongside
        `m_willValidate` by invoking `setNeedsWillValidateCheck()`, such that the result of `isValid()` matches the
        result of `m_isValid` in step (3). However, in the last scenario (d), we don't do this, which causes form
        control validity to fall out of sync with the result of `isValid()`. To fix the bug, we update willValidate and
        isValid when a form control is removed from an ancestor, only if one of its ancestors is a datalist element.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::insertedIntoAncestor):
        (WebCore::HTMLFormControlElement::removedFromAncestor):

        Make a couple of minor tweaks:
          - Currently, we always invalidate `m_dataListAncestorState` by resetting the state to `Unknown` when the form
            control is removed from an ancestor or inserted. Instead, we only need to reset it when the form control
            already has an ancestor that is a datalist (in the case where it's being removed) or when the form control
            does not yet have an ancestor (in the case where it is being added).
          - If the form control was inside a datalist prior to removal, recompute its cached value of `m_willValidate`,
            as well as its cached validity (`m_isValid`).

2019-03-01  Darin Adler  <darin@apple.com>

        Finish removing String::format
        https://bugs.webkit.org/show_bug.cgi?id=194893

        Reviewed by Daniel Bates.

        * dom/Document.cpp:
        (WebCore::Document::lastModified const): Use makeString and pad.
        * html/FTPDirectoryDocument.cpp:
        (WebCore::processFileDateString): Ditto.

        * mathml/MathMLElement.cpp:
        (WebCore::convertToPercentageIfNeeded): Use makeString and FormattedNumber.

        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::ResourceUsageOverlay::platformDraw): Use makeString and pad.

        * page/linux/ResourceUsageOverlayLinux.cpp:
        (WebCore::cpuUsageString): Use makeString, FormattedNumber, and pad.
        (WebCore::gcTimerString): Use String::number.

        * platform/DateComponents.cpp:
        (WebCore::DateComponents::toStringForTime const): Use makeString and pad.
        (WebCore::DateComponents::toString const): Ditto.

        * platform/LocalizedStrings.cpp: Removed comment that mentioned String::format,
        and that was also inaccurate.

        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::calculateKernelsForAzimuthElevation):
        Use makeString and pad.
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::drawText): Ditto.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo): Ditto.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::formatMediaControlsTime const): Ditto.

2019-03-01  Chris Dumez  <cdumez@apple.com>

        Do not attempt to set WAL Journal mode on a readonly SQLite database
        https://bugs.webkit.org/show_bug.cgi?id=195237

        Reviewed by Simon Fraser.

        This avoids logging errors when opening the database.

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

2019-03-01  Antoine Quint  <graouts@apple.com>

        [iOS] Turn mouse event simulation on by default
        https://bugs.webkit.org/show_bug.cgi?id=195218
        <rdar://problem/48516794>

        Reviewed by Dean Jackson.

        * page/RuntimeEnabledFeatures.h:

2019-03-01  Chris Dumez  <cdumez@apple.com>

        Disable NetworkStateNotifier::singleton()'s isMainThread() assertion when the WebThread is enabled
        https://bugs.webkit.org/show_bug.cgi?id=195230
        <rdar://problem/47925359>

        Reviewed by Ryosuke Niwa.

        Disable NetworkStateNotifier::singleton()'s isMainThread() assertion when the WebThread is enabled
        to address crashes on iOS WK1.

        * platform/network/NetworkStateNotifier.cpp:
        (WebCore::shouldSuppressThreadSafetyCheck):
        (WebCore::NetworkStateNotifier::singleton):

2019-03-01  Simon Fraser  <simon.fraser@apple.com>

        Show mouse event regions in the overlay
        https://bugs.webkit.org/show_bug.cgi?id=195227

        Reviewed by Tim Horton.

        Enhance event region overlays to show more kinds of events.

        * page/DebugPageOverlays.cpp:
        (WebCore::touchEventRegionColors):
        (WebCore::NonFastScrollableRegionOverlay::drawRect):

2019-03-01  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Check for pending style recalcs at the end of each timer run.
        https://bugs.webkit.org/show_bug.cgi?id=195220
        <rdar://problem/48518979>

        Reviewed by Simon Fraser.

        didScheduleStyleRecalc callback was introduced to see if a style recalc is scheduled while firing the DOM timer. However it does not handle the case
        when in addition to this style recalc scheduling, something later (though during the same timer firing) triggers a sync style recalc.
        Let's just check if we've got a pending style recalc when the DOM timer comes back.

        Test: fast/events/touch/ios/style-recalc-schedule-and-force-relalc.html

        * dom/Document.cpp:
        (WebCore::Document::scheduleStyleRecalc):
        * page/ios/ContentChangeObserver.cpp:
        (WebCore::hasPendingStyleRecalc):
        (WebCore::ContentChangeObserver::startObservingDOMTimerExecute):
        (WebCore::ContentChangeObserver::stopObservingDOMTimerExecute):
        (WebCore::ContentChangeObserver::startObservingContentChanges):
        (WebCore::ContentChangeObserver::didScheduleStyleRecalc): Deleted.
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::startObservingStyleRecalcScheduling): Deleted.
        (WebCore::ContentChangeObserver::stopObservingStyleRecalcScheduling): Deleted.
        (WebCore::ContentChangeObserver::isObservingStyleRecalcScheduling const): Deleted.

2019-03-01  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Further restrict client-side cookie persistence after cross-site navigations with link decoration
        https://bugs.webkit.org/show_bug.cgi?id=195196
        <rdar://problem/48006419>

        Reviewed by Brent Fulgham.

        Tests: http/tests/resourceLoadStatistics/capped-lifetime-for-cookie-set-in-js-with-link-decoration-same-site.html
               http/tests/resourceLoadStatistics/capped-lifetime-for-cookie-set-in-js-with-link-fragment-from-prevalent-resource.html
               http/tests/resourceLoadStatistics/capped-lifetime-for-cookie-set-in-js-with-link-query-and-fragment-from-prevalent-resource.html
               http/tests/resourceLoadStatistics/capped-lifetime-for-cookie-set-in-js-with-link-query-from-prevalent-resource.html
               http/tests/resourceLoadStatistics/capped-lifetime-for-cookie-set-in-js-without-link-decoration-from-prevalent-resource.html

        Trackers abuse link query parameters to transport user identifiers cross-site.
        This patch detects such navigations and applies further restrictions to
        client-site cookies on the destination page.

        * platform/network/NetworkStorageSession.cpp:
        (WebCore::NetworkStorageSession::setAgeCapForClientSideCookies):
            Now sets the regular 7-day cap and a reduced 1-day cap.
        (WebCore::NetworkStorageSession::clearPageSpecificDataForResourceLoadStatistics):
            Renamed NetworkStorageSession::removeStorageAccessForAllFramesOnPage() to
            NetworkStorageSession::clearPageSpecificDataForResourceLoadStatistics since
            it now clears out two types of page-specific data.
        (WebCore::NetworkStorageSession::committedCrossSiteLoadWithLinkDecoration):
            This function receives a cross-site navigation and checks if the originating
            site is a prevalent resource. If so, it marks the page or stricter cookie
            rules.
        (WebCore::NetworkStorageSession::resetCrossSiteLoadsWithLinkDecorationForTesting):
            Test infrastructure. This sets a state that overrides the regular per-page
            clear of data. The reason is that the double clear was racy and caused test
            failures.
        (WebCore::NetworkStorageSession::clientSideCookieCap const):
            New function that returns the current cookie lifetime cap.
        (WebCore::NetworkStorageSession::removeStorageAccessForAllFramesOnPage): Deleted.
            Renamed to NetworkStorageSession::clearPageSpecificDataForResourceLoadStatistics().
        * platform/network/NetworkStorageSession.h:
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):
            Now calls NetworkStorageSession::clientSideCookieCap() to set the cap.

2019-03-01  Rob Buis  <rbuis@igalia.com>

        Adjust XMLHttpRequest Content-Type handling
        https://bugs.webkit.org/show_bug.cgi?id=184645

        Reviewed by Youenn Fablet.

        Implement steps 4.4.1.2 and 4.4.1.3 of send() [1].

        Test: web-platform-tests/xhr/send-content-type-charset.htm

        [1] https://xhr.spec.whatwg.org/#dom-xmlhttprequest-send

        * platform/network/ParsedContentType.cpp:
        (WebCore::ParsedContentType::setCharset):
        * platform/network/ParsedContentType.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::replaceCharsetInMediaTypeIfNeeded):
        (WebCore::XMLHttpRequest::send):
        (WebCore::replaceCharsetInMediaType): Deleted.

2019-03-01  Youenn Fablet  <youenn@apple.com>

        Update originsMatch to handle the case of file origins which enforce file path separation
        https://bugs.webkit.org/show_bug.cgi?id=195216

        Reviewed by Brady Eidson.

        Covered by the assertion and existing tests like fast/xmlhttprequest/xmlhttprequest-no-file-access.html.
        Make sure originsMatch returns true if either compared origins are the same object
        or they have the same file path separation behavior.

        * page/SecurityOrigin.cpp:
        (WebCore::areOriginsMatching):
        (WebCore::originsMatch):

2019-03-01  Youenn Fablet  <youenn@apple.com>

        Serialize IndexedDB::ObjectStoreOverwriteMode as an enum
        https://bugs.webkit.org/show_bug.cgi?id=195213

        Reviewed by Alex Christensen.

        Add traits to enable enum IPC encoding.
        No change of behavior.

        * Modules/indexeddb/IndexedDB.h:

2019-03-01  Don Olmstead  <don.olmstead@sony.com>

        [WinCairo] Enable service worker
        https://bugs.webkit.org/show_bug.cgi?id=188318

        Reviewed by Youenn Fablet.

        * WebCorePrefix.h:
        * testing/ServiceWorkerInternals.h:
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::serviceWorkerFailedToTerminate):
        * workers/service/context/SWContextManager.h:

2019-03-01  Sihui Liu  <sihui_liu@apple.com>

        Add a quirk for bostongloble.com and latimes.com
        https://bugs.webkit.org/show_bug.cgi?id=195155

        Reviewed by Geoffrey Garen.

        Covered by manual testing.

        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateRuntimeEnableConditionalString):
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/preprocess-idls.pl:
        (GenerateConstructorAttributes):
        * page/Quirks.cpp:
        (WebCore::Quirks::hasWebSQLSupportQuirk const):
        * page/Quirks.h:

2019-03-01  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Rename members and move implementation to header.
        https://bugs.webkit.org/show_bug.cgi?id=195198
        <rdar://problem/48499967>

        Reviewed by Simon Fraser.

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::startObservingDOMTimerExecute):
        (WebCore::ContentChangeObserver::stopObservingDOMTimerExecute):
        (WebCore::ContentChangeObserver::startObservingStyleRecalc):
        (WebCore::ContentChangeObserver::stopObservingStyleRecalc):
        (WebCore::ContentChangeObserver::startObservingContentChanges):
        (WebCore::ContentChangeObserver::stopObservingContentChanges):
        (WebCore::ContentChangeObserver::StyleRecalcScope::StyleRecalcScope):
        (WebCore::ContentChangeObserver::StyleRecalcScope::~StyleRecalcScope):
        (WebCore::ContentChangeObserver::startObservingStyleResolve): Deleted.
        (WebCore::ContentChangeObserver::stopObservingStyleResolve): Deleted.
        (WebCore::ContentChangeObserver::isObservingContentChanges): Deleted.
        (WebCore::ContentChangeObserver::startObservingDOMTimerScheduling): Deleted.
        (WebCore::ContentChangeObserver::stopObservingDOMTimerScheduling): Deleted.
        (WebCore::ContentChangeObserver::isObservingDOMTimerScheduling): Deleted.
        (WebCore::ContentChangeObserver::startObservingStyleRecalcScheduling): Deleted.
        (WebCore::ContentChangeObserver::stopObservingStyleRecalcScheduling): Deleted.
        (WebCore::ContentChangeObserver::isObservingStyleRecalcScheduling): Deleted.
        (WebCore::ContentChangeObserver::setShouldObserveNextStyleRecalc): Deleted.
        (WebCore::ContentChangeObserver::shouldObserveNextStyleRecalc): Deleted.
        (WebCore::ContentChangeObserver::countOfObservedDOMTimers): Deleted.
        (WebCore::ContentChangeObserver::clearObservedDOMTimers): Deleted.
        (WebCore::ContentChangeObserver::containsObservedDOMTimer): Deleted.
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::startObservingDOMTimerScheduling):
        (WebCore::ContentChangeObserver::stopObservingDOMTimerScheduling):
        (WebCore::ContentChangeObserver::isObservingDOMTimerScheduling const):
        (WebCore::ContentChangeObserver::containsObservedDOMTimer const):
        (WebCore::ContentChangeObserver::startObservingStyleRecalcScheduling):
        (WebCore::ContentChangeObserver::stopObservingStyleRecalcScheduling):
        (WebCore::ContentChangeObserver::isObservingStyleRecalcScheduling const):
        (WebCore::ContentChangeObserver::setShouldObserveStyleRecalc):
        (WebCore::ContentChangeObserver::shouldObserveStyleRecalc const):
        (WebCore::ContentChangeObserver::isObservingContentChanges const):
        (WebCore::ContentChangeObserver::countOfObservedDOMTimers const):
        (WebCore::ContentChangeObserver::clearObservedDOMTimers):

2019-03-01  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] ContentChangeObserver::StyleChangeScope should not set WKContentVisibilityChange directly
        https://bugs.webkit.org/show_bug.cgi?id=195197
        <rdar://problem/48498332>

        Reviewed by Simon Fraser.

        Add didContentVisibilityChange to hide WKContentVisibilityChange value. We might also want to add some logic to didContentVisibilityChange at some point.

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::didContentVisibilityChange):
        (WebCore::ContentChangeObserver::StyleChangeScope::~StyleChangeScope):
        * page/ios/ContentChangeObserver.h:

2019-03-01  Jer Noble  <jer.noble@apple.com>

        [EME] Make sure the hasSessionSemaphore is set even if HAVE(AVSTREAMSESSION) is false
        https://bugs.webkit.org/show_bug.cgi?id=195217

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID):

2019-03-01  Justin Fan  <justin_fan@apple.com>

        [Web GPU] 32-bit builds broken by attempt to disable WebGPU on 32-bit
        https://bugs.webkit.org/show_bug.cgi?id=195191

        Rubber-stamped by Dean Jackson.

        Dropping support for 32-bit entirely, so I'm intentionally leaving 32-bit broken.

        * Configurations/FeatureDefines.xcconfig:

2019-02-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        HTTPSUpgradeList.db database should be opened in readonly mode
        https://bugs.webkit.org/show_bug.cgi?id=195194
        <rdar://problem/47103889>

        Unreviewed build fix for curl.

        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::openDatabase): Removed the second arguemnt of SQLiteDatabase::open.

2019-02-28  Chris Dumez  <cdumez@apple.com>

        Unreviewed Windows build fix after r242251.

        * platform/win/SearchPopupMenuDB.cpp:
        (WebCore::SearchPopupMenuDB::openDatabase):

2019-02-28  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Move timer removal code from DOMWindow::clearTimeout to DOMTimer::removeById
        https://bugs.webkit.org/show_bug.cgi?id=195143
        <rdar://problem/48462351>

        Reviewed by Simon Fraser.

        Currently DOMWindow::clearTimeout() is the only callsite that we are interested in, but this is more future-proof.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::removeById):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clearTimeout):
        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::startObservingDOMTimerExecute):
        (WebCore::ContentChangeObserver::stopObservingDOMTimerExecute):
        (WebCore::ContentChangeObserver::didRemoveDOMTimer):
        (WebCore::ContentChangeObserver::removeDOMTimer): Deleted.
        * page/ios/ContentChangeObserver.h:

2019-02-28  Chris Dumez  <cdumez@apple.com>

        HTTPSUpgradeList.db database should be opened in readonly mode
        https://bugs.webkit.org/show_bug.cgi?id=195194
        <rdar://problem/47103889>

        Reviewed by Youenn Fablet.

        Add parameter to SQLiteDatabase::open() to specific the open flags.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::performOpenAndVerify):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open):
        * platform/sql/SQLiteDatabase.h:
        * platform/sql/SQLiteFileSystem.cpp:
        * platform/sql/SQLiteFileSystem.h:

2019-02-28  Brady Eidson  <beidson@apple.com>

        Followup to:
        Universal links from Google search results pages don't open the app
        https://bugs.webkit.org/show_bug.cgi?id=195126

        Unreviewed.

        * page/SecurityOrigin.cpp:
        (WebCore::originsMatch): Remove a bogus assertion (reasoning in bugzilla)

2019-02-28  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Dark flash when opening Google AMP pages
        https://bugs.webkit.org/show_bug.cgi?id=195193
        rdar://problem/48326442

        Reviewed by Zalan Bujtas.

        After the incremental compositing updates changes, it was possible for a change in the size
        of an overflow:hidden element to fail to update the "ancestor clipping layer" geometry on
        a composited descendant that is not a descendant in z-order. When Google search results
        create the <iframe> that contain AMP contents, we'd fail to update a zero-sized clipping layer,
        leaving the #222 background of an intermediate element visible.

        Fix by setting a flag in RenderLayer::updateLayerPosition() (which is called in containing block order)
        that sets the "needs geometry update" dirty bit on containing-block-descendant layers. Currently
        this flag affects all descendants; in future, we might be able to clear it for grand-children.

        Tests: compositing/geometry/ancestor-clip-change-interleaved-stacking-context.html
               compositing/geometry/ancestor-clip-change.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updateLayerPosition):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterLayout):
        * rendering/RenderLayerBacking.h:

2019-02-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Use-after-move in RenderCombineText::combineTextIfNeeded()
        https://bugs.webkit.org/show_bug.cgi?id=195188

        Reviewed by Zalan Bujtas.

        r241288 uncovered an existing problem with our text-combine code. r242204 alleviated the
        symptom, but this patch fixes the source of the problem (and reverts r242204).

        The code in RenderCombineText::combineTextIfNeeded() has a bit that’s like:

        FontDescription bestFitDescription;
        while (...) {
            FontCascade compressedFont(WTFMove(bestFitDescription), ...);
            ...
        }

        Clearly this is wrong.

        Test: fast/text/text-combine-crash-2.html

        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::FontDescription::platformResolveGenericFamily):
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::combineTextIfNeeded):

2019-02-28  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Introduce observer subclasses to scope content change observing.
        https://bugs.webkit.org/show_bug.cgi?id=195172
        <rdar://problem/48479259>

        Reviewed by Simon Fraser.

        Let's scope start/stopObserving call pairs.

        * dom/Document.cpp:
        (WebCore::Document::updateStyleIfNeeded):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::fired):
        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::StyleChangeObserver::StyleChangeObserver):
        (WebCore::ContentChangeObserver::StyleChangeObserver::~StyleChangeObserver):
        (WebCore::ContentChangeObserver::StyleRecalcObserver::StyleRecalcObserver):
        (WebCore::ContentChangeObserver::StyleRecalcObserver::~StyleRecalcObserver):
        (WebCore::ContentChangeObserver::DOMTimerObserver::DOMTimerObserver):
        (WebCore::ContentChangeObserver::DOMTimerObserver::~DOMTimerObserver):
        (WebCore::ContentChangeObserver::StyleChange::StyleChange): Deleted.
        (WebCore::ContentChangeObserver::StyleChange::~StyleChange): Deleted.
        * page/ios/ContentChangeObserver.h:
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateElementRenderer):

2019-02-28  Antoine Quint  <graouts@apple.com>

        Enable the Pointer Events runtime flag by default
        https://bugs.webkit.org/show_bug.cgi?id=195156

        Reviewed by Dean Jackson.

        * page/RuntimeEnabledFeatures.h:

2019-02-28  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Make observed state reset explicit.
        https://bugs.webkit.org/show_bug.cgi?id=195185
        <rdar://problem/48488342>

        Reviewed by Simon Fraser.

        Use setObservedContentChange only for setting the observed change while observing.

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::startObservingContentChanges):
        (WebCore::ContentChangeObserver::resetObservedContentChange):
        (WebCore::ContentChangeObserver::removeObservedDOMTimer):
        * page/ios/ContentChangeObserver.h:

2019-02-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r242210.
        https://bugs.webkit.org/show_bug.cgi?id=195179

        it broke hover menus on losaltosonline.com (Requested by zalan
        on #webkit).

        Reverted changeset:

        "[ContentChangeObserver] Move timer removal code from
        DOMWindow::clearTimeout to DOMTimer::removeById"
        https://bugs.webkit.org/show_bug.cgi?id=195143
        https://trac.webkit.org/changeset/242210

2019-02-28  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Move timer removal code from DOMWindow::clearTimeout to DOMTimer::removeById
        https://bugs.webkit.org/show_bug.cgi?id=195143
        <rdar://problem/48462351>

        Reviewed by Simon Fraser.

        Currently DOMWindow::clearTimeout() is the only callsite that we are interested in, but this is more future-proof.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::removeById):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clearTimeout):
        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::startObservingDOMTimerExecute):
        (WebCore::ContentChangeObserver::stopObservingDOMTimerExecute):
        (WebCore::ContentChangeObserver::didRemoveDOMTimer):
        (WebCore::ContentChangeObserver::removeDOMTimer): Deleted.
        * page/ios/ContentChangeObserver.h:

2019-02-28  Charles Vazac  <cvazac@akamai.com>

        Fix Resource Timing buffer edge cases for WPT
        https://bugs.webkit.org/show_bug.cgi?id=193213

        Reviewed by Youenn Fablet.

        Test coverage by LayoutTests/imported/w3c/web-platform-tests/resource-timing/buffer*.html

        * page/Performance.cpp:
        (WebCore::Performance::resourceTimingBufferFullTimerFired): Only dispatch the
        resourcetimingbufferfull event if the buffer is still full (as it may have been cleared or
        expanded). Also, avoid infinite loops if we aren't able to decrease the number of entries in
        the secondary buffer.

2019-02-28  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] HTTP Body is missing with redirection.
        https://bugs.webkit.org/show_bug.cgi?id=191651

        Reviewed by Don Olmstead.

        Implement updateFromDelegatePreservingOldProperties for curl port.

        Tests: http/tests/navigation/post-301-response.html
               http/tests/navigation/post-302-response.html
               http/tests/navigation/post-303-response.html
               http/tests/navigation/post-307-response.html
               http/tests/navigation/post-308-response.html

        * platform/Curl.cmake:
        * platform/network/curl/ResourceRequest.h:
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldProperties): Deleted.
        * platform/network/curl/ResourceRequestCurl.cpp: Added.
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldProperties):

2019-02-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [CoordinatedGraphics] Remove COORDINATED_GRAPHICS_THREADED option
        https://bugs.webkit.org/show_bug.cgi?id=195159

        Reviewed by Don Olmstead.

        Use COORDINATED_GRAPHICS instead.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/PlatformLayer.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::ImageBufferData::~ImageBufferData):
        * platform/graphics/cairo/ImageBufferDataCairo.h:
        * platform/graphics/nicosia/NicosiaPaintingEngineThreaded.cpp:
        * platform/graphics/nicosia/NicosiaPaintingEngineThreaded.h:
        * platform/graphics/nicosia/texmap/NicosiaGC3DLayer.cpp:
        (Nicosia::GC3DLayer::swapBuffersIfNeeded):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::prepareTexture):
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):
        * platform/graphics/texmap/GraphicsContext3DTextureMapper.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.cpp:
        (WebCore::TextureMapperGC3DPlatformLayer::TextureMapperGC3DPlatformLayer):
        (WebCore::TextureMapperGC3DPlatformLayer::~TextureMapperGC3DPlatformLayer):
        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.cpp:
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerProxyProvider.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsNeedsDisplay):
        (WebCore::CoordinatedGraphicsLayer::setContentsToPlatformLayer):
        (WebCore::CoordinatedGraphicsLayer::updatePlatformLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintsIntoWindow const):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::shouldCompositeOverflowControls const):

2019-02-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Locale names can be nullptr
        https://bugs.webkit.org/show_bug.cgi?id=195171
        <rdar://problem/48262376>

        Reviewed by Dean Jackson.

        Nullptr can't be used in keys to HashMaps, so take an early out in this case.

        This is a partial revert of r241288.

        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::FontDescription::platformResolveGenericFamily):

2019-02-28  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Enable Web GPU only on 64-bit
        https://bugs.webkit.org/show_bug.cgi?id=195139

        Because Metal is only supported on 64 bit apps.

        Unreviewed build fix.

        * Configurations/FeatureDefines.xcconfig:

2019-02-27  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Move WKSetObservedContentChange logic to ContentChangeObserver class.
        https://bugs.webkit.org/show_bug.cgi?id=195128
        <rdar://problem/48456752>

        Reviewed by Simon Fraser.

        Move the final bits over to ContentChangeObserver and delete WKContentObservationInternal.h.

        * WebCore.xcodeproj/project.pbxproj:
        * page/ios/ContentChangeObserver.mm:
        (WebCore::ContentChangeObserver::setObservedContentChange):
        * platform/ios/wak/WKContentObservation.cpp:
        (WKSetObservedContentChange):
        * platform/ios/wak/WKContentObservation.h:
        * platform/ios/wak/WKContentObservationInternal.h: Removed.

2019-02-27  Simon Fraser  <simon.fraser@apple.com>

        Roll out r242014; it caused crashes in compositing logging (webkit.org/b/195141)

        * dom/Document.cpp:
        (WebCore::Document::lastModified const):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::processFileDateString):
        * mathml/MathMLElement.cpp:
        (WebCore::convertToPercentageIfNeeded):
        (WebCore::MathMLElement::collectStyleForPresentationAttribute):
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::ResourceUsageOverlay::platformDraw):
        * page/linux/ResourceUsageOverlayLinux.cpp:
        (WebCore::cpuUsageString):
        (WebCore::gcTimerString):
        * platform/DateComponents.cpp:
        (WebCore::DateComponents::toStringForTime const):
        (WebCore::DateComponents::toString const):
        * platform/LocalizedStrings.cpp:
        (WebCore::localizedString):
        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::calculateKernelsForAzimuthElevation):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::drawText):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::formatMediaControlsTime const):

2019-02-27  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Move _WKObservingContentChanges from global to ContentChangeObserver class
        https://bugs.webkit.org/show_bug.cgi?id=195091
        <rdar://problem/48427271>

        Reviewed by Tim Horton.

        * page/ios/ContentChangeObserver.h:
        * page/ios/ContentChangeObserver.mm:
        (WebCore::ContentChangeObserver::startObservingContentChanges):
        (WebCore::ContentChangeObserver::stopObservingContentChanges):
        (WebCore::ContentChangeObserver::isObservingContentChanges):
        * platform/ios/wak/WKContentObservation.cpp:
        (WKObservingContentChanges): Deleted.
        (WKStartObservingContentChanges): Deleted.
        (WKStopObservingContentChanges): Deleted.
        * platform/ios/wak/WKContentObservation.h:
        * platform/ios/wak/WKContentObservationInternal.h:

2019-02-27  Brady Eidson  <beidson@apple.com>

        Universal links from Google search results pages don't open the app.
        <rdar://problem/46887179> and https://bugs.webkit.org/show_bug.cgi?id=195126

        Reviewed by Geoffrey Garen.

        Covered by new API tests.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::shouldOpenExternalURLsPolicyToPropagate const): Propagate the external URL policy from
          an iframe if it is from the same security origin as the main frame.

2019-02-27  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Move DOMTimer schedule handling from global to ContentChangeObserver class
        https://bugs.webkit.org/show_bug.cgi?id=195090
        <rdar://problem/48426771>

        Reviewed by Tim Horton.

        Also remove some unused functions from WKContentObservationInternal.

        * page/ios/ContentChangeObserver.h:
        * page/ios/ContentChangeObserver.mm:
        (WebCore::ContentChangeObserver::startObservingDOMTimerScheduling):
        (WebCore::ContentChangeObserver::stopObservingDOMTimerScheduling):
        (WebCore::ContentChangeObserver::isObservingDOMTimerScheduling):
        * platform/ios/wak/WKContentObservation.cpp:
        (WKStartObservingDOMTimerScheduling): Deleted.
        (WKStopObservingDOMTimerScheduling): Deleted.
        (WKIsObservingDOMTimerScheduling): Deleted.
        * platform/ios/wak/WKContentObservation.h:
        * platform/ios/wak/WKContentObservationInternal.h:

2019-02-27  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Move style recalc handling from global to ContentChangeObserver class
        https://bugs.webkit.org/show_bug.cgi?id=195087

        Reviewed by Simon Fraser.

        Add m_observingNextStyleRecalc/m_observingStyleRecalcScheduling to ContentChangeObserver and move the related code over from WK functions.

        * page/ios/ContentChangeObserver.h:
        * page/ios/ContentChangeObserver.mm:
        (WebCore::ContentChangeObserver::startObservingStyleRecalcScheduling):
        (WebCore::ContentChangeObserver::stopObservingStyleRecalcScheduling):
        (WebCore::ContentChangeObserver::isObservingStyleRecalcScheduling):
        (WebCore::ContentChangeObserver::setShouldObserveNextStyleRecalc):
        (WebCore::ContentChangeObserver::shouldObserveNextStyleRecalc):
        (WebCore::ContentChangeObserver::setObservedContentChange):
        * platform/ios/wak/WKContentObservation.cpp:
        (WKSetObservedContentChange):
        (WKStartObservingStyleRecalcScheduling): Deleted.
        (WKStopObservingStyleRecalcScheduling): Deleted.
        (WKIsObservingStyleRecalcScheduling): Deleted.
        (WKSetShouldObserveNextStyleRecalc): Deleted.
        (WKShouldObserveNextStyleRecalc): Deleted.
        * platform/ios/wak/WKContentObservation.h:

2019-02-27  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Move DOM timer handling from global to ContentChangeObserver class
        https://bugs.webkit.org/show_bug.cgi?id=195070
        <rdar://problem/48417650>

        Reviewed by Tim Horton.

        Add DOM timer list to ContentChangeObserver and move the related code over from WK functions.

        * page/ios/ContentChangeObserver.h:
        * page/ios/ContentChangeObserver.mm:
        (WebCore::ContentChangeObserver::startObservingDOMTimerScheduling):
        (WebCore::ContentChangeObserver::countOfObservedDOMTimers):
        (WebCore::ContentChangeObserver::clearObservedDOMTimers):
        (WebCore::ContentChangeObserver::setObservedContentChange):
        (WebCore::ContentChangeObserver::containsObservedDOMTimer):
        (WebCore::ContentChangeObserver::addObservedDOMTimer):
        (WebCore::ContentChangeObserver::removeObservedDOMTimer):
        * platform/ios/wak/WKContentObservation.cpp:
        (WKStartObservingDOMTimerScheduling):
        (WKSetObservedContentChange):
        (WebThreadGetObservedDOMTimers): Deleted.
        (WebThreadCountOfObservedDOMTimers): Deleted.
        (WebThreadClearObservedDOMTimers): Deleted.
        (WebThreadContainsObservedDOMTimer): Deleted.
        (WebThreadAddObservedDOMTimer): Deleted.
        (WebThreadRemoveObservedDOMTimer): Deleted.
        * platform/ios/wak/WKContentObservation.h:

2019-02-27  Justin Fan  <justin_fan@apple.com>
        Fix build errors after Web GPU buffer updates changed some IDL fields from unsigned long to unsigned long long.

        Unreviewed build fix.

        * Modules/webgpu/WebGPUBuffer.cpp:
        (WebCore::WebGPUBuffer::setSubData):
        * Modules/webgpu/WebGPUBuffer.h:
        * Modules/webgpu/WebGPUBufferBinding.h:
        * Modules/webgpu/WebGPURenderPassEncoder.idl:
        * platform/graphics/gpu/GPUBufferBinding.h:
        * platform/graphics/gpu/GPUVertexAttributeDescriptor.h:
        * platform/graphics/gpu/GPUVertexInputDescriptor.h:

2019-02-27  John Wilander  <wilander@apple.com>

        Adopt WebCore::RegistrableDomain in WebCore::ResourceLoadStatistics and WebKit::NetworkProcessProxy
        https://bugs.webkit.org/show_bug.cgi?id=195071
        <rdar://problem/48417690>

        Reviewed by Alex Christensen and Brent Fulgham.

        No new tests. This patch maintains functionality covered by plenty of layout
        tests under http/tests/resourceLoadStatistics/ and http/tests/storageAccess.

        This patch adopts WebCore::RegistrableDomain in WebCore::ResourceLoadStatistics
        and makes the necessary infrastructure changes to support that.

        The previous HashCountedSets in WebCore::ResourceLoadStatistics are now just
        HashSets since we never used the counts for anything. This change simplified
        encoding and decoding for IPC and will eventually simplify encoding and
        decoding in loader/ResourceLoadStatistics.cpp when we obsolete statistics
        model version 14 and below.

        The patch also makes WebCore::RegistrableDomain's String constructor private.
        A new create function WebCore::RegistrableDomain::uncheckedCreateFromString()
        is introduced to better signal to users that creating a registrable domain
        object with a string may create an object that doesn't match a registrable
        domain in a valid HTTP-family URL. This change (private String constructor)
        motivated a change in WebCore::AdClickAttribution where the Source and
        Destination structs now take a URL as parameter instead of a String.

        Finally, this patch harmonizes parameter and variable naming, going from
        "origin" to "domain" and "mainFrame" to "topFrame."

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAdClickAttribution const):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaSessionTitle const):
        * loader/AdClickAttribution.h:
        (WebCore::AdClickAttribution::Source::Source):
        (WebCore::AdClickAttribution::Source::deletedValue):
        (WebCore::AdClickAttribution::Destination::Destination):
        (WebCore::AdClickAttribution::Destination::deletedValue):
        (WebCore::AdClickAttribution::decode):
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logWebSocketLoading):
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        (WebCore::ResourceLoadObserver::statisticsForURL):
        (WebCore::ResourceLoadObserver::statisticsForOrigin): Deleted.
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::encodeHashSet):
        (WebCore::ResourceLoadStatistics::encode const):
        (WebCore::decodeHashCountedSet):
        (WebCore::decodeHashSet):
        (WebCore::ResourceLoadStatistics::decode):
        (WebCore::appendHashSet):
        (WebCore::ResourceLoadStatistics::toString const):
        (WebCore::ResourceLoadStatistics::merge):
        (WebCore::encodeHashCountedSet): Deleted.
        (WebCore::encodeOriginHashSet): Deleted.
        (WebCore::decodeOriginHashSet): Deleted.
        (WebCore::appendHashCountedSet): Deleted.
        * loader/ResourceLoadStatistics.h:
        * platform/RegistrableDomain.h:
        (WebCore::RegistrableDomain::uncheckedCreateFromString):
        (WebCore::RegistrableDomain::RegistrableDomain):
        * testing/Internals.cpp:
        (WebCore::Internals::resourceLoadStatisticsForURL):
        (WebCore::Internals::resourceLoadStatisticsForOrigin): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2019-02-27  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Buffer updates part 2: setSubData, GPU/CPU synchronization
        https://bugs.webkit.org/show_bug.cgi?id=195077
        <rdar://problem/47805229>

        Reviewed by Dean Jackson.

        Implement GPUBuffer.setSubData and prevent the resolving of mapping promises if the buffer is scheduled to be 
        used on the GPU, and add handlers to resolve such promises after command buffer execution completes. In addition,
        update buffer sizes to u64 (unsigned long in C++) as per the updated Web GPU API.

        Tests: webgpu/buffer-command-buffer-races.html
               webgpu/map-read-buffers.html

        * Modules/webgpu/WebGPUBindGroup.h:
        (WebCore::WebGPUBindGroup::bindGroup const):
        * Modules/webgpu/WebGPUBindGroupDescriptor.cpp:
        (WebCore::WebGPUBindGroupDescriptor::asGPUBindGroupDescriptor const): Rename binding -> bufferBinding to reduce confusion.
        * Modules/webgpu/WebGPUBuffer.cpp: Small tweaks.
        (WebCore::WebGPUBuffer::setSubData):
        (WebCore::WebGPUBuffer::unmap): Correctly fail if buffer is destroyed.
        (WebCore::WebGPUBuffer::destroy):
        (WebCore::WebGPUBuffer::rejectOrRegisterPromiseCallback):
        * Modules/webgpu/WebGPUBuffer.h:
        (WebCore::WebGPUBuffer::buffer const): Returned buffer is no longer const so that it can be used in completed handler callbacks.
        * Modules/webgpu/WebGPUBuffer.idl: Enable setSubData.
        * Modules/webgpu/WebGPUCommandBuffer.cpp:
        (WebCore::WebGPUCommandBuffer::beginRenderPass):
        * Modules/webgpu/WebGPUProgrammablePassEncoder.cpp:
        (WebCore::WebGPUProgrammablePassEncoder::setBindGroup const):
        * Modules/webgpu/WebGPUProgrammablePassEncoder.h:
        * Modules/webgpu/WebGPURenderPassEncoder.cpp:
        (WebCore::WebGPURenderPassEncoder::setVertexBuffers):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/GPUBuffer.h:
        (WebCore::GPUBuffer::isTransferDst const): Added various state and flag getters.
        (WebCore::GPUBuffer::isVertex const):
        (WebCore::GPUBuffer::isUniform const):
        (WebCore::GPUBuffer::isStorage const):
        (WebCore::GPUBuffer::isReadOnly const):
        (WebCore::GPUBuffer::isMappable const):
        (WebCore::GPUBuffer::isMapWrite const):
        (WebCore::GPUBuffer::isMapRead const):
        (WebCore::GPUBuffer::isMapWriteable const):
        (WebCore::GPUBuffer::isMapReadable const):
        * platform/graphics/gpu/GPUBufferBinding.h:
        * platform/graphics/gpu/GPUCommandBuffer.h:
        (WebCore::GPUCommandBuffer::usedBuffers const):
        (WebCore::GPUCommandBuffer::useBuffer):
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::tryCreateBuffer): Pass Ref of itself for Buffer to request the Queue later, if needed.
        (WebCore::GPUDevice::tryCreateBuffer const): Deleted.
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/GPUProgrammablePassEncoder.cpp: Retain the encoder's commandBuffer to reference its used resource buffers.
        (WebCore::GPUProgrammablePassEncoder::GPUProgrammablePassEncoder):
        * platform/graphics/gpu/GPUProgrammablePassEncoder.h:
        (WebCore::GPUProgrammablePassEncoder::commandBuffer const):
        * platform/graphics/gpu/GPURenderPassEncoder.h:
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::validateBufferCreate): Move validation out of tryCreate.
        (WebCore::GPUBuffer::tryCreate): Create both shared and private buffers, depending on usage.
        (WebCore::GPUBuffer::GPUBuffer):
        (WebCore::GPUBuffer::~GPUBuffer): Call destroy instead of just unmap.
        (WebCore::GPUBuffer::state const):
        (WebCore::GPUBuffer::setSubData): Uses a cached collection of staging MTLBuffers to encode data copies to the implementation MTLBuffer.
        (WebCore::GPUBuffer::commandBufferCommitted): Register on the GPUBuffer that the provided MTLCommandBuffer uses it, and is about to be committed.
        (WebCore::GPUBuffer::commandBufferCompleted): MTLCommandBuffer's onCompletedHandler calls this.
        (WebCore::GPUBuffer::reuseSubDataBuffer): SetSubData's blit command buffers call this to return a staging buffer to the pool.
        (WebCore::GPUBuffer::registerMappingCallback):
        (WebCore::GPUBuffer::runMappingCallback):
        (WebCore::GPUBuffer::unmap):
        (WebCore::GPUBuffer::destroy):
        (WebCore::GPUBuffer::tryCreateSharedBuffer): Deleted.
        * platform/graphics/gpu/cocoa/GPUProgrammablePassEncoderMetal.mm:
        (WebCore::GPUProgrammablePassEncoder::setResourceAsBufferOnEncoder):
        (WebCore::GPUProgrammablePassEncoder::setBindGroup):
        * platform/graphics/gpu/cocoa/GPUQueueMetal.mm:
        (WebCore::GPUQueue::submit): Ensure submitted buffers are in the correct state, and add completed handlers for synchronization.
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::GPURenderPassEncoder::tryCreate):
        (WebCore::GPURenderPassEncoder::GPURenderPassEncoder): Retain the commandBuffer for later reference.
        (WebCore::GPURenderPassEncoder::setVertexBuffers): Mark vertex buffers as used before submission.
        (WebCore::GPURenderPassEncoder::create): Deleted.

        Buffer size updates in the IDL:
        * Modules/webgpu/GPUBufferDescriptor.idl:
        * Modules/webgpu/WebGPUBuffer.idl:
        * Modules/webgpu/WebGPUBufferBinding.idl:
        * Modules/webgpu/WebGPUCommandBuffer.idl:
        * Modules/webgpu/WebGPURenderPassEncoder.idl:
        * Modules/webgpu/WebGPUVertexAttributeDescriptor.idl:
        * Modules/webgpu/WebGPUVertexInputDescriptor.idl:

2019-02-27  Youenn Fablet  <youenn@apple.com>

        Remove LeetCode FetchRequest quirk
        https://bugs.webkit.org/show_bug.cgi?id=195100

        Reviewed by Alex Christensen.

        Covered by manual testing.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::needsSignalQuirk):

2019-02-27  Chris Dumez  <cdumez@apple.com>

        Unable to log into chase.com on iPad when DeviceMotionEvent API is disabled
        https://bugs.webkit.org/show_bug.cgi?id=195101
        <rdar://problem/48423023>

        Reviewed by Geoffrey Garen.

        Add site-specific quirk for chase.com on iOS where we fire a dummy DeviceMotionEvent if the page
        tries to register a "devicemotion" event listener and fails because the API is disabled. This is
        needed to unblock the site and proceed with the login flow.

        Unfortunately, document()->settings().needsSiteSpecificQuirks() is false on iOS so I could not
        guard the quirk behind this flag.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::failedToRegisterDeviceMotionEventListener):
        * page/DOMWindow.h:

2019-02-27  Antoine Quint  <graouts@apple.com>

        Support Pointer Events on macOS
        https://bugs.webkit.org/show_bug.cgi?id=195008
        <rdar://problem/47454419>

        Reviewed by Dean Jackson.

        We now dispatch relevant pointer events as we prepare to dispatch mouse events. In most cases, this means we dispatch
        a pointer event of the same type, with "mouse" being substituted by "pointer", and with the same properties with the
        exception that if preventDefault() is called for a "pointerdown" event, the matching "mousedown" will not be dispatched,
        and the same behavior also extends to "pointerup".

        Tests: pointerevents/mouse/over-enter-out-leave.html
               pointerevents/mouse/pointer-capture.html
               pointerevents/mouse/pointer-event-basic-properties.html
               pointerevents/mouse/pointer-events-before-mouse-events.html
               pointerevents/mouse/pointerdown-prevent-default.html

        * Configurations/FeatureDefines.xcconfig:
        * dom/Document.cpp: All of the touch-action related members and functions should be iOS-specific since the touch-action
        property does not have any effect on macOS.
        (WebCore::Document::invalidateRenderingDependentRegions):
        (WebCore::Document::nodeWillBeRemoved):
        (WebCore::Document::updateTouchActionElements):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::dispatchMouseEvent): Dispatch a pointer event matching the mouse event that is about to be dispatched.
        If preventDefault() is called in the event handler for either "pointerdown" or "pointerup", do not proceed with dispatching
        the mouse event.
        * dom/PointerEvent.cpp:
        (WebCore::pointerEventType):
        (WebCore::PointerEvent::create):
        * dom/PointerEvent.h:
        * page/EventHandler.cpp: Check both the pointer and mouse events to see if we need to dispatch "enter" and "leave" events.
        (WebCore::hierarchyHasCapturingEventListeners):
        (WebCore::EventHandler::updateMouseEventTargetNode):
        * page/PointerCaptureController.cpp: Fix a build error which only happened on macOS.
        (WebCore::PointerCaptureController::PointerCaptureController): Create the CapturingData for the unique mouse pointer.
        (WebCore::PointerCaptureController::hasPointerCapture): The code did not match the spec cited in the comment, only the
        pending target override needs to be considered to determine whether a given element has pointer capture enabled.
        (WebCore::PointerCaptureController::dispatchEvent): Dispatch the provided pointer event, accounting for pointer capture if
        it is set.
        * page/PointerLockController.cpp: Fix a build error which only happened on macOS.
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveElement): Code related to touch-action is only relevant to iOS.

2019-02-27  Sihui Liu  <sihui_liu@apple.com>

        Network Process is put to suspended when holding locked IndexedDB files
        https://bugs.webkit.org/show_bug.cgi?id=195024
        <rdar://problem/45194169>

        Reviewed by Geoffrey Garen.

        We found network process was suspended when IDBDatabase was being closed in the background database thread, 
        holding locks to its database file. To avoid starvation or deadlock, we need to keep network process alive by 
        taking background assertion in UI process until the closes are done and locks are released.

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::create):
        (WebCore::IDBServer::IDBServer::IDBServer):
        (WebCore::IDBServer::IDBServer::createBackingStore):
        (WebCore::IDBServer::IDBServer::closeDatabase):
        (WebCore::IDBServer::IDBServer::didCloseDatabase):
        * Modules/indexeddb/server/IDBServer.h:
        (WebCore::IDBServer::IDBServer::create):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::performCurrentDeleteOperation):
        (WebCore::IDBServer::UniqueIDBDatabase::scheduleShutdownForClose):
        (WebCore::IDBServer::UniqueIDBDatabase::didShutdownForClose):
        (WebCore::IDBServer::UniqueIDBDatabase::didDeleteBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::immediateCloseForUserDelete):
        (WebCore::IDBServer::UniqueIDBDatabase::notifyServerAboutClose):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

2019-02-26  Simon Fraser  <simon.fraser@apple.com>

        Have a single notion of scroll position in the scrolling tree and derive layoutViewport from it
        https://bugs.webkit.org/show_bug.cgi?id=194973

        Reviewed by Antti Koivisto.

        This patch cleans up how the scrolling tree responds to scrolls.

        First, ScrollingTreeScrollingNode::m_currentScrollPosition is "truth" for scrolling thread/
        UI process scroll position.

        On macOS where handleWheelEvent on the scrolling thread changes scroll position, the
        bottleneck is ScrollingTreeScrollingNode::scrollTo() which sets the new scroll position,
        update the visual viewport (for frame scrolls) updates the scrolledContentsLayer position,
        updates related layers on this node (counter-scrolling layers etc), and then tells the
        scrolling tree, which recurses through descendant nodes so they can adjust their layer
        positions.

        On iOS, the bottleneck is ScrollingTreeScrollingNode::wasScrolledByDelegatedScrolling(),
        which does the above other than setting scrolledContentsLayer (since we're reacting to
        layer state changes, not producing them).

        updateLayersAfterAncestorChange() is renamed to relatedNodeScrollPositionDidChange(), and
        ScrollingTree does the tree walk so classes don't have to implement
        updateLayersAfterAncestorChange() just to talk children. The ScrollingTree tree walk knows
        how to get the correct layoutViewport and to stop at frame boundaries (layer updates never
        need to cross frame boundaries).

        We preserve 'cumulativeDelta'; it's necessary for things like fixed inside overflow:scroll,
        since the fixed state was computed with the "layout" scroll position, so we have to account
        for the scroll delta since the last committed position. It's possible we could improve this
        in future.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::mainFrameViewportChangedViaDelegatedScrolling):
        (WebCore::ScrollingTree::notifyRelatedNodesAfterScrollPositionChange):
        (WebCore::ScrollingTree::notifyRelatedNodesRecursive):
        (WebCore::ScrollingTree::mainFrameLayoutViewport):
        (WebCore::ScrollingTree::scrollPositionChangedViaDelegatedScrolling): Deleted.
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeFrameHostingNode.cpp:
        (WebCore::ScrollingTreeFrameHostingNode::updateLayersAfterAncestorChange): Deleted.
        * page/scrolling/ScrollingTreeFrameHostingNode.h:
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::updateViewportForCurrentScrollPosition):
        (WebCore::ScrollingTreeFrameScrollingNode::localToContentsPoint const):
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::relatedNodeScrollPositionDidChange):
        (WebCore::ScrollingTreeNode::enclosingScrollingNodeIncludingSelf):
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::minimumScrollPosition const):
        (WebCore::ScrollingTreeScrollingNode::scrollLimitReached const):
        (WebCore::ScrollingTreeScrollingNode::adjustedScrollPosition const):
        (WebCore::ScrollingTreeScrollingNode::scrollBy):
        (WebCore::ScrollingTreeScrollingNode::scrollTo):
        (WebCore::ScrollingTreeScrollingNode::currentScrollPositionChanged):
        (WebCore::ScrollingTreeScrollingNode::wasScrolledByDelegatedScrolling):
        (WebCore::ScrollingTreeScrollingNode::localToContentsPoint const):
        (WebCore::ScrollingTreeScrollingNode::updateLayersAfterAncestorChange): Deleted.
        (WebCore::ScrollingTreeScrollingNode::setScrollPosition): Deleted.
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ScrollingTreeScrollingNodeDelegate.h:
        (WebCore::ScrollingTreeScrollingNodeDelegate::currentScrollPosition const):
        (WebCore::ScrollingTreeScrollingNodeDelegate::scrollPosition const): Deleted.
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/cocoa/ScrollingTreeFixedNode.h:
        * page/scrolling/cocoa/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::relatedNodeScrollPositionDidChange):
        (WebCore::ScrollingTreeFixedNode::updateLayersAfterAncestorChange): Deleted.
        * page/scrolling/cocoa/ScrollingTreeStickyNode.h:
        * page/scrolling/cocoa/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::relatedNodeScrollPositionDidChange):
        (WebCore::ScrollingTreeStickyNode::updateLayersAfterAncestorChange): Deleted.
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateAfterChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::handleWheelEvent):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::adjustedScrollPosition const):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::currentScrollPositionChanged):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::repositionScrollingLayers):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::repositionRelatedLayers):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateMainFramePinState):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::exposedUnfilledArea const):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollPosition const): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollPosition): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollLayerPosition): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateLayersAfterViewportChange): Deleted.
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h:
        (): Deleted.
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::adjustedScrollPosition const):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::repositionScrollingLayers):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::~ScrollingTreeOverflowScrollingNodeMac): Deleted.
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::updateLayersAfterAncestorChange): Deleted.
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::scrollPosition const): Deleted.
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::setScrollPosition): Deleted.
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::setScrollLayerPosition): Deleted.
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::updateLayersAfterDelegatedScroll): Deleted.
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::isAlreadyPinnedInDirectionOfGesture):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::stretchAmount):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::pinnedInDirection):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::adjustScrollPositionToBoundsIfNecessary):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::scrollOffset const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::immediateScrollOnAxis):

2019-02-22  Simon Fraser  <simon.fraser@apple.com>

        Have a single notion of scroll position in the scrolling tree and derive layoutViewport from it
        https://bugs.webkit.org/show_bug.cgi?id=194973

        Reviewed by Antti Koivisto.

        The "master" value for the scroll position of a ScrollingTreeScrollingNode is now its m_scrollPosition member;
        layout viewports and layer positions will be set from this. This allows scrollPosition() to no longer be virtual
        and require different code for each scrolling node subclass, and adds a choke point that we can use to update
        the layout viewport.
        
        We can remove m_probableMainThreadScrollPosition on ScrollingTreeFrameScrollingNodeMac because this was really just
        an alias for the scroll position.

        Add some isRootNode() checks for things that should only affect the main frame.

        * page/scrolling/ScrollingTree.h: Remove fixedPositionRect() which was unused, and is a per-frame thing so makes
        no sense here.
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::didChangeScrollPosition):
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        (WebCore::ScrollingTreeFrameScrollingNode::layoutViewport const):
        (WebCore::ScrollingTreeFrameScrollingNode::setLayoutViewport):
        (WebCore::ScrollingTreeFrameScrollingNode::fixedPositionRect): Deleted.
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::setScrollPosition):
        (WebCore::ScrollingTreeScrollingNode::setScrollPositionInternal):
        (WebCore::ScrollingTreeScrollingNode::didChangeScrollPosition):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::scrollPosition const):
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::fixedPositionRect): Deleted.
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateAfterChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::handleWheelEvent):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateMainFramePinState):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollPosition const): Deleted.
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::scrollPosition const): Deleted.

2019-02-27  Ulrich Pflueger  <up@nanocosmos.de>

        [MSE] SourceBuffer sample time increment vs. last frame duration check is broken
        https://bugs.webkit.org/show_bug.cgi?id=194747
        <rdar://problem/48148469>

        Reviewed by Jer Noble.

        Prevent unintended frame drops by including last frame duration in discontinuity check. 

        Test: media/media-source/media-source-append-variable-frame-lengths-with-matching-durations.html

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):

2019-02-27  Timothy Hatcher  <timothy@apple.com>

        REGRESSION: WebKit content crash in Base System (because NSAppearance is NULL).
        https://bugs.webkit.org/show_bug.cgi?id=195086
        rdar://problem/48419124

        Reviewed by Tim Horton.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollerImpDelegate effectiveAppearanceForScrollerImp:]): Always return a valid NSAppearance.

2019-02-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove conditional compile guard for InsertIntoTextNodeCommand::doReapply
        https://bugs.webkit.org/show_bug.cgi?id=195067
        <rdar://problem/44812080>

        Reviewed by Tim Horton.

        This iOS-specific override was introduced to fix <rdar://problem/7114425>, in which the last typed character
        would be revealed when redoing text input on iOS inside a password field. The associated change fixed this bug
        by overriding doReapply on iOS to only insert text (instead of additionally handling password echo); however, it
        really makes sense to skip password echo when redoing on all platforms, so we can just remove the platform-
        specific guards around this logic.

        Doing this allows us to add the `hasEditableStyle()` check on iOS when redoing text insertion, which results in
        a very subtle behavior change covered by the new layout test below.

        Test: editing/undo/redo-text-insertion-in-non-editable-node.html

        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::doReapply):
        * editing/InsertIntoTextNodeCommand.h:

2019-02-26  Keith Miller  <keith_miller@apple.com>

        Code quality cleanup in NeverDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=194824

        Reviewed by Mark Lam.

        name_names.pl should not just assume the layout of LazyNeverDestroyed.

        * dom/make_names.pl:
        (printNamesCppFile):

2019-02-26  Zalan Bujtas  <zalan@apple.com>

        Do not try to observe the timer when Page is nullptr
        https://bugs.webkit.org/show_bug.cgi?id=195076

        Reviewed by Tim Horton.

        Covered by fast/dom/Window/timer-null-script-execution-context.html.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):

2019-02-20  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Media elements will restart network buffering just before suspending
        https://bugs.webkit.org/show_bug.cgi?id=193691

        Reviewed by Eric Carlson.

        API Test: WebKit.ProcessSuspendMediaBuffering

        Allow the Page to suspend all media buffering in its child Documents.

        * dom/Document.cpp:
        (WebCore::Document::suspendAllMediaBuffering):
        (WebCore::Document::resumeAllMediaBuffering):
        * dom/Document.h:
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::dataBufferingPermitted const):
        (WebCore::MediaElementSession::suspendBuffering):
        (WebCore::MediaElementSession::resumeBuffering):
        (WebCore::MediaElementSession::bufferingSuspended const):
        * html/MediaElementSession.h:
        * page/Page.cpp:
        (WebCore::Page::suspendAllMediaBuffering):
        (WebCore::Page::resumeAllMediaBuffering):
        * page/Page.h:
        (WebCore::Page::mediaPlaybackIsSuspended const):
        (WebCore::Page::mediaBufferingIsSuspended const):
        (WebCore::Page::mediaPlaybackIsSuspended): Deleted.
        * platform/audio/PlatformMediaSession.h:
        (WebCore::PlatformMediaSession::suspendBuffering):
        (WebCore::PlatformMediaSession::resumeBuffering):
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::suspendAllMediaBufferingForDocument):
        (WebCore::PlatformMediaSessionManager::resumeAllMediaBufferingForDocument):
        * platform/audio/PlatformMediaSessionManager.h:

2019-02-26  Youenn Fablet  <youenn@apple.com>

        Move service worker response validation from the service worker client to the service worker itself
        https://bugs.webkit.org/show_bug.cgi?id=194716

        Reviewed by Geoffrey Garen.

        Added response validation at service worker side.

        No change of behavior except for now logging validation error messages in the console.
        Covered by rebased tests.

        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::validateResponse):
        (WebCore::ServiceWorkerFetch::processResponse):
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):

2019-02-26  Sihui Liu  <sihui_liu@apple.com>

        [Mac WK2] storage/indexeddb/IDBObject-leak.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=195036

        Reviewed by Geoffrey Garen.

        When connection to IDBServer is lost, IDBDatabase in web process should not only stop active transactions, but 
        also transactions in committing process.

        Also, TransactionOpration should clear its perform function when the operation is being completed, otherwise 
        there is a reference cycle of TransactionOpration.

        Covered by existing tests storage/indexeddb/IDBObject-leak.html.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::connectionToServerLost): notify committing transasctions that connection is lost.
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::connectionClosedFromServer): notify IDBConnectionProxy that transaction ends.
        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        (WebCore::IDBClient::IDBConnectionProxy::forgetTransaction): clear finished transactions.
        * Modules/indexeddb/client/IDBConnectionProxy.h:
        * Modules/indexeddb/client/TransactionOperation.h:
        (WebCore::IDBClient::TransactionOperation::doComplete): clear perform function unconditionally when the 
        operation is in completion process. 

2019-02-26  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] clearContentChangeObservers should be internal to ContentChangeObserver class
        https://bugs.webkit.org/show_bug.cgi?id=195066
        <rdar://problem/48411682>

        Reviewed by Tim Horton.

        Now all the empty clearContentChangeObservers() implementations can be removed.

        * dom/Document.cpp:
        (WebCore::Document::platformSuspendOrStopActiveDOMObjects):
        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::willDetachPage):
        * page/ios/ContentChangeObserver.h:
        * page/ios/ContentChangeObserver.mm:
        (WebCore::ContentChangeObserver::clearTimersAndReportContentChange):
        (WebCore::ContentChangeObserver::didSuspendActiveDOMObjects): Might need to merge them.
        (WebCore::ContentChangeObserver::willDetachPage):

2019-02-26  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Move style recalc schedule observation logic to ContentChangeObserver
        https://bugs.webkit.org/show_bug.cgi?id=195062
        <rdar://problem/48409258>

        Reviewed by Tim Horton.

        Also rename registerDOMTimerForContentObservationIfNeeded to be consistent with the did* naming style.

        * dom/Document.cpp:
        (WebCore::Document::scheduleStyleRecalc):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        * page/ios/ContentChangeObserver.h:
        * page/ios/ContentChangeObserver.mm:
        (WebCore::ContentChangeObserver::didInstallDOMTimer):
        (WebCore::ContentChangeObserver::didScheduleStyleRecalc):
        (WebCore::ContentChangeObserver::registerDOMTimerForContentObservationIfNeeded): Deleted.

2019-02-26  Chris Dumez  <cdumez@apple.com>

        [iOS] Regression(PSON) Scroll position is no longer restored when navigating back to reddit.com
        https://bugs.webkit.org/show_bug.cgi?id=195054
        <rdar://problem/48330549>

        Reviewed by Geoff Garen.

        Add MaintainMemoryCache flag to indicate that the memory cache should not get purged.

        * page/MemoryRelease.cpp:
        (WebCore::releaseNoncriticalMemory):
        (WebCore::releaseCriticalMemory):
        (WebCore::releaseMemory):
        * page/MemoryRelease.h:

2019-02-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241970.
        https://bugs.webkit.org/show_bug.cgi?id=195057

        made the QuickLook.LegacyQuickLookContent API test flakey
        (Requested by estes on #webkit).

        Reverted changeset:

        "[iOS] Break a reference cycle between PreviewLoader and
        ResourceLoader"
        https://bugs.webkit.org/show_bug.cgi?id=194964
        https://trac.webkit.org/changeset/241970

2019-02-26  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Simplify content observation API by removing explicit DOMTimer observation.
        https://bugs.webkit.org/show_bug.cgi?id=195023
        <rdar://problem/48381885>

        Reviewed by Tim Horton.

        In the future we might decide that certain activities don't require DOMTimer observation, but that should
        be internal to ContentChangeObserver.

        * page/ios/ContentChangeObserver.h:
        * page/ios/ContentChangeObserver.mm:
        (WebCore::ContentChangeObserver::startObservingContentChanges):
        (WebCore::ContentChangeObserver::stopObservingContentChanges):
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::mouseMoved):

2019-02-26  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Move observing logic from Document::updateStyleIfNeeded to ContentChangeObserver
        https://bugs.webkit.org/show_bug.cgi?id=195032
        <rdar://problem/48388063>

        Reviewed by Tim Horton.

        This might eventually turn into a regular start/stop content observing call.

        * dom/Document.cpp:
        (WebCore::Document::updateStyleIfNeeded):
        * page/ios/ContentChangeObserver.h:
        * page/ios/ContentChangeObserver.mm:
        (WebCore::ContentChangeObserver::startObservingStyleResolve):
        (WebCore::ContentChangeObserver::stopObservingStyleResolve):

2019-02-26  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Move CheckForVisibilityChange to ContentChangeObserver class
        https://bugs.webkit.org/show_bug.cgi?id=195035
        <rdar://problem/48389123>

        Reviewed by Tim Horton.

        Visibility checking logic belongs to ContentChangeObserver.

        * page/ios/ContentChangeObserver.h:
        * page/ios/ContentChangeObserver.mm:
        (WebCore::elementImplicitVisibility):
        (WebCore::ContentChangeObserver::StyleChange::StyleChange):
        (WebCore::ContentChangeObserver::StyleChange::~StyleChange):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateElementRenderer):
        (WebCore::elementImplicitVisibility): Deleted.
        (WebCore::CheckForVisibilityChange::CheckForVisibilityChange): Deleted.
        (WebCore::CheckForVisibilityChange::~CheckForVisibilityChange): Deleted.

2019-02-26  Philippe Normand  <pnormand@igalia.com>

        [EGL] Runtime support for RGB565 pixel layout
        https://bugs.webkit.org/show_bug.cgi?id=194817

        Reviewed by Carlos Garcia Campos.

        Currently our graphics pipeline always relies on a ARGB8888 (32
        bpp) pixel configuration. On some low-end (old) embedded platforms
        the graphics driver is sometimes optimized for 16 bpp
        configurations, such as RGB565. On those platforms the application
        can now set the WEBKIT_EGL_PIXEL_LAYOUT environment variable to
        "RGB565" to adjust to the best pixel configuration supported by
        the screen and graphics driver.

        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::getEGLConfig):

2019-02-26  Philippe Normand  <pnormand@igalia.com> and Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Add API for webview background color configuration
        https://bugs.webkit.org/show_bug.cgi?id=192305

        Reviewed by Michael Catanzaro.

        Adapt the FrameView API to allow a default non-white background color.

        * page/Frame.cpp:
        (WebCore::Frame::createView): Replace isTransparent argument with a background color one.
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::recalculateBaseBackgroundColor): Use Color::transparent if m_isTransparent is true.
        (WebCore::FrameView::updateBackgroundRecursively): Allow the fallback background color to be non-white, this is
        used only in non-dark-mode-css build configurations.
        * page/FrameView.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setViewIsTransparent): Use Color::transparent if transparent is true.

2019-02-25  Yongjun Zhang  <yongjun_zhang@apple.com>

        scalableNativeWebpageParameters() is not preserved on new page navigation.
        https://bugs.webkit.org/show_bug.cgi?id=194892
        <rdar://problem/47538280>

        If a page's current default viewport configuration is scalableNativeWebpageParameters due to
        the fact that m_canIgnoreScalingConstraints is true, loading a new page should preserve this
        configuration until we derive the right values from viewport meta-tag.

        Reviewed by Wenson Hsieh.

        Test: fast/viewport/ios/viewport-shrink-to-fit-on-new-navigation.html

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::canOverrideConfigurationParameters const): Use fixedNativeWebpageParameters().
        (WebCore::ViewportConfiguration::updateDefaultConfiguration): Use nativeWebpageParameters.
        (WebCore::ViewportConfiguration::nativeWebpageParameters): Return the appropriate default configuration
            based on m_canIgnoreScalingConstraints and shouldIgnoreMinimumEffectiveDeviceWidth().
        (WebCore::ViewportConfiguration::fixedNativeWebpageParameters): Renamed from nativeWebpageParameters()
        (WebCore::ViewportConfiguration::scalableNativeWebpageParameters): Use fixedNativeWebpageParameters.
        * page/ViewportConfiguration.h: Make nativeWebpageParameters() an instance method and change the old
            static method to fixedNativeWebpageParameters which better reflects the actual behavior.

2019-02-25  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Move observing logic from DOMWindow::clearTimeout to ContentChangeObserver
        https://bugs.webkit.org/show_bug.cgi?id=194988
        <rdar://problem/48343040>

        Reviewed by Tim Horton.

        ContentChangeObserver::removeDOMTimer takes care of the canceled timer removal.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clearTimeout):
        * page/ios/ContentChangeObserver.h:
        * page/ios/ContentChangeObserver.mm:
        (WebCore::ContentChangeObserver::startObservingDOMTimer):
        (WebCore::ContentChangeObserver::stopObservingDOMTimer):
        (WebCore::ContentChangeObserver::removeDOMTimer):

2019-02-25  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Move observing logic from DOMTimer to ContentChangeObserver
        https://bugs.webkit.org/show_bug.cgi?id=194987
        <rdar://problem/48342910>

        Reviewed by Tim Horton.

        Content obvservation logic should all move to the ContentChangeObserver class.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::fired):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::contentChangeObserver):
        * page/ios/ContentChangeObserver.h:
        * page/ios/ContentChangeObserver.mm:
        (WebCore::ContentChangeObserver::ContentChangeObserver):
        (WebCore::ContentChangeObserver::registerDOMTimerForContentObservationIfNeeded):
        (WebCore::ContentChangeObserver::startObservingDOMTimer):
        (WebCore::ContentChangeObserver::stopObservingDOMTimer):
        (WebCore::ContentChangeObserver::containsObservedDOMTimer):
        (WebCore::ContentChangeObserver::addObservedDOMTimer):
        (WebCore::ContentChangeObserver::removeObservedDOMTimer):

2019-02-25  John Wilander  <wilander@apple.com>

        Introduce and adopt new class RegistrableDomain for eTLD+1
        https://bugs.webkit.org/show_bug.cgi?id=194791
        <rdar://problem/48179240>

        Reviewed by Alex Christensen, Fujii Hironori, and Brent Fulgham.

        A new API test was added. Plenty of existing layout tests under
        http/tests/resourceLoadStatistics/ and http/tests/storageAccess/ test the code.

        This patch introduces and adopts a new class called WebCore::RegistrableDomain
        which represents a domain's eTLD+1 (effective top level domain plus one) and is
        the basis for the term "site," as in same-site. Other popular names include
        high-level domain, primary domain, and top privately controlled/owned domain.
        Effective top level domains are enumerated on the Public Suffix List
        (https://publicsuffix.org).

        This class just uses the full domain for when the Public Suffix List cannot help
        finding the registrable domain and for WebKit ports that haven't enabled
        PUBLIC_SUFFIX_LIST. It also uses the string "nullOrigin" as a representation
        for the null or unique origin (this matches how these origins were handled
        before).

        The implementation is a wrapper around a String and the functions and class
        members that now make use of this new class used to handle regular String
        objects which didn't help much in terms of type safety or guarantees that the
        string had already been converted to an eTLD+1.

        We've at least two bad bugs in the Storage Access API because of confusion
        between a URL's eTLD+1 and its host. The usage of WebCore::RegistrableDomain
        will prohibit such bugs in the future.

        Partitioning in WebKit also uses eTLD+1 to a large extent. I plan to adopt
        WebCore::RegistrableDomain for partitioning in a later patch.

        This patch also enhances parameter naming by:
        - Removing parts that refer to "primary" as in primaryDomain.
        - Replacing references to "TopPrivatelyControlledDomain" with "RegistrableDomain."
        - Replacing references to "TopPrivatelyOwnedDomain" with "RegistrableDomain."
        - Using the term "domain" consistently instead of e.g. "host."

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::hasRequestedPageSpecificStorageAccessWithUserInteraction):
        (WebCore::Document::setHasRequestedPageSpecificStorageAccessWithUserInteraction):
        * dom/Document.h:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAdClickAttribution const):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaSessionTitle const):
        * loader/AdClickAttribution.cpp:
        (WebCore::AdClickAttribution::url const):
        (WebCore::AdClickAttribution::referrer const):
        (WebCore::AdClickAttribution::toString const):
        * loader/AdClickAttribution.h:
        (WebCore::AdClickAttribution::Source::Source):
        (WebCore::AdClickAttribution::Source::matches const):
        (WebCore::AdClickAttribution::Source::deleteValue):
        (WebCore::AdClickAttribution::Destination::Destination):
        (WebCore::AdClickAttribution::Destination::matches const):
        (WebCore::AdClickAttribution::Destination::deleteValue):
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::setRequestStorageAccessUnderOpenerCallback):
        (WebCore::ResourceLoadObserver::setLogUserInteractionNotificationCallback):
        (WebCore::ResourceLoadObserver::setLogWebSocketLoadingNotificationCallback):
        (WebCore::ResourceLoadObserver::setLogSubresourceLoadingNotificationCallback):
        (WebCore::ResourceLoadObserver::setLogSubresourceRedirectNotificationCallback):
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logWebSocketLoading):
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        (WebCore::ResourceLoadObserver::requestStorageAccessUnderOpener):
        (WebCore::ResourceLoadObserver::logFontLoad):
        (WebCore::ResourceLoadObserver::logCanvasRead):
        (WebCore::ResourceLoadObserver::logCanvasWriteOrMeasure):
        (WebCore::ResourceLoadObserver::logNavigatorAPIAccessed):
        (WebCore::ResourceLoadObserver::logScreenAPIAccessed):
        (WebCore::ResourceLoadObserver::ensureResourceStatisticsForRegistrableDomain):
        (WebCore::ResourceLoadObserver::statisticsForOrigin):
        (WebCore::primaryDomain): Deleted.
        (WebCore::ResourceLoadObserver::ensureResourceStatisticsForPrimaryDomain): Deleted.
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::encode const):
        (WebCore::ResourceLoadStatistics::decode):
        (WebCore::ResourceLoadStatistics::toString const):
        (WebCore::ResourceLoadStatistics::merge):
        (WebCore::ResourceLoadStatistics::primaryDomain): Deleted.
        * loader/ResourceLoadStatistics.h:
        (WebCore::ResourceLoadStatistics::ResourceLoadStatistics):
        * page/Page.cpp:
        (WebCore::Page::logNavigation):
        (WebCore::Page::mainFrameLoadStarted):
        * page/Page.h:
        * page/PerformanceMonitor.cpp:
        (WebCore::reportPageOverPostLoadResourceThreshold):
        * platform/RegistrableDomain.h: Added.
        (WebCore::RegistrableDomain::RegistrableDomain):
        (WebCore::RegistrableDomain::isEmpty const):
        (WebCore::RegistrableDomain::string const):
        (WebCore::RegistrableDomain::operator!= const):
        (WebCore::RegistrableDomain::operator== const):
        (WebCore::RegistrableDomain::matches const):
        (WebCore::RegistrableDomain::isolatedCopy const):
        (WebCore::RegistrableDomain::isHashTableDeletedValue const):
        (WebCore::RegistrableDomain::hash const):
        (WebCore::RegistrableDomain::RegistrableDomainHash::hash):
        (WebCore::RegistrableDomain::RegistrableDomainHash::equal):
        (WebCore::RegistrableDomain::encode const):
        (WebCore::RegistrableDomain::decode):
        * platform/network/NetworkStorageSession.cpp:
        (WebCore::NetworkStorageSession::shouldBlockThirdPartyCookies const):
        (WebCore::NetworkStorageSession::shouldBlockCookies const):
        (WebCore::NetworkStorageSession::setPrevalentDomainsToBlockCookiesFor):
        (WebCore::NetworkStorageSession::removePrevalentDomains):
        (WebCore::NetworkStorageSession::hasStorageAccess const):
        (WebCore::NetworkStorageSession::getAllStorageAccessEntries const):
        (WebCore::NetworkStorageSession::grantStorageAccess):
        (WebCore::getPartitioningDomain): Deleted.
        * platform/network/NetworkStorageSession.h:

2019-02-25  Chris Fleizach  <cfleizach@apple.com>

        AX: <footer> HTML5 tag not reading as ARIA Landmark to VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=190138
        <rdar://problem/44907695>

        Reviewed by Joanmarie Diggs.

        Make sure that footer elements use the right role depending on their context.
        If scoped to body, they become contentinfo. Otherwise they are just delineated by
        a footer subrole.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isLandmark const):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored const):
        (WebCore::AccessibilityRenderObject::isDescendantOfElementType const):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityIsLandmarkRole:]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper subrole]):

2019-02-25  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: IDBDatabase and IDBTransaction are leaked in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=194709

        Reviewed by Geoffrey Garen.

        When connection to IDB server is closed, IDBTransaction would abort without notifying IDBDatabase, so 
        IDBDatabase didn't clear its reference to IDBTransaction which created a reference cycle. 
 
        Also IDBTransaction didn't clear its reference to IDBRequest in this case and it led to another reference cycle
        between IDBOpenDBRequest and IDBTransaction.

        Test: storage/indexeddb/IDBObject-leak.html

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::connectionToServerLost):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::~IDBTransaction):
        (WebCore::IDBTransaction::connectionClosedFromServer):
        * Modules/indexeddb/IDBTransaction.h:
        * testing/Internals.cpp:
        (WebCore::Internals::numberOfIDBTransactions const):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-02-25  Zalan Bujtas  <zalan@apple.com>

        Add missing stream parameter. Unreviewed.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::fired):

2019-02-25  Zalan Bujtas  <zalan@apple.com>

        Unreviewed build fix after r242032.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):

2019-02-20  Darin Adler  <darin@apple.com>

        Incorrect use of String::foldCase for font family names
        https://bugs.webkit.org/show_bug.cgi?id=194895

        Reviewed by Myles C. Maxfield.

        * platform/graphics/FontCascadeDescription.cpp:
        (WebCore::FontCascadeDescription::familiesEqualForTextAutoSizing): Use
        familyNamesAreEqual instead of calling convertToASCIILowercase directly.
        (WebCore::FontCascadeDescription::familyNamesAreEqual): Use AtomicString's
        operator== when we want case sensitive family name comparisons. This is a special
        case to accomodate CoreText, which uses "."-prefix names for internal fonts that
        are treated case sensitively. (Ideally webpages would not use these fonts at all.)
        (WebCore::FontCascadeDescription::familyNameHash): Use AtomicString's existingHash
        when we want case sensitive family name hashing.
        (WebCore::FontCascadeDescription::foldedFamilyName): Take a String instead of an
        AtomicString so we can use this at an additional call site. Converting from an
        AtomicString to a String if free and automatic at the existing call sites. Use
        convertToASCIILowercase instead of foldCase for three reasons: 1) Other functions
        here are folding only ASCII case by using ASCIICaseInsensitiveHash, and this one
        must be consistent. 2) this is considerably faster, and 3) font family names don't
        need arbitrary Unicode case folding, it's only A-Z that should be folded.
        * platform/graphics/FontCascadeDescription.h: Take a String instead of AtomicString
        in the foldedFamilyName function.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontDatabase::collectionForFamily): Instead of calling foldCase, use
        FontCascadeDescription::foldedFamilyName to correctly fold font family names.

2019-02-25  Charlie Turner  <cturner@igalia.com>

        [EME][GStreamer] Replace caps field loop with gst_structure_remove_fields
        https://bugs.webkit.org/show_bug.cgi?id=194992

        Reviewed by Xabier Rodriguez-Calvar.

        Refactoring, no new tests.

        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (transformCaps): Simplify the code a little. The idea to use this
        utility function came from a review upstream here:
        https://gitlab.freedesktop.org/gstreamer/gst-devtools/merge_requests/67

2019-02-25  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Batch player duration updates
        https://bugs.webkit.org/show_bug.cgi?id=194220

        Reviewed by Xabier Rodriguez-Calvar.

        This saves up a ton of CPU cycles doing layout unnecessarily when all
        the appended frames extend the duration of the movie, like in
        YTTV 2018 59.DASHLatencyVP9.

        This patch is an optimization that introduces no new behavior.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::consumeAppsinkAvailableSamples):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::blockDurationChanges):
        (WebCore::MediaPlayerPrivateGStreamerMSE::unblockDurationChanges):
        (WebCore::MediaPlayerPrivateGStreamerMSE::durationChanged):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:

2019-02-25  Miguel Gomez  <magomez@igalia.com>

        [WPE] Add support for holepunch using an external video player
        https://bugs.webkit.org/show_bug.cgi?id=194899

        Reviewed by Xabier Rodriguez-Calvar.

        Implement the holepunch feature to allow playback using an external player. This creates
        a new dummy MediaPlayerPrivateHolePunch that accepts only the type "video/holepunch", and
        whose goal is to just draw a transparent rectangle in the position where the video should be.
        This can be used to allow a player placed on a lower plane than the browser to become visible.

        Added ManualTest wpe/video-player-holepunch-external.html to test the feature.

        * PlatformWPE.cmake:
        * platform/HolePunch.cmake: Added.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::buildMediaEnginesVector):
        * platform/graphics/holepunch/MediaPlayerPrivateHolePunch.cpp: Added.
        (WebCore::MediaPlayerPrivateHolePunch::MediaPlayerPrivateHolePunch):
        (WebCore::MediaPlayerPrivateHolePunch::~MediaPlayerPrivateHolePunch):
        (WebCore::MediaPlayerPrivateHolePunch::platformLayer const):
        (WebCore::MediaPlayerPrivateHolePunch::naturalSize const):
        (WebCore::MediaPlayerPrivateHolePunch::pushNextHolePunchBuffer):
        (WebCore::MediaPlayerPrivateHolePunch::swapBuffersIfNeeded):
        (WebCore::MediaPlayerPrivateHolePunch::proxy const):
        (WebCore::mimeTypeCache):
        (WebCore::MediaPlayerPrivateHolePunch::getSupportedTypes):
        (WebCore::MediaPlayerPrivateHolePunch::supportsType):
        (WebCore::MediaPlayerPrivateHolePunch::registerMediaEngine):
        (WebCore::MediaPlayerPrivateHolePunch::notifyReadyState):
        * platform/graphics/holepunch/MediaPlayerPrivateHolePunch.h: Added.
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.cpp:
        (WebCore::TextureMapperPlatformLayerBuffer::paintToTextureMapper):

2019-02-24  Zalan Bujtas  <zalan@apple.com>

        Introduce ContentChangeObserver class
        https://bugs.webkit.org/show_bug.cgi?id=194977
        <rdar://problem/48338115>

        Reviewed by Simon Fraser.

        This patch is about piping through all the related WK* calls. 

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::scheduleStyleRecalc):
        (WebCore::Document::updateStyleIfNeeded):
        (WebCore::Document::platformSuspendOrStopActiveDOMObjects):
        * loader/FrameLoader.cpp:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::fired):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clearTimeout):
        * page/Frame.cpp:
        (WebCore::Frame::willDetachPage):
        * page/Page.h:
        (WebCore::Page::contentChangeObserver):
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::mouseMoved):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateElementRenderer):
        (WebCore::CheckForVisibilityChange::CheckForVisibilityChange):
        (WebCore::CheckForVisibilityChange::~CheckForVisibilityChange):

2019-02-24  Simon Fraser  <simon.fraser@apple.com>

        Migrate from "fixedPositionRect" to "layoutViewport" in the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=194984

        Reviewed by Sam Weinig.

        Rename "fixedPositionRect" to "layoutViewport" in scrolling tree code.

        Remove ScrollingTree::fixedPositionRect() which was only used on iOS, to fetch the
        current layout viewport rect. Instead, set the layout viewport on the root
        node in ScrollingTree::mainFrameViewportChangedViaDelegatedScrolling().

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::mainFrameViewportChangedViaDelegatedScrolling):
        (WebCore::ScrollingTree::viewportChangedViaDelegatedScrolling): Deleted.
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeFrameHostingNode.cpp:
        (WebCore::ScrollingTreeFrameHostingNode::updateLayersAfterAncestorChange):
        * page/scrolling/ScrollingTreeFrameHostingNode.h:
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateLayersAfterAncestorChange):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/cocoa/ScrollingTreeFixedNode.h:
        * page/scrolling/cocoa/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::updateLayersAfterAncestorChange):
        * page/scrolling/cocoa/ScrollingTreeStickyNode.h:
        * page/scrolling/cocoa/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::updateLayersAfterAncestorChange):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::updateLayersAfterAncestorChange):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::setScrollLayerPosition):

2019-02-24  Devin Rousso  <drousso@apple.com>

        Web Inspector: Change the InspectorOverlay to use native rather than canvas
        https://bugs.webkit.org/show_bug.cgi?id=105023
        <rdar://problem/13443692>

        Reviewed by Brian Burg.

        Should be no change in observed functionality.

        * inspector/InspectorOverlay.h:
        * inspector/InspectorOverlay.cpp:
        (WebCore::truncateWithEllipsis): Added.
        (WebCore::localPointToRootPoint): Added.
        (WebCore::contentsQuadToCoordinateSystem):
        (WebCore::effectiveElementForNode): Added.
        (WebCore::quadToPath): Added.
        (WebCore::drawOutlinedQuadWithClip): Added.
        (WebCore::drawOutlinedQuad): Added.
        (WebCore::drawFragmentHighlight): Added.
        (WebCore::drawShapeHighlight): Added.
        (WebCore::InspectorOverlay::paint):
        (WebCore::InspectorOverlay::setIndicating):
        (WebCore::InspectorOverlay::shouldShowOverlay const):
        (WebCore::InspectorOverlay::update):
        (WebCore::InspectorOverlay::setShowPaintRects): Added.
        (WebCore::InspectorOverlay::showPaintRect):
        (WebCore::InspectorOverlay::updatePaintRectsTimerFired):
        (WebCore::InspectorOverlay::drawNodeHighlight):
        (WebCore::InspectorOverlay::drawQuadHighlight):
        (WebCore::InspectorOverlay::drawPaintRects):
        (WebCore::InspectorOverlay::drawBounds): Added.
        (WebCore::InspectorOverlay::drawRulers):
        (WebCore::InspectorOverlay::drawElementTitle): Added.
        (WebCore::contentsQuadToPage): Deleted.
        (WebCore::InspectorOverlay::setPausedInDebuggerMessage): Deleted.
        (WebCore::buildObjectForPoint): Deleted.
        (WebCore::buildObjectForRect): Deleted.
        (WebCore::buildArrayForQuad): Deleted.
        (WebCore::buildObjectForHighlight): Deleted.
        (WebCore::buildObjectForSize): Deleted.
        (WebCore::InspectorOverlay::setShowingPaintRects): Deleted.
        (WebCore::buildArrayForRendererFragments): Deleted.
        (WebCore::localPointToRoot): Deleted.
        (WebCore::appendPathCommandAndPoints): Deleted.
        (WebCore::appendPathSegment): Deleted.
        (WebCore::buildObjectForShapeOutside): Deleted.
        (WebCore::buildObjectForElementData): Deleted.
        (WebCore::InspectorOverlay::buildHighlightObjectForNode const): Deleted.
        (WebCore::InspectorOverlay::buildObjectForHighlightedNodes const): Deleted.
        (WebCore::InspectorOverlay::drawPausedInDebuggerMessage): Deleted.
        (WebCore::InspectorOverlay::overlayPage): Deleted.
        (WebCore::InspectorOverlay::forcePaint): Deleted.
        (WebCore::InspectorOverlay::reset): Deleted.
        (WebCore::evaluateCommandInOverlay): Deleted.
        (WebCore::InspectorOverlay::evaluateInOverlay): Deleted.
        (WebCore::InspectorOverlay::freePage): Deleted.

        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::setShowPaintRects):
        Drive-by: rename `setShowingPaintRects` to better match the protocol.

        * inspector/agents/page/PageDebuggerAgent.h:
        * inspector/agents/page/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::PageDebuggerAgent):
        (WebCore::PageDebuggerAgent::setOverlayMessage): Deleted.
        Remove `Debugger.setOverlayMessage` command as it hasn't been used and is no longer supported.

        * inspector/InspectorController.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::createLazyAgents):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::disconnectAllFrontends):
        (WebCore::InspectorController::buildObjectForHighlightedNodes const): Deleted.

        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::inspectorHighlightObject): Deleted.

        * inspector/InspectorOverlayPage.css: Removed.
        * inspector/InspectorOverlayPage.html: Removed.
        * inspector/InspectorOverlayPage.js: Removed.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:

2019-02-20  Darin Adler  <darin@apple.com>

        Finish removing String::format
        https://bugs.webkit.org/show_bug.cgi?id=194893

        Reviewed by Daniel Bates.

        * dom/Document.cpp:
        (WebCore::Document::lastModified const): Use makeString and pad.
        * html/FTPDirectoryDocument.cpp:
        (WebCore::processFileDateString): Ditto.

        * mathml/MathMLElement.cpp:
        (WebCore::convertToPercentageIfNeeded): Use makeString and FormattedNumber.

        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::ResourceUsageOverlay::platformDraw): Use makeString and pad.

        * page/linux/ResourceUsageOverlayLinux.cpp:
        (WebCore::cpuUsageString): Use makeString, FormattedNumber, and pad.
        (WebCore::gcTimerString): Use String::number.

        * platform/DateComponents.cpp:
        (WebCore::DateComponents::toStringForTime const): Use makeString and pad.
        (WebCore::DateComponents::toString const): Ditto.

        * platform/LocalizedStrings.cpp: Removed comment that mentioned String::format,
        and that was also inaccurate.

        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::calculateKernelsForAzimuthElevation):
        Use makeString and pad.
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::drawText): Ditto.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo): Ditto.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::formatMediaControlsTime const): Ditto.

2019-02-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Remove user agent quirk for washingtonpost.com
        https://bugs.webkit.org/show_bug.cgi?id=194981

        Reviewed by Žan Doberšek.

        Remove user agent quirk for washingtonpost.com because we support JPEG 2000 now.

        * platform/UserAgentQuirks.cpp:
        (WebCore::urlRequiresChromeBrowser):

2019-02-23  Simon Fraser  <simon.fraser@apple.com>

        Remove remnants of iOS WK1 scrolling tree code
        https://bugs.webkit.org/show_bug.cgi?id=194980

        Reviewed by Sam Weinig.

        Remove ScrollingTreeIOS and ScrollingCoordinatorIOS which were never instantiated,
        to reduce maintenance costs and simplify.

        Merge ScrollingTreeFrameScrollingNodeIOS into ScrollingTreeFrameScrollingNodeRemoteIOS
        since that was the only concrete subclass, removing code which never applies to iOS WK2
        (e.g. the synchronous scrolling code path).

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/FrameView.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::handleWheelEvent):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::updateLayersAfterDelegatedScroll): Deleted.
        (WebCore::ScrollingTreeScrollingNode::scrollableAreaSize const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::totalContentsSize const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::horizontalSnapOffsets const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::verticalSnapOffsets const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::horizontalSnapOffsetRanges const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::verticalSnapOffsetRanges const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::currentHorizontalSnapPointIndex const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::currentVerticalSnapPointIndex const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::setCurrentHorizontalSnapPointIndex): Deleted.
        (WebCore::ScrollingTreeScrollingNode::setCurrentVerticalSnapPointIndex): Deleted.
        (WebCore::ScrollingTreeScrollingNode::useDarkAppearanceForScrollbars const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::lastCommittedScrollPosition const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::reachableContentsSize const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::parentRelativeScrollableRect const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::scrollOrigin const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::totalContentsSizeForRubberBand const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::setTotalContentsSizeForRubberBand): Deleted.
        (WebCore::ScrollingTreeScrollingNode::horizontalScrollElasticity const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::verticalScrollElasticity const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::hasEnabledHorizontalScrollbar const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::hasEnabledVerticalScrollbar const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::canHaveScrollbars const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::expectsWheelEventTestTrigger const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::scrollContainerLayer const): Deleted.
        (WebCore::ScrollingTreeScrollingNode::scrolledContentsLayer const): Deleted.
        * page/scrolling/ios/ScrollingCoordinatorIOS.h: Removed.
        * page/scrolling/ios/ScrollingCoordinatorIOS.mm: Removed.
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h: Removed.
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm: Removed.
        * page/scrolling/ios/ScrollingTreeIOS.cpp: Removed.
        * page/scrolling/ios/ScrollingTreeIOS.h: Removed.
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollPosition):

2019-02-23  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Buffer updates part 1: async mapping functions, unmap, and destroy
        https://bugs.webkit.org/show_bug.cgi?id=194665

        Reviewed by Dean Jackson.

        Test: map-write-buffers.html. Other tests updated to match new API.

        * Modules/webgpu/WebGPUBindGroupDescriptor.cpp: Added.
        (WebCore::validateBufferBindingType): Ensure buffer binding usages match the binding type.
        (WebCore::WebGPUBindGroupDescriptor::asGPUBindGroupDescriptor const): Logic moved out from WebGPUDevice.cpp.
        * Modules/webgpu/WebGPUBindGroupDescriptor.h:
        * Modules/webgpu/WebGPUBuffer.cpp: Added GPUBuffer functionality.
        (WebCore::WebGPUBuffer::create):
        (WebCore::WebGPUBuffer::WebGPUBuffer):
        (WebCore::WebGPUBuffer::mapReadAsync):
        (WebCore::WebGPUBuffer::mapWriteAsync):
        (WebCore::WebGPUBuffer::unmap):
        (WebCore::WebGPUBuffer::destroy):
        (WebCore::WebGPUBuffer::rejectOrRegisterPromiseCallback): Register a mapping request on the GPUBuffer, if valid.
        * Modules/webgpu/WebGPUBuffer.h:
        (WebCore::WebGPUBuffer::buffer const):
        (WebCore::WebGPUBuffer::mapping const): Deleted.
        * Modules/webgpu/WebGPUBuffer.idl: Update to latest API and enable every function except setSubData.
        * Modules/webgpu/WebGPUCommandBuffer.cpp:
        (WebCore::WebGPUCommandBuffer::beginRenderPass): Renamed descriptor conversion method.
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createBuffer const): Update to non-nullable return type.
        (WebCore::WebGPUDevice::createBindGroup const): Move descriptor validation logic to descriptor implementation.
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPURenderPassDescriptor.cpp:
        (WebCore::WebGPURenderPassDescriptor::asGPURenderPassDescriptor const): Renamed from validateAndConvertToGPUVersion.
        * Modules/webgpu/WebGPURenderPassEncoder.cpp:
        (WebCore::WebGPURenderPassEncoder::setVertexBuffers): Add validation for submitted buffers.
        * platform/graphics/gpu/GPUBuffer.cpp: Added.
        (WebCore::GPUBuffer::PendingMappingCallback::PendingMappingCallback): New struct for retaining a reference to mapping callbacks.
        * platform/graphics/gpu/GPUBuffer.h: Add functionality to retain callbacks and usage bits.
        (WebCore::GPUBuffer::isVertex const):
        (WebCore::GPUBuffer::isUniform const):
        (WebCore::GPUBuffer::isStorage const):
        (WebCore::GPUBuffer::isReadOnly const):
        (WebCore::GPUBuffer::PendingMapPromise::create):
        (WebCore::GPUBuffer::isMappable const):
        (WebCore::GPUBuffer::isMapWriteable const):
        (WebCore::GPUBuffer::isMapReadable const):
        (WebCore::GPUBuffer::mapping const): Deleted.
        * platform/graphics/gpu/GPUBufferUsage.h: enum class cannot be logical ORed together.
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::tryCreateBuffer const): Renamed from createBuffer. 
        (WebCore::GPUDevice::createBuffer const): Deleted.
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::tryCreateSharedBuffer): Attempt to create a MTLBuffer with shared memory.
        (WebCore::GPUBuffer::tryCreate): No longer use Gigacage-allocated memory for MTLBuffer.
        (WebCore::GPUBuffer::GPUBuffer):
        (WebCore::GPUBuffer::~GPUBuffer):
        (WebCore::GPUBuffer::registerMappingCallback): Register the provided callback to be executed when the staging buffer can be safely exposed.
        (WebCore::GPUBuffer::stagingBufferForRead): Prepare the arrayBuffer for reading and run the mapping callback.
        (WebCore::GPUBuffer::stagingBufferForWrite): Ditto, but for writing.
        (WebCore::GPUBuffer::unmap): If needed, copy the staging ArrayBuffer to the MTLBuffer. Unregister any mapping callback.
        (WebCore::GPUBuffer::destroy): Stub implementation for now. Frees the MTLBuffer as soon as possible.
        (WebCore::GPUBuffer::create): Deleted.
        * platform/graphics/gpu/cocoa/GPUProgrammablePassEncoderMetal.mm:
        (WebCore::GPUProgrammablePassEncoder::setResourceAsBufferOnEncoder): Ensure only read-only GPUBuffers are used as read-only on the GPU.

        Add symbols for new files:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-02-23  Keith Miller  <keith_miller@apple.com>

        Add new mac target numbers
        https://bugs.webkit.org/show_bug.cgi?id=194955

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2019-02-23  chris fleizach  <cfleizach@apple.com>

        AX: WebKit is incorrectly mapping the <meter> element to progressbar
        https://bugs.webkit.org/show_bug.cgi?id=164051
        <rdar://problem/29055615>

        Reviewed by Joanmarie Diggs.

        Add a specific role for meter and map that to the appropriate mac role. 

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::canHaveChildren const):
        (WebCore::AccessibilityNodeObject::isProgressIndicator const):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::accessibleNameDerivesFromContent const):
        (WebCore::AccessibilityObject::isRangeControl const):
        (WebCore::AccessibilityObject::computedRoleString const):
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/AccessibilityProgressIndicator.cpp:
        (WebCore::AccessibilityProgressIndicator::roleValue const):
        * accessibility/AccessibilityProgressIndicator.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::shouldFocusActiveDescendant const):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):

2019-02-22  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in SWServerJobQueue::runNextJobSynchronously
        https://bugs.webkit.org/show_bug.cgi?id=194974

        Reviewed by Geoffrey Garen.

        We suspect the crash is happening due to m_jobQueue being empty in runNextJobSynchronously
        or there is a timer heap corruption again :(

        Exit early when m_jobQueue is empty. Also add a debug assert that this should never happen
        but convert an existing release assert to a debug assert since this appears to be hitting
        too frequently in wild.

        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::runNextJobSynchronously):

2019-02-22  Simon Fraser  <simon.fraser@apple.com>

        Clean up the setScrollPosition/setScrollPositionWithoutContentEdgeConstraints confusion in the scrolling tree nodes
        https://bugs.webkit.org/show_bug.cgi?id=194968

        Reviewed by Antti Koivisto.

        Having both setScrollPosition() and setScrollPositionWithoutContentEdgeConstraints() is confusing because
        you can't tell which is the bottleneck. So add a 'clamp' parameter to setScrollPosition() and merge them.

        ScrollingTreeFrameScrollingNodeMac::setScrollPosition() replicates a bit of code but future cleanups will
        reduce that.

        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::setScrollPosition): Deleted. This was the same as the base class method.
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::setScrollPosition):
        (WebCore::ScrollingTreeScrollingNode::clampScrollPosition const):
        (WebCore::ScrollingTreeScrollingNode::scrollBy):
        (WebCore::ScrollingTreeScrollingNode::setScrollPositionWithoutContentEdgeConstraints): Deleted.
        (WebCore::ScrollingTreeScrollingNode::scrollByWithoutContentEdgeConstraints): Deleted.
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::setScrollPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::setScrollPositionWithoutContentEdgeConstraints): Deleted. Did nothing.
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::handleWheelEvent):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints): Deleted.
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::setScrollPosition):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints): Deleted.
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::immediateScrollByWithoutContentEdgeConstraints):
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::delta const):
        * platform/ScrollTypes.h:

2019-02-22  Eric Liang  <ericliang@apple.com>

        AX: Treat AXChildrenInNavigationOrder as AXChildren before adding support for aria-flowto
        https://bugs.webkit.org/show_bug.cgi?id=194923

        Reviewed by Chris Fleizach.

        Added AXChildrenInNavigationOrder attribute that returns the same array as from AXChildren. It prevents AppKit from reordering elements from the fallback AXChildren attribute.

        Test: accessibility/mac/children-in-navigation-order-returns-children.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2019-02-22  Tim Horton  <timothy_horton@apple.com>

        ProcessSwap.PageOverlayLayerPersistence fails on iOS and in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=194963

        Reviewed by Dean Jackson.

        Tested by existing failing API test.

        * page/Page.cpp:
        (WebCore::Page::installedPageOverlaysChanged): Deleted.
        * page/Page.h:
        (WebCore::Page::pageOverlayController):
        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::installedPageOverlaysChanged):
        (WebCore::PageOverlayController::detachViewOverlayLayers):
        (WebCore::PageOverlayController::installPageOverlay):
        (WebCore::PageOverlayController::uninstallPageOverlay):
        (WebCore::PageOverlayController::willDetachRootLayer): Deleted.
        * page/PageOverlayController.h:
        As intended by r240940, move installedPageOverlaysChanged to PageOverlayController.
        Also, make it ignore isInWindow state; otherwise, if you install a overlay
        and then come into window, nothing installs the root layer. There is no
        need for this code to follow in-window state manually anymore since
        the DrawingArea and RenderLayerCompositor just hook the layers up when needed.

        Make some methods private, and make detachViewOverlayLayers only touch
        *view* overlays, so that we don't detach the document-relative root
        layer when you drop to having no view overlays. This maintains
        existing behavior because nothing was calling PageOverlayController::detachViewOverlayLayers.

        Now there are no callers of willDetachRootLayer, so remove it.

2019-02-22  Andy Estes  <aestes@apple.com>

        [iOS] Break a reference cycle between PreviewLoader and ResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=194964
        <rdar://problem/48279441>

        Reviewed by Alex Christensen.

        When a document's QuickLook preview is loaded, a reference cycle is created between
        PreviewLoader and ResourceLoader. Break the cycle by clearing m_previewLoader in
        ResourceLoader::releaseResources().

        Fixes leaks detected by `run-webkit-tests --leaks LayoutTests/quicklook`.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::releaseResources):

2019-02-22  Sihui Liu  <sihui_liu@apple.com>

        Crash under IDBServer::IDBConnectionToClient::identifier() const
        https://bugs.webkit.org/show_bug.cgi?id=194843
        <rdar://problem/48203102>

        Reviewed by Geoffrey Garen.

        UniqueIDBDatabase should ignore requests from connections that are already closed.

        Tests are hard to create without some tricks on UniqueIDBDatabase so this fix is verified manually. 
        One test is created by adding delay to UniqueIDBDatabase::openBackingStore on the background thread to make sure
        disconnection of web process happens before UniqueIDBDatabase::didOpenBackingStore, because didOpenBackingStore
        may start a version change transaction and ask for identifier from the connection that is already gone.

        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::connectionToClientClosed):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        (WebCore::IDBServer::IDBConnectionToClient::isClosed):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::clearStalePendingOpenDBRequests):
        (WebCore::IDBServer::UniqueIDBDatabase::handleDatabaseOperations):
        (WebCore::IDBServer::UniqueIDBDatabase::operationAndTransactionTimerFired):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

2019-02-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Input type "formatSetInlineTextDirection" is dispatched when changing paragraph-level text direction
        https://bugs.webkit.org/show_bug.cgi?id=194703
        <rdar://problem/48111775>

        Reviewed by Ryosuke Niwa.

        Currently, when changing text direction, WebKit always sends input events of type formatSetInlineTextDirection,
        even when changing paragraph text direction. Instead, we should be emitting formatSetBlockTextDirection in this
        scenario. This is problematic when using the context menus on macOS to change writing direction, since changing
        "Selection Direction" is currently indistinguishable from changing "Paragraph Direction".

        To fix this, we split EditAction::SetWritingDirection into EditAction::SetInlineWritingDirection and
        EditAction::SetBlockWritingDirection, which emit inline and block text direction input events, respectively.

        Tests: fast/events/before-input-events-prevent-block-text-direction.html
               fast/events/before-input-events-prevent-inline-text-direction.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::apply):
        * editing/EditAction.cpp:
        (WebCore::undoRedoLabel):
        * editing/EditAction.h:
        * editing/EditCommand.cpp:
        (WebCore::inputTypeNameForEditingAction):
        * editing/Editor.cpp:
        (WebCore::inputEventDataForEditingStyleAndAction):
        (WebCore::Editor::setBaseWritingDirection):
        * editing/EditorCommand.cpp:
        (WebCore::executeMakeTextWritingDirectionLeftToRight):
        (WebCore::executeMakeTextWritingDirectionNatural):
        (WebCore::executeMakeTextWritingDirectionRightToLeft):

2019-02-22  Rob Buis  <rbuis@igalia.com>

        Remove stripLeadingAndTrailingWhitespace from MathMLElement.cpp
        https://bugs.webkit.org/show_bug.cgi?id=160172

        Reviewed by Frédéric Wang.

        Remove stripLeadingAndTrailingWhitespace and use stripLeadingAndTrailingHTTPSpaces
        from HTTPParsers instead.

        No new tests, already covered by MathML tests.

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::stripLeadingAndTrailingWhitespace): Deleted.
        * mathml/MathMLElement.h:
        * mathml/MathMLPresentationElement.cpp:
        (WebCore::MathMLPresentationElement::parseMathMLLength):
        * mathml/MathMLTokenElement.cpp:
        (WebCore::MathMLTokenElement::convertToSingleCodePoint):

2019-02-22  Eric Carlson  <eric.carlson@apple.com>

        Update some media logging
        https://bugs.webkit.org/show_bug.cgi?id=194915

        Reviewed by Jer Noble.

        No new tests, no functional change.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::evictCodedFrames):
        (WebCore::SourceBuffer::provideMediaData):
        (WebCore::SourceBuffer::trySignalAllSamplesInTrackEnqueued):

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::checkPlaybackTargetCompatablity):
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        (WebCore::HTMLMediaElement::canTransitionFromAutoplayToPlay const):
        (WebCore::HTMLMediaElement::seekTask):
        (WebCore::HTMLMediaElement::playInternal):
        (WebCore::HTMLMediaElement::pauseInternal):
        (WebCore::HTMLMediaElement::setLoop):
        (WebCore::HTMLMediaElement::setControls):
        (WebCore::HTMLMediaElement::sourceWasRemoved):

        * html/MediaElementSession.cpp:
        (WebCore::convertEnumerationToString):

        * html/MediaElementSession.h:
        (WTF::LogArgument<WebCore::MediaPlaybackDenialReason>::toString):

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):

2019-02-22  Rob Buis  <rbuis@igalia.com>

        Fix unitless usage of mathsize
        https://bugs.webkit.org/show_bug.cgi?id=194940

        Reviewed by Frédéric Wang.

        Convert unitless lengths to percentage values to correct the computed
        font size.

        * mathml/MathMLElement.cpp:
        (WebCore::convertToPercentageIfNeeded):
        (WebCore::MathMLElement::collectStyleForPresentationAttribute):

2019-02-21  Simon Fraser  <simon.fraser@apple.com>

        Hardcode Visual Viewports on everywhere except iOS WK1
        https://bugs.webkit.org/show_bug.cgi?id=194928

        Reviewed by Zalan Bujtas.

        Remove the WK1 and WK2 preferences and MiniBrowser menu item for "visual viewports",
        change the default value of the Setting to 'true', and hardcode WebView on iOS to
        set it to false. The setting has shipped for several years and there's no need to turn
        it off now.

        Similarly, disable the "Visual Viewport API" on iOS WK1, since it makes no sense if
        Visual Viewports are not enabled.
        
        Remove the "visualViewportEnabled" flag and unused code paths from scrolling tree code
        that only runs in WK2

        * page/Settings.yaml:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::reconcileScrollingState):
        (WebCore::AsyncScrollingCoordinator::visualViewportEnabled const): Deleted.
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
        (WebCore::ScrollingStateFrameScrollingNode::setAllPropertiesChanged):
        (WebCore::ScrollingStateFrameScrollingNode::dumpProperties const):
        (WebCore::ScrollingStateFrameScrollingNode::setVisualViewportEnabled): Deleted.
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::visualViewportEnabled const): Deleted.
        (WebCore::ScrollingTree::setVisualViewportEnabled): Deleted.
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::layoutViewportForScrollPosition const):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollLayerPosition):

2019-02-21  Darin Adler  <darin@apple.com>

        Some refinements for Node and Document
        https://bugs.webkit.org/show_bug.cgi?id=194764

        Reviewed by Ryosuke Niwa.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::press): Use shadowHost instead of
        deprecatedShadowAncestorNode.
        (WebCore::AccessibilityObject::axObjectCache const): Tweak coding style.
        (WebCore::AccessibilityObject::focusedUIElement const): Use existing page
        function to streamline.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessKey const): Use
        attributeWithoutSynchronization for efficiency and consistency with other
        code working with the accesskey attribute.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::childrenChanged): Added call to
        invalidateAccessKeyCache, replacing old scheme tied to style recalculation.

        * dom/DecodedDataDocumentParser.cpp:
        (WebCore::DecodedDataDocumentParser::appendBytes): Update for name and return
        type change of createDecoderIfNeeded to decoder.
        (WebCore::DecodedDataDocumentParser::flush): Ditto.

        * dom/Document.cpp:
        (WebCore::Document::elementForAccessKey): Renamed from getElementForAccessKey
        to match WebKit coding style. Changed to use unique_ptr instead of separate
        boolean to keep track of map validity status.
        (WebCore::Document::buildAccessKeyCache): Renamed from buildAccessKeyMap to
        clarify that this is a cache. Changed to use composedTreeDescendants rather
        than explicit calls to shadowRoot. Use add instead of set so that first element
        in document order wins, instead of last element in document order. Updated
        to make a new map in a new unique_ptr instead of populating a map.
        (WebCore::Document::invalidateAccessKeyCacheSlowCase): Renamed from
        invalidateAccessKeyMap, and left an inline part in the header so the fast case
        of quickly checking for a null pointer can be inlined.
        (WebCore::Document::doctype const): Use downcast instead of static_cast.
        (WebCore::Document::scheduleStyleRecalc): Moved call to invalidateAccessKeyMap
        from here to childrenChanged and accesskey attribute change handling.
        (WebCore::Document::processFormatDetection): Set m_isTelephoneNumberParsingAllowed
        directly since this is the only place that does it and we don't need to factor
        that one line of code into a function.
        (WebCore::Document::getOverrideStyle): Moved to header since it's just a stub
        that always returns nullptr and can be inlined.
        (WebCore::Document::setIsTelephoneNumberParsingAllowed): Deleted.
        (WebCore::Document::ensureTemplateDocument): Removed nullptr frame argument to
        the create function, since Document::create now always involves no frame.
        (WebCore::Document::didAssociateFormControl): Changed argument type to a reference
        and simplified the logic with a local variable.
        (WebCore::Document::didAssociateFormControlsTimerFired): Simplified the null
        checks and rearranged things so that m_associatedFormControls will always
        get cleared even if the document is no longer associated with a page.

        * dom/Document.h: Removed unnnecessary explicit values for enumerations (first
        value is always zero, etc.) and formatted simple enumerations in a single line
        for easier reading. Moved Document::create fucntion bodies out of line, removed
        the frame argument from the simple "create with URL" overload and made the frame
        argument for createNonRenderedPlaceholder be a reference rather than a pointer.
        Renamed getElementByAccessKey to elementForAccessKey, invalidateAccessKeyMap to
        invalidateAccessKeyCache, buildAccessKeyMap to buildAccessKeCache,
        m_elementsByAccessKey to m_accessKeyCache and changed its type.
        Removed bogus "DOM methods" comment, unused setParserFeature friend declaration,
        setIsTelephoneNumberParsingAllowed function, and m_accessKeyMapValid flag.

        * dom/Document.idl: Added comment highlighting that getOverrideStyle is just a
        placeholder returning null.

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged): Call invalidateAccessKeyCache when the
        value of the accesskey attribute is changed. Also moved the class attribute code
        so the attributes here are in alphabetical order (only class and id were out of
        alphabetical order).

        * dom/Node.cpp:
        (WebCore::Node::isDescendantOrShadowDescendantOf const): Rewrote to no longer
        use deprecatedShadowAncestorNode and used boolean operators to make it a
        single line and easier to understand. Also added a FIXME since the
        containsIncludingShadowDOM function is so similar, yet differently written.
        (WebCore::Node::contains const): Rewrote as a single line to make this easier
        to read and to *slightly* improve the speed in the "this == node" case.
        (WebCore::Node::containsIncludingHostElements const): Use downcast.
        (WebCore::Node::deprecatedShadowAncestorNode const): Deleted.

        * dom/Node.h: Deleted now-unused deprecatedShadowAncestorNode.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment): Rewrote to use shadowHost
        instead of deprecatedShadowAncestorNode.

        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::resetFormOwner): Pass reference to
        didAssociateFormControl.
        (WebCore::FormAssociatedElement::formAttributeChanged): Ditto.

        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::parseAttribute): Removed special case for accesskey
        attribute, because we want to call the base class parseAttribute in that case.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::insertedIntoAncestor): Pass reference to
        didAssociateFormControl.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseAttribute): Removed special case for accesskey
        attribute with mysterious FIXME, because we want to call the base class
        parseAttribute in that case. The old code had no effect before; the access key
        logic would still find the attribute; if the goal is to ignore the attribute
        for these elements we will need a different solution.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseAttribute): Ditto.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader): Removed code that was always passing
        nullptr as the frame for the newly created DocumentWriter. It used m_frame, but
        m_frame was always null.
        (WebCore::DocumentLoader::attachToFrame): Pass reference to DocumentWriter::setFrame.

        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::DocumentWriter): Deleted. The old version set m_frame to
        the passed in frame, which was always nullptr, and initialized some booleans and an
        enumeration, which are now initialized in the class definition.
        (WebCore::DocumentWriter::createDocument): Pass a reference for the frame.
        (WebCore::DocumentWriter::begin): Updated now that State is an enum class.
        (WebCore::DocumentWriter::decoder): Renamed from createDecoderIfNeeded and changed
        to return a reference.
        (WebCore::DocumentWriter::addData): Use RELEASE_ASSERT instead of if/CRASH and
        updated now that State is an enum class.
        (WebCore::DocumentWriter::insertDataSynchronously): Updated now that State is an
        enum class.
        (WebCore::DocumentWriter::end): Ditto.

        * loader/DocumentWriter.h: Removed unneeded include and forward declaration.
        Removed the frame pointer argument to the constructor, caller was always passing a
        nullptr. Changed argument to setFrame to be a reference. Renamed createDecoderIfNeeded
        to decoder and changed it to return a reference. Initialized m_frame,
        m_hasReceivedSomeData, m_encodingWasChosenByUser, and m_state here so we don't need
        to initialize them in a constructor. Renamed the enum from WriterState to State since
        it's a member of DocumentWriter already, and made it an enum class rather than ending
        each enumeration value with WritingState.

        * page/DragController.cpp:
        (WebCore::isEnabledColorInput): Removed boolean argument setToShadowAncestor. The
        one caller that formerly passed true now calls the new hasEnabledColorInputAsShadowHost
        function instead.
        (WebCore::hasEnabledColorInputAsShadowHost): Added.
        (WebCore::elementUnderMouse): Use shadowHost instead of deprecatedShadowAncestorNode.
        Also added FIXME since it seems this should instead be using parentElementInComposedTree.
        (WebCore::DragController::concludeEditDrag): Removed "false" argument to isEnabledColorInput.
        (WebCore::DragController::canProcessDrag): Removed "true" argument to isEnabledColorInput
        and added call to hasEnabledColorInputAsShadowHost. Also put the value of the node to drag
        into a local variable to simplify code.
        (WebCore::DragController::draggableElement const): Removed "false" argument to isEnabledColorInput.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleAccessKey): Update name of elementForAccessKey.

        * page/FocusController.cpp:
        (WebCore::clearSelectionIfNeeded): Use shadowHost instead of deprecatedShadowAncestorNode.

        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::createPageForServiceWorker): Pass reference instead of pointer for frame to
        Document::createNonRenderedPlaceholder.

2019-02-21  Daniel Bates  <dabates@apple.com>

        Same Site Lax cookies are not sent with cross-site redirect from client-initiated load
        https://bugs.webkit.org/show_bug.cgi?id=194906
        <rdar://problem/44305947>

        Reviewed by Brent Fulgham.

        Ensure that a request for a top-level navigation is annotated as such regardless of whether
        the request has a computed Same Site policy.

        "New loads" initiated by a the client (Safari) either by API or a human either explicitly
        typing a URL in the address bar or Command + clicking a hyperlink to open it in a new window/tab
        are always considered Same Site. This is by definition from the spec. [1] as we aren't navigating
        from an existing page. (Command + click should be thought of as a convenience to the user from
        having to copy the hyperlink's URL, create a new window, and paste the URL into the address bar).
        Currently the frame loader marks a request as a top-level navigation if and only if the request
        does not have a pre-computed Same Site policy. However, "New loads" have a pre-computed Same Site
        policy. So, these loads would never be marked as a top-level navigation by the frame loading code.
        Therefore, if the "new load" turned out to be a cross-site redirect then WebKit would incorrectly
        tell the networking stack that the load was a cross-site, non-top-level navigation, and per the
        Same Site spec [2], the networking stack would not send Same Site Lax cookies. Instead,
        WebKit should unconditionally ensure that requests are marked as a top-level navigation, if applicable.

        [1] See Note for (1) in  <https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-02#section-5.2>
        [2] <https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-02#section-5.3.7.1>

        Test: http/tests/cookies/same-site/user-load-cross-site-redirect.php

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addExtraFieldsToRequest): Unconditionally update the request's top-
        level navigation bit.
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setAsIsolatedCopy): Unconditionally copy a request's top-
        level navigation bit.

2019-02-21  Per Arne Vollan  <pvollan@apple.com>

        Layout Test fast/text/international/khmer-selection.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=191368

        Reviewed by Brent Fulgham.

        GlyphBuffer's offset array wasn't getting filled by UniscribeController.
        Our underlining code requires this array.

        Uniscribe gives us a character -> glyph mapping, so we just have to compute
        the inverse and give it to the GlyphBuffer.

        This patch is written by Myles C. Maxfield.

        Test: fast/text/international/khmer-selection.html.

        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::add):
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::DrawGlyphs::generateGlyphBuffer const):
        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::advance):
        (WebCore::UniscribeController::itemizeShapeAndPlace):
        (WebCore::UniscribeController::shapeAndPlaceItem):
        * platform/graphics/win/UniscribeController.h:

2019-02-21  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: leak UniqueIDBDatabase in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=194870
        <rdar://problem/48163812>

        Reviewed by Geoffrey Garen.

        UniqueIDBDatabase owns a pointer to itself after it is hard closed. It should release the pointer when it 
        receives confirmation from clients and all pending tasks are done. UniqueIDBDatabase already checks whether the
        pointer should be released when a database task finishes, but it didn't perform a check when a confirm message 
        is received. 

        No new test as the order of task completion and confirmation arrival is uncertain.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::confirmDidCloseFromServer):

2019-02-21  Andy Estes  <aestes@apple.com>

        contentfiltering tests leak documents
        https://bugs.webkit.org/show_bug.cgi?id=189434
        <rdar://44239943>

        Reviewed by Simon Fraser.

        Changed ContentFilter to capture the blocked Frame as a WeakPtr to break a reference cycle.

        This fixes world leaks in several tests in LayoutTests/contentfiltering/.

        * bindings/js/ScriptController.h:
        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::didDecide):

2019-02-21  Don Olmstead  <don.olmstead@sony.com>

        [CMake][Win] Fix !USE(CF) build of WebCore
        https://bugs.webkit.org/show_bug.cgi?id=194879

        Reviewed by Konstantin Tokarev.

        * PlatformAppleWin.cmake:
        * PlatformWin.cmake:
        * PlatformWinCairo.cmake:

2019-02-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Add support for placing formatting roots in-between floats.
        https://bugs.webkit.org/show_bug.cgi?id=194902

        Reviewed by Antti Koivisto.

        This patch add support for placing a formatting root box in-between existing floats.
        The initial vertical position of a formatting root is its static position which can make the box
        placed above exsiting floats (whereas we can never place a regular float above existing floats.)

        Test: fast/block/block-only/floats-and-block-formatting-roots.html

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats const):
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatPair::LeftRightIndex::isEmpty const):
        (WebCore::Layout::FloatPair::isEmpty const):
        (WebCore::Layout::FloatPair::operator* const):
        (WebCore::Layout::Iterator::operator* const):
        (WebCore::Layout::begin):
        (WebCore::Layout::end):
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::positionForFormattingContextRoot const):
        (WebCore::Layout::findAvailablePosition):
        (WebCore::Layout::FloatingContext::findPositionForFloatBox const):
        (WebCore::Layout::FloatingContext::findPositionForFormattingContextRoot const):
        (WebCore::Layout::FloatPair::FloatPair):
        (WebCore::Layout::FloatPair::left const):
        (WebCore::Layout::FloatPair::right const):
        (WebCore::Layout::FloatPair::intersects const):
        (WebCore::Layout::FloatPair::operator == const):
        (WebCore::Layout::FloatPair::horizontalConstraints const):
        (WebCore::Layout::FloatPair::bottom const):
        (WebCore::Layout::Iterator::operator++):
        (WebCore::Layout::Iterator::set):
        (WebCore::Layout::FloatingPair::isEmpty const): Deleted.
        (WebCore::Layout::FloatingPair::verticalConstraint const): Deleted.
        (WebCore::Layout::FloatingContext::positionForFloatAvoiding const): Deleted.
        (WebCore::Layout::FloatingContext::floatingPosition const): Deleted.
        (WebCore::Layout::FloatingPair::FloatingPair): Deleted.
        (WebCore::Layout::FloatingPair::left const): Deleted.
        (WebCore::Layout::FloatingPair::right const): Deleted.
        (WebCore::Layout::FloatingPair::intersects const): Deleted.
        (WebCore::Layout::FloatingPair::operator == const): Deleted.
        (WebCore::Layout::FloatingPair::horizontalConstraints const): Deleted.
        (WebCore::Layout::FloatingPair::bottom const): Deleted.
        * layout/floats/FloatingContext.h:

2019-02-21  Rob Buis  <rbuis@igalia.com>

        Update MIME type parser
        https://bugs.webkit.org/show_bug.cgi?id=180526

        Reviewed by Darin Adler.

        Further testing showed the MIME parser needs these fixes:
        - stripWhitespace is wrong for removing HTTP whitespace, use
          stripLeadingAndTrailingHTTPSpaces instead.
        - HTTP Token code points checking for Rfc2045 and Mimesniff were
          mixed up, use the dedicated isValidHTTPToken for Mimesniff mode.
        - Quoted Strings were not unescaped/escaped, this seems ok for
          serializing but is wrong when gettings individual parameter values.
          Implement [1] and [2] Step 2.4 to properly unescape and escape.

        This change also tries to avoid hard to read uses of find.

        Test: ParsedContentType.Serialize

        [1] https://fetch.spec.whatwg.org/#collect-an-http-quoted-string
        [2] https://mimesniff.spec.whatwg.org/#serializing-a-mime-type

        * platform/network/ParsedContentType.cpp:
        (WebCore::skipSpaces):
        (WebCore::parseToken):
        (WebCore::isNotQuoteOrBackslash):
        (WebCore::collectHTTPQuotedString):
        (WebCore::containsNonTokenCharacters):
        (WebCore::parseQuotedString):
        (WebCore::ParsedContentType::parseContentType):
        (WebCore::ParsedContentType::create):
        (WebCore::ParsedContentType::setContentType):
        (WebCore::containsNonQuoteStringTokenCharacters):
        (WebCore::ParsedContentType::setContentTypeParameter):
        (WebCore::ParsedContentType::serialize const):
        (WebCore::substringForRange): Deleted.
        (WebCore::isNonTokenCharacter): Deleted.
        (WebCore::isNonQuotedStringTokenCharacter): Deleted.
        * platform/network/ParsedContentType.h:

2019-02-20  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (240698): Fixed position banners flicker and move when scrolling on iOS
        https://bugs.webkit.org/show_bug.cgi?id=194889
        rdar://problem/47755552

        Reviewed by Tim Horton.
        
        After r240698 we could commit scrolling changes for a fixed node where the "viewportRectAtLastLayout" and the layer
        position were mismatched; this happened when AsyncScrollingCoordinator::reconcileScrollingState() came back from the UI process
        with an unstable update and set a new layoutViewport, then some other layout triggered a compositing tree update. During the tree
        update, we'd update the fixed scrolling node with the new viewport, and an old layer position.
        
        Fix by ensuring that we only update the geometry info for a scrolling tree node when we update layer geometry for the corresponding
        layer.

        Not currently testable.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBackingAndHierarchy):

2019-02-20  Dean Jackson  <dino@apple.com>

        Rotation animations sometimes use the wrong origin (affects apple.com)
        https://bugs.webkit.org/show_bug.cgi?id=194878
        <rdar://problem/43908047>

        Reviewed by Simon Fraser.

        Some versions of CoreAnimation apply additive animations in reverse
        order. Detect this and reverse the list of animations we provide.

        Update the existing animations/additive-transform-animations.html test to
        be a ref-test that would identify this failure. Previously it relied on
        a pixel test.

        * platform/graphics/ca/GraphicsLayerCA.cpp: Use 
            HAVE_CA_WHERE_ADDITIVE_TRANSFORMS_ARE_REVERSED to decide whether or
            not to flip the list of animations (and mark the correct ones as
            additive).
        (WebCore::GraphicsLayerCA::appendToUncommittedAnimations):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):

2019-02-20  Don Olmstead  <don.olmstead@sony.com>

        [Win] Guard CF usage in RenderThemeWin
        https://bugs.webkit.org/show_bug.cgi?id=194875

        Reviewed by Alex Christensen.

        No new tests. No change in behavior.

        Add #if USE(CF) checks to RenderThemeWin so it can compile without CF support.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::stringWithContentsOfFile):
        (WebCore::RenderThemeWin::mediaControlsStyleSheet):
        (WebCore::RenderThemeWin::mediaControlsScript):
        * rendering/RenderThemeWin.h:

2019-02-20  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in DOMWindowExtension::suspendForPageCache
        https://bugs.webkit.org/show_bug.cgi?id=194871

        Reviewed by Chris Dumez.

        This is a speculative fix for a crash in DOMWindowExtension::suspendForPageCache.

        We think it's possible for DOMWindowExtension::suspendForPageCache notifying the clients via
        dispatchWillDisconnectDOMWindowExtensionFromGlobalObject to remove other DOMWindowExtension's.
        Check that each DOMWindowProperty is still in m_properties before invoking suspendForPageCache
        to avoid the crash.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::willDestroyCachedFrame):
        (WebCore::DOMWindow::willDestroyDocumentInFrame):
        (WebCore::DOMWindow::willDetachDocumentFromFrame):
        (WebCore::DOMWindow::suspendForPageCache):
        (WebCore::DOMWindow::resumeFromPageCache):
        * page/DOMWindowExtension.cpp:
        (WebCore::DOMWindowExtension::suspendForPageCache):

2019-02-20  Alex Christensen  <achristensen@webkit.org>

        Always call CompletionHandlers after r240909
        https://bugs.webkit.org/show_bug.cgi?id=194823

        Reviewed by Ryosuke Niwa.

        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        (WebCore::PolicyChecker::checkNewWindowPolicy):

2019-02-20  Andy Estes  <aestes@apple.com>

        [Xcode] Add SDKVariant.xcconfig to various Xcode projects
        https://bugs.webkit.org/show_bug.cgi?id=194869

        Rubber-stamped by Jer Noble.

        * WebCore.xcodeproj/project.pbxproj:

2019-02-20  Said Abou-Hallawa  <sabouhallawa@apple.com>

        drawImage() clears the canvas if it's the source of the image and globalCompositeOperation is "copy"
        https://bugs.webkit.org/show_bug.cgi?id=194746

        Reviewed by Dean Jackson.

        Test: fast/canvas/canvas-drawImage-composite-copy.html

        If the source canvas of drawImage() is the same as the destination and
        globalCompositeOperation is set to "copy", copy the srcRect from the 
        canvas to a temporary buffer before calling clearCanvas() then drawImage
        from this temporary buffer.

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::drawImage):
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::copyRectToBuffer):
        * platform/graphics/ImageBuffer.h:

2019-02-20  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r241788>): ASSERTION FAILED: !m_normalFlowListDirty in TestWebKitAPI.WebKit.ResizeReversePaginatedWebView test
        https://bugs.webkit.org/show_bug.cgi?id=194866

        Reviewed by Antti Koivisto.

        r241788 removed some calls that updated layer lists (normal flow and z-order) during compositing updates, causing
        a later call to RenderLayerCompositor::recursiveRepaintLayer() to assert when the lists were dirty. Fix by updating
        the lists in RenderLayerCompositor::recursiveRepaintLayer(), as we do in various other places.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::recursiveRepaintLayer):

2019-02-20  Daniel Bates  <dabates@apple.com>

        [iOS] Tweak UI for focus rings
        https://bugs.webkit.org/show_bug.cgi?id=194864
        <rdar://problem/47831886>

        Reviewed by Brent Fulgham.

        Make use of UIKit constants to make focus rings pretty.

        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::drawFocusRingAtTime):

2019-02-20  Timothy Hatcher  <timothy@apple.com>

        RenderThemeIOS should use RenderTheme's color cache instead of its own.
        https://bugs.webkit.org/show_bug.cgi?id=194822
        rdar://problem/48208296

        Reviewed by Tim Horton.

        Tested by fast/css/apple-system-colors.html.

        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::isAppleLegacyCssValueKeyword):
        * platform/graphics/Color.h:
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::makeRGBAFromCGColor):
        (WebCore::Color::Color):
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::systemColor const):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor const):

2019-02-20  Loïc Yhuel  <loic.yhuel@softathome.com>

        Fix crash when opening Web Inspector after a WebSocket was blocked by content extensions
        https://bugs.webkit.org/show_bug.cgi?id=194819

        Reviewed by Joseph Pecoraro.

        Test: http/tests/inspector/network/contentextensions/blocked-websocket-crash.html

        * Modules/websockets/WebSocketChannel.h:
        (WebCore::WebSocketChannel::hasCreatedHandshake):
        * inspector/agents/page/PageNetworkAgent.cpp:
        Ignore WebSocketChannel without an WebSocketHandshake, which would crash in InspectorNetworkAgent::enable.

2019-02-20  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Make FloatAvoider::resetPosition implicit
        https://bugs.webkit.org/show_bug.cgi?id=194855

        Reviewed by Antti Koivisto.

        Let's compute the initial top/left position during c'tor time.
        This is in preparation for fixing formatting root box placement in a float context.

        * layout/floats/FloatAvoider.cpp:
        (WebCore::Layout::FloatAvoider::resetPosition): Deleted.
        * layout/floats/FloatAvoider.h:
        (WebCore::Layout::FloatAvoider::displayBox):
        (WebCore::Layout::FloatAvoider::initialVerticalPosition const): Deleted.
        * layout/floats/FloatBox.cpp:
        (WebCore::Layout::FloatBox::FloatBox):
        (WebCore::Layout::FloatBox::initialVerticalPosition const):
        * layout/floats/FloatBox.h:
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::floatingPosition const):

2019-02-20  Don Olmstead  <don.olmstead@sony.com>

        [MSVC] Fix compilation errors with lambdas in Service Workers
        https://bugs.webkit.org/show_bug.cgi?id=194841

        Reviewed by Alex Christensen.

        No new tests. No change in behavior.

        MSVC has problems with the scoping of `this` within a nested lambda. In these cases `this` is
        referring to the enclosing lambda according to MSVC. This patch works around this behavior
        through by using the `protectedThis` pattern in WebKit code.

        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::openSQLiteDatabase):

2019-02-20  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Enable support for CONTENT_EXTENSIONS
        https://bugs.webkit.org/show_bug.cgi?id=167941

        Reviewed by Carlos Garcia Campos.

        * platform/gtk/po/POTFILES.in: Added WebKitUserContentFilterStore.cpp
        to the list of files with translatable strings.

2019-02-19  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r238090): Toggling visibility on the <html> element can result in a blank web view
        https://bugs.webkit.org/show_bug.cgi?id=194827
        rdar://problem/47620594

        Reviewed by Antti Koivisto.

        Incremental compositing updates, added in rr238090, use repaints as a trigger for re-evaluating
        layer configurations, since a repaint implies that a layer gains painted content. This is done
        via the call to setNeedsCompositingConfigurationUpdate() in RenderLayerBacking::setContentsNeedDisplay{InRect}.
        The RenderView's layer is opted out of this to avoid doing lots of redundant layer config recomputation
        for the root. The configuration state that matters here is whether the layer contains painted content,
        and therefore needs backing store; this is computed by RenderLayerBacking::isSimpleContainerCompositingLayer(),
        and feeds into GraphicsLayer::drawsContent().

        However, if <html> starts as "visibility:hidden" or "opacity:0", as some sites do to hide incremental loading,
        then we'll fail to recompute 'drawsContent' for the root and leave the root with drawsContent=false, which
        causes RenderLayerBacking::setContentsNeedDisplay{InRect} to short-circuit, and then we paint nothing.

        Ironically, 'drawsContent' doesn't actually save any backing store for the root, since it has no affect on
        the root tile caches; we always make tiles. So the simple fix here is to change RenderLayerBacking::isSimpleContainerCompositingLayer()
        to always return false for the RenderView's layer (the root).
        
        Testing this was tricky; ref testing doesn't work because we force repaint, and we normally skip
        properties of the root in layer tree dumps to hide WK1/WK2 differences. Therefore I had to add
        LAYER_TREE_INCLUDES_ROOT_LAYER_PROPERTIES and fix RenderLayerBacking::shouldDumpPropertyForLayer to
        respect it.

        Test: compositing/visibility/root-visibility-toggle.html

        * page/Frame.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties const):
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::shouldDumpPropertyForLayer const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer const):
        (WebCore::RenderLayerBacking::shouldDumpPropertyForLayer const):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        * testing/Internals.cpp:
        (WebCore::toLayerTreeFlags):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-02-19  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r240909): Release assertion in FrameLoader::loadPostRequest when opening new window
        https://bugs.webkit.org/show_bug.cgi?id=194820

        Reviewed by Geoffrey Garen.

        This release assertion was wrong. The invocation of PolicyChecker::checkNewWindowPolicy in FrameLoader
        doesn’t require PolicyChecker's load type to be set in PolicyChecker because FrameLoader's
        continueLoadAfterNewWindowPolicy invokes loadWithNavigationAction which sets the load type later,
        and we don't rely on PolicyChecker's load type until then.

        Fixed the crash by removing relese asserts before invoking checkNewWindowPolicy accordingly.

        This patch reverts r241015 since it too was asserting that PolicyChecker's load type is set before
        invoking checkNewWindowPolicy which is not the right assumption.

        Test: fast/loader/navigate-with-post-to-new-target-after-back-forward-navigation.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadPostRequest):

2019-02-19  Zalan Bujtas  <zalan@apple.com>

        Fix post-commit feedback.

        Unreviewed. 

        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingPair::intersects const):

2019-02-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Remove redundant intersecting logic
        https://bugs.webkit.org/show_bug.cgi?id=194804

        Reviewed by Antti Koivisto.

        floatAvoider.overflowsContainingBlock() check already (and properly) takes care of the far left/right case (see comment).

        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::floatingPosition const):
        (WebCore::Layout::FloatingPair::intersects const):

2019-02-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241722.
        https://bugs.webkit.org/show_bug.cgi?id=194801

        Causing time outs and EWS failures after expectation file was
        added. (Requested by ShawnRoberts on #webkit).

        Reverted changeset:

        "IndexedDB: leak IDBDatabase and IDBTransacstion in layout
        tests"
        https://bugs.webkit.org/show_bug.cgi?id=194709
        https://trac.webkit.org/changeset/241722

2019-02-16  Darin Adler  <darin@apple.com>

        Continue reducing use of String::format, now focusing on hex: "%p", "%x", etc.
        https://bugs.webkit.org/show_bug.cgi?id=194752

        Reviewed by Daniel Bates.

        * Modules/websockets/WebSocket.cpp: Added an include of HexNumber.h. This previously
        got included because of Logger.h, but that no longer pulls in HexNumber.h.

        * css/CSSMarkup.cpp: Removed unneeded include of StringBuffer.h.
        * css/CSSPrimitiveValue.cpp: Ditto.

        * css/CSSUnicodeRangeValue.cpp:
        (WebCore::CSSUnicodeRangeValue::customCSSText const): Use makeString and hex instead
        of String::format and "%x".

        * html/HTMLMediaElement.h:
        (WTF::ValueToString<WebCore::TextTrackCue::string): Use a non-template function,
        TextTrackCure::debugString, so we don't need to use HextNumber.h in a header.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (GetErrorString): Use makeString and hex instead of String::format and "%04x".

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::debugString const): Added. Moved string conversion here
        from HTMLMediaElement.h and use makeString instead of String::format. Also use
        the word "debug" to make it clear that it's not OK to use this string, with a
        pointer value serialized into it, outside of debugging.
        * html/track/TextTrackCue.h: Added TextTrackCue::debugString.

        * page/linux/ResourceUsageOverlayLinux.cpp:
        (WebCore::formatByteNumber): Use makeString and FormattedNumber::fixedWidth
        instead of String::format and "%.1f" etc.

        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::keyIdentifierForCharCode): Use the new hex function here instead of
        the old code that did each of the four characters explicitly.

        * platform/gamepad/mac/HIDGamepad.cpp:
        (WebCore::HIDGamepad::HIDGamepad): Use makeString instead of String::format.

        * platform/graphics/Color.cpp:
        (WebCore::Color::nameForRenderTreeAsText const): Use hex instead of doing each
        digit separately.

        * platform/graphics/FloatPolygon.cpp:
        (WebCore::FloatPolygonEdge::debugString const): Added. Moved string conversion here
        from the header and use makeString instead of String::format. Also use
        the word "debug" to make it clear that it's not OK to use this string, with a
        pointer value serialized into it, outside of debugging.
        * platform/graphics/FloatPolygon.h: Updated for the above.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setName): Use makeString instead of String::format.
        (WebCore::GraphicsLayerCA::recursiveCommitChanges): DItto.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Ditto.
        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::keyIdentifierForGdkKeyCode): Ditto.
        * platform/libwpe/PlatformKeyboardEventLibWPE.cpp:
        (WebCore::PlatformKeyboardEvent::keyIdentifierForWPEKeyCode): Ditto.
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::makeElement): Ditto.
        (WebCore::GStreamerVideoEncoder::InitEncode): Ditto.

        * platform/text/TextCodecLatin1.cpp: Removed unneeded include of StringBuffer.h
        and "using namespace WTF".

        * platform/win/GDIObjectCounter.cpp:
        (WebCore::GDIObjectCounter::GDIObjectCounter): Use makeString instead of String::format.
        * platform/win/KeyEventWin.cpp:
        (WebCore::keyIdentifierForWindowsKeyCode): Ditto.

        * rendering/FloatingObjects.cpp:
        (WebCore::FloatingObject::debugString const): Added. Moved string conversion here
        from the header and use makeString instead of String::format. Also use
        the word "debug" to make it clear that it's not OK to use this string, with a
        pointer value serialized into it, outside of debugging.
        * rendering/FloatingObjects.h: Updated for the above.

        * rendering/RenderFragmentContainer.cpp:
        (WebCore::RenderFragmentContainer::debugString const): Added. Moved string
        conversion here from the header and use makeString instead of String::format.
        Also use the word "debug" to make it clear that it's not OK to use this string,
        with a pointer value serialized into it, outside of debugging.
        * rendering/RenderFragmentContainer.h: Updated for the above.
        * rendering/RenderFragmentedFlow.h: Ditto.

        * testing/Internals.cpp:
        (WebCore::Internals::address): Use makeString instead of String::format.

2019-02-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Support pasting item-provider-backed data on the pasteboard as attachment elements
        https://bugs.webkit.org/show_bug.cgi?id=194670
        <rdar://problem/39066529>

        Reviewed by Tim Horton.

        Adds support for pasting files on the pasteboard as attachment elements, if the attachment element runtime
        switch is enabled. Currently, the only types of data that can be pasted as attachments are images, which take a
        special codepath in WebContentReader::readImage.

        This patch adds a readDataBuffer method that converts a given blob of data from the pasteboard into an
        attachment-element-backed representation in the DOM (i.e. either an attachment element or image element that
        contains an attachment element). In the case where the given pasteboard item has been explicitly marked as an
        attachment (via the preferredPresentationStyle hint) and the item has at least one type representation that
        conforms to "public.content", we take this codepath instead of first attempting the web content reading types
        supported by default in WebKit.

        See below for more detail.

        Test: WKAttachmentTestsIOS.InsertPastedFilesAsAttachments

        * editing/Editor.cpp:
        (WebCore::Editor::clientReplacementURLForResource): Deleted.
        * editing/Editor.h:
        * editing/WebContentReader.h:
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::mimeTypeFromContentType):
        (WebCore::contentTypeIsSuitableForInlineImageRepresentation):
        (WebCore::createFragmentAndAddResources):
        (WebCore::sanitizeMarkupWithArchive):

        Remove all logic for handling subresource URL replacement. See WebKit ChangeLog for more details on this.

        (WebCore::WebContentReader::readImage):
        (WebCore::attachmentForFilePath):
        (WebCore::attachmentForData):

        Add a helper that creates an attachment element for a given blob of data and content type. The logic here is
        quite similar to that of attachmentForFilePath, and we should find a way to either merge them, or pull out more
        of their similarities into helper functions.

        (WebCore::WebContentReader::readDataBuffer):
        (WebCore::replaceSubresourceURLsWithURLsFromClient): Deleted.

        Remove more logic for handling subresource URL replacement. See WebKit ChangeLog for more details on this.

        * loader/EmptyClients.cpp:
        * page/EditorClient.h:
        * platform/Pasteboard.h:
        * platform/PasteboardItemInfo.h:
        (WebCore::PasteboardItemInfo::contentTypeForHighestFidelityItem const):
        (WebCore::PasteboardItemInfo::pathForHighestFidelityItem const):
        (WebCore::PasteboardItemInfo::encode const):
        (WebCore::PasteboardItemInfo::decode):

        Add contentTypesByFidelity to PasteboardItemInfo, instead of requesting this information using a separate IPC
        message. This means we can also remove getTypesByFidelityForItemAtIndex, and just use the item's types in
        fidelity order instead.

        * platform/PasteboardStrategy.h:
        * platform/PlatformPasteboard.h:
        * platform/ios/AbstractPasteboard.h:
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::read):

        Shave off (potentially many) sync IPC messages to the UI process by pulling each call to
        informationForItemAtIndex out of the inner loop when reading web content.

        (WebCore::Pasteboard::readRespectingUTIFidelities):

        Shave off one extraneous sync IPC message by rolling the types in fidelity order into the request for
        PasteboardItemInfo, instead of being sent in a separate message.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::informationForItemAtIndex):

        Populate contentTypesForFileUpload in the case where UIPasteboard is used (i.e. copy and paste).

        (WebCore::PlatformPasteboard::getTypesByFidelityForItemAtIndex): Deleted.
        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard pasteboardTypesByFidelityForItemAtIndex:]): Deleted.

2019-02-18  Daniel Bates  <dabates@apple.com>

        Clean up and modernize RenderThemeIOS::paintCheckboxDecorations()
        https://bugs.webkit.org/show_bug.cgi?id=194785

        Reviewed by Simon Fraser.

        Change from early return to else-clause to make the states clearer and make it more straightforward
        to share more common code. Use constexpr, allocate temporary vectors with inline capacity, and
        switch to uniform initializer syntax.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintCheckboxDecorations):

2019-02-18  Daniel Bates  <dabates@apple.com>

        [iOS] Focus ring for checkboxes, radio buttons, buttons and search fields should hug tighter to the contour
        https://bugs.webkit.org/show_bug.cgi?id=193599
        <rdar://problem/47399602>

        Reviewed by Simon Fraser.

        For now, iOS uses a 3px outline width for its focus rings. Do not inset the focus ring on iOS
        for text fields, textareas, keygens, and selects so as to match the visual appearance of all
        the other controls.

        Tests: fast/forms/ios/focus-button.html
               fast/forms/ios/focus-checkbox.html
               fast/forms/ios/focus-checked-checkbox.html
               fast/forms/ios/focus-checked-radio.html
               fast/forms/ios/focus-radio.html
               fast/forms/ios/focus-reset-button.html
               fast/forms/ios/focus-search-field.html
               fast/forms/ios/focus-submit-button.html
               fast/forms/ios/focus-text-field.html
               fast/forms/ios/focus-textarea.html

        * css/html.css:
        (:focus): Use 3px outline width.
        (input:focus, textarea:focus, keygen:focus, select:focus): Guard this code to exclude it when building for iOS.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations): Add FIXME comment.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::paintOutline): Call RenderTheme::adjustPaintRect() to adjust the paint rect.
        Otherwise, the focus rings for radios and checkboxes are drawn at the wrong y-coordinate and are not snug.

2019-02-18  Oriol Brufau  <obrufau@igalia.com>

        [css-grid] Handle indefinite percentages in fit-content()
        https://bugs.webkit.org/show_bug.cgi?id=194509

        Reviewed by Javier Fernandez.

        Test: imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-fit-content-percentage.html

        If the size of the grid container depends on the size of its tracks,
        a percentage in fit-content() is indefinite. Without this patch, some
        places treated this case as fit-content(0), which prevented the grid
        container from growing enough to contain the max-content contribution
        of its grid items.

        This patch treats such fit-content() as minmax(auto, max-content),
        but once the size of the grid container is known and it is laid out
        "for real", then the percentage is definite and it's used.

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::gridTrackSize const):
        (WebCore::GridTrackSizingAlgorithm::initializeTrackSizes):

2019-02-18  John Wilander  <wilander@apple.com>

        Check the existence of the frame in Document::hasFrameSpecificStorageAccess() and Document::setHasFrameSpecificStorageAccess()
        https://bugs.webkit.org/show_bug.cgi?id=194777
        <rdar://problem/47731945>

        Reviewed by Geoffrey Garen and Chris Dumez.

        Test: http/tests/storageAccess/remove-requesting-iframe.html

        * dom/Document.cpp:
        (WebCore::Document::hasFrameSpecificStorageAccess const):
            Now checks for the existence of the frame.
        (WebCore::Document::setHasFrameSpecificStorageAccess):
            Now checks for the existence of the frame.
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
            Now checks that the session ID is valid.

2019-02-18  Jer Noble  <jer.noble@apple.com>

        -[AVSampleBufferDisplayLayer player]: Unrecognized selector crash
        https://bugs.webkit.org/show_bug.cgi?id=194790
        <rdar://problem/33866742>

        Reviewed by Jon Lee.

        Ensure that a WebVideoContainerLayer's sole sublayer is actually an AVPlayerLayer (and not
        an AVSampleBufferDisplayLayer) before reporting that the layer type is LayerTypeAVPlayerLayer.

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::layerTypeForPlatformLayer):

2019-02-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Better categorize CPU usage per-thread / worker
        https://bugs.webkit.org/show_bug.cgi?id=194564

        Reviewed by Devin Rousso.

        Test: inspector/cpu-profiler/threads.html

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThreadsMutex):
        (WebCore::WorkerThread::workerThreadCount):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::~WorkerThread):
        (WebCore::WorkerThread::workerThread):
        (WebCore::WorkerThread::releaseFastMallocFreeMemoryInAllThreads):
        * workers/WorkerThread.h:
        (WebCore::WorkerThread::identifier const):
        Expose the set of all WorkerThreads.

        * inspector/agents/InspectorCPUProfilerAgent.cpp:
        (WebCore::InspectorCPUProfilerAgent::collectSample):
        Send inspector additional per-thread data.

        * page/ResourceUsageData.h:
        (WebCore::WorkerCPUInfo::WorkerCPUInfo):
        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::ThreadInfo::ThreadInfo):
        (WebCore::threadInfos):
        (WebCore::ResourceUsageThread::platformCollectCPUData):
        (WebCore::threadSendRights): Deleted.
        (WebCore::cpuUsage): Deleted.
        Compute per-thread values on cocoa ports.

        * page/linux/ResourceUsageThreadLinux.cpp:
        (WebCore::ResourceUsageThread::platformCollectCPUData):
        Stub per-thread values on linux ports.

2019-02-18  Jer Noble  <jer.noble@apple.com>

        Uncaught Exception crash in MediaPlayerPrivateAVFoundationObjC::setShouldObserveTimeControlStatus()
        https://bugs.webkit.org/show_bug.cgi?id=194786

        Reviewed by Eric Carlson.

        Convert a runtime crash to a debug assert by wrapping the call to -[AVPlayer removeObserver:forKeyPath:]
        in an exception handler.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldObserveTimeControlStatus):

2019-02-18  Daniel Bates  <dabates@apple.com>

        [iOS] Keyups for non-modifier keys identified as "Dead" when not focused in a content-editable element
        https://bugs.webkit.org/show_bug.cgi?id=192824
        <rdar://problem/47100332>

        Reviewed by Wenson Hsieh.

        When building with USE(UIKIT_KEYBOARD_ADDITIONS) enabled, normalize input strings for some more key codes
        now that hardware key events to non-editable elements use the same code path as for editable elements. 

        * platform/ios/KeyEventIOS.mm:
        (WebCore::windowsKeyCodeForCharCode): Demarcate mappings that are only needed when building with
        !USE(UIKIT_KEYBOARD_ADDITIONS) in the hope that one day we can remove this code.
        (WebCore::isFunctionKey): Ditto.
        * platform/ios/WebEvent.mm:
        (normalizedStringWithAppKitCompatibilityMapping): Normalize some more input strings when building with
        USE(UIKIT_KEYBOARD_ADDITIONS) enabled.

2019-02-18  Eric Carlson  <eric.carlson@apple.com>

        Add MSE logging configuration
        https://bugs.webkit.org/show_bug.cgi?id=194719
        <rdar://problem/48122151>

        Reviewed by Joseph Pecoraro.

        No new tests, updated inspector/console/webcore-logging.html.

        * dom/Document.cpp:
        (WebCore::messageSourceForWTFLogChannel): Recognize the MSE logging channel.

        * inspector/agents/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::getLoggingChannels): Ditto.

2019-02-18  Antoine Quint  <graouts@apple.com>

        [iOS] Dispatch additional events along with pointerdown and pointerup
        https://bugs.webkit.org/show_bug.cgi?id=194776
        <rdar://problem/48164284>

        Reviewed by Brent Fulgham.

        The Pointer Events specification mandates that "pointerover" and "pointerenter" events precede a "pointerdown" event and that "pointerout"
        and "pointerleave" events follow a "pointerup" event. We remove the EventHandler::dispatchPointerEventForTouchAtIndex() method and replace
        it with a PointerCaptureController::dispatchEventForTouchAtIndex() that can handle the dispatch of such additional events correctly, also
        allowing for two PointerCaptureController methods (pointerEventWillBeDispatched and pointerEventWasDispatched) to become private.

        Test: pointerevents/ios/over-enter-out-leave.html

        * dom/EventNames.h: Add the new "pointerover", "pointerenter", "pointerout" and "pointerleave" event types.
        * dom/PointerEvent.h:
        * dom/ios/PointerEventIOS.cpp:
        (WebCore::PointerEvent::create):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchPointerEventForTouchAtIndex): Deleted.
        * page/EventHandler.h:
        * page/PointerCaptureController.cpp:
        (WebCore::PointerCaptureController::dispatchEventForTouchAtIndex): Take the existing code from EventHandler::dispatchPointerEventForTouchAtIndex()
        and extend it to dispatch additional events as mandated. Since several events may be dispatched we check whether the dispatch of any of those events
        had defaultPrevented() or defaultHanded() return true and return those values as a pair.
        (WebCore::PointerCaptureController::pointerEventWasDispatched):
        * page/PointerCaptureController.h:

2019-02-18  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: leak IDBDatabase and IDBTransacstion in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=194709

        Reviewed by Geoffrey Garen.

        When connection to IDB server is closed, IDBTransaction would abort without notifying IDBDatabase, so 
        IDBDatabase didn't clear its reference to IDBTransaction which created a reference cycle. 

        Also IDBTransaction didn't clear its reference to IDBRequest in this case and it led to another reference cycle
        between IDBOpenDBRequest and IDBTransaction.

        Test: storage/indexeddb/IDBObject-leak.html

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::connectionToServerLost):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::~IDBTransaction):
        (WebCore::IDBTransaction::finishedDispatchEventForRequest):
        (WebCore::IDBTransaction::connectionClosedFromServer):
        * Modules/indexeddb/IDBTransaction.h:
        * testing/Internals.cpp:
        (WebCore::Internals::numberOfIDBTransactions const):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-02-18  Chris Fleizach  <cfleizach@apple.com>

        AX: PSON: Going back from apple.com to search results, cannot interact with HTML content. Disabling Swap Processes on Cross-Site Navigation resolves the issue.
        https://bugs.webkit.org/show_bug.cgi?id=194742

        Reviewed by Chris Dumez.

        With the new process model, WebProcess hits a case where it tries to send the "page loaded" notification before VoiceOver
        had a chance to register for any notifications. This leads to those notifications being dropped (and thus this bug).

        This change instead asks the UIProcess to send the notification, which we know VoiceOver has registered for, and can reliably
        receive notifications.

        It also sends the notification for "load failures," which to the VO users' perspective amounts to the same thing as a successful
        page load.

        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::frameLoadingEventPlatformNotification):

2019-02-18  Megan Gardner  <megan_gardner@apple.com>

        Turn On Smart Delete
        https://bugs.webkit.org/show_bug.cgi?id=194320

        Reviewed by Ryosuke Niwa.

        Updated the following tests to work with iOS:
        * editing/deleting/smart-delete-001.html:
        * editing/deleting/smart-delete-002.html:
        * editing/deleting/smart-delete-003.html:
        * editing/deleting/smart-delete-004.html:
        * editing/deleting/smart-delete-across-editable-boundaries-2.html:
        * editing/selection/delete-word-granularity-text-control.html:

        Turn on Smart delete for iOS at all times. Modify checks to allow Mac and iOS and other 
        platforms to turn on smart delete when desired.

        * editing/Editor.cpp:
        (WebCore::Editor::shouldSmartDelete):
        Allow platfroms to determine if smart delete should be on.
        On mac, this is via word granularity, on iOS this is just on all the time.
        (WebCore::Editor::canSmartCopyOrDelete):
        (WebCore::Editor::performCutOrCopy):
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeDelete):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::shouldSmartDelete):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::shouldSmartDelete):

2019-02-17  David Kilzer  <ddkilzer@apple.com>

        Unreviewed, rolling out r241620.

        "Causes use-after-free crashes running layout tests with ASan and GuardMalloc."
        (Requested by ddkilzer on #webkit.)

        Reverted changeset:

        "[WTF] Add environment variable helpers"
        https://bugs.webkit.org/show_bug.cgi?id=192405
        https://trac.webkit.org/changeset/241620

2019-02-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] RenderImage's default intrinsic size is 0.
        https://bugs.webkit.org/show_bug.cgi?id=194745

        Reviewed by Antti Koivisto.

        While the images are being loaded, their intrinsic size is set to 0 (RenderImage c'tor). Note that this code is temporary.
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createSubTree):

2019-02-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Add support for block replaced intrinsic width.
        https://bugs.webkit.org/show_bug.cgi?id=194705

        Reviewed by Simon Fraser.

        Replaced boxes should report their intrinsic width as preferred widths.

        Test: fast/block/block-only/replaced-intrinsic-width-simple.html

        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::intrinsicWidthConstraints):

2019-02-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] Apply min/max width constraints to preferred width computation
        https://bugs.webkit.org/show_bug.cgi?id=194739

        Reviewed by Simon Fraser.

        Ensure that both min-height and max-height are taken into account while computing the preferred width.

        Test: fast/block/block-only/min-max-and-preferred-width-simple.html

        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::intrinsicWidthConstraints):

2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Make builtin objects more lazily initialized under non-JIT mode
        https://bugs.webkit.org/show_bug.cgi?id=194727

        Reviewed by Saam Barati.

        * Modules/streams/ReadableByteStreamInternals.js:
        (privateInitializeReadableByteStreamController):
        (readableByteStreamControllerRespond):

2019-02-15  Dean Jackson  <dino@apple.com>

        Allow emulation of user gestures from Web Inspector console
        https://bugs.webkit.org/show_bug.cgi?id=194725
        <rdar://problem/48126604>

        Reviewed by Joseph Pecoraro and Devin Rousso.

        Test: inspector/runtime/evaluate-userGestureEmulation.html

        * inspector/agents/page/PageRuntimeAgent.cpp: Override the emulate method and create
        a UserGestureIndicator based on the emulateUserGesture option.
        (WebCore::PageRuntimeAgent::evaluate):
        * inspector/agents/page/PageRuntimeAgent.h:

2019-02-15  Chris Dumez  <cdumez@apple.com>

        Sample domainsVisited diagnostic logging
        https://bugs.webkit.org/show_bug.cgi?id=194657

        Reviewed by Ryosuke Niwa.

        Sample domainsVisited diagnostic logging, we are getting a lot of data from
        this key and this is hurting our other keys.

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

2019-02-15  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in the hit testing code via HTMLPlugInElement::isReplacementObscured()
        https://bugs.webkit.org/show_bug.cgi?id=194691

        Reviewed by Simon Fraser.

        The crash was caused by HTMLPlugInElement::isReplacementObscured updating the document
        without updating the layout of ancestor documents (i.e. documents in which frame owner
        elements appear) even though it hit-tests against the top-level document's RenderView.

        Fixed the bug by updating the layout of the top-level document as needed.

        Test: plugins/unsupported-plugin-with-replacement-in-iframe-crash.html

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::isReplacementObscured):

2019-02-15  Ross Kirsling  <ross.kirsling@sony.com>

        [WTF] Add environment variable helpers
        https://bugs.webkit.org/show_bug.cgi?id=192405

        Reviewed by Michael Catanzaro.

        * platform/NotImplemented.h:
        * platform/cocoa/SystemVersion.mm:
        (WebCore::createSystemMarketingVersion):
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::initializeGStreamer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/nicosia/NicosiaPaintingEngine.cpp:
        (Nicosia::PaintingEngine::create):
        * platform/graphics/texmap/TextureMapperFPSCounter.cpp:
        (WebCore::TextureMapperFPSCounter::TextureMapperFPSCounter):
        * platform/graphics/x11/PlatformDisplayX11.cpp:
        (WebCore::PlatformDisplayX11::create):
        * platform/gtk/RenderThemeWidget.cpp:
        (WebCore::RenderThemeScrollbar::RenderThemeScrollbar):
        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::ScrollbarThemeGtk::ScrollbarThemeGtk):
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlContext::CurlContext):
        (WebCore::EnvironmentVariableReader::read): Deleted.
        (WebCore::EnvironmentVariableReader::defined): Deleted.
        (WebCore::EnvironmentVariableReader::readAs): Deleted.
        (WebCore::EnvironmentVariableReader::sscanTemplate): Deleted.
        (WebCore::EnvironmentVariableReader::sscanTemplate<signed>): Deleted.
        (WebCore::EnvironmentVariableReader::sscanTemplate<unsigned>): Deleted.
        * platform/network/curl/NetworkStorageSessionCurl.cpp:
        (WebCore::defaultCookieJarPath):
        * platform/network/playstation/CurlSSLHandlePlayStation.cpp:
        (WebCore::getCACertPathEnv):
        * platform/network/win/CurlSSLHandleWin.cpp:
        (WebCore::getCACertPathEnv):
        * platform/text/hyphen/HyphenationLibHyphen.cpp:
        (WebCore::topLevelPath):
        (WebCore::webkitBuildDirectory):
        * platform/unix/LoggingUnix.cpp:
        (WebCore::logLevelString):
        * platform/win/LoggingWin.cpp:
        (WebCore::logLevelString):
        Utilize WTF::Environment where possible.

2019-02-15  Antoine Quint  <graouts@apple.com>

        Add a method to dispatch a PointerEvent based on a PlatformTouchEvent
        https://bugs.webkit.org/show_bug.cgi?id=194702
        <rdar://problem/48109355>

        Reviewed by Dean Jackson.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchPointerEventForTouchAtIndex):
        * page/EventHandler.h:

2019-02-15  Per Arne Vollan  <pvollan@apple.com>

        [WebVTT] Inline WebVTT styles should start with '::cue'
        https://bugs.webkit.org/show_bug.cgi?id=194227

        Reviewed by Eric Carlson.

        The original fix in r241203 is not sufficient, since it only checks if the CSS string starts
        with '::cue'. Before accepting a CSS string from a WebVTT file, it should be checked that
        all selectors starts with '::cue'.

        Test: media/track/track-cue-css.html

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::checkAndStoreStyleSheet):

2019-02-15  Youenn Fablet  <youenn@apple.com>

        Add binding tests for ContextAllowsMediaDevices and ContextHasServiceWorkerScheme
        https://bugs.webkit.org/show_bug.cgi?id=194713

        Reviewed by Eric Carlson.

        Binding tests covering mediaDevices and serviceWorker attributes.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjPrototype::finishCreation):
        (WebCore::jsTestObjMediaDevices1Getter):
        (WebCore::jsTestObjMediaDevices1):
        (WebCore::jsTestObjMediaDevices2Getter):
        (WebCore::jsTestObjMediaDevices2):
        (WebCore::jsTestObjServiceWorkers1Getter):
        (WebCore::jsTestObjServiceWorkers1):
        (WebCore::jsTestObjServiceWorkers2Getter):
        (WebCore::jsTestObjServiceWorkers2):
        * bindings/scripts/test/TestObj.idl:

2019-02-15  Beth Dakin  <bdakin@apple.com>

        Build fix.

        * rendering/RenderThemeIOS.mm:
        (WebCore::iconForAttachment):

2019-02-15  Youenn Fablet  <youenn@apple.com>

        Make ServiceWorkerClientFetch closer to WebResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=194651

        Reviewed by Alex Christensen.

        Check for redirection response and if so call a specific client API.
        Ensure ServiceWorkerFetch::Client gets called in the service worker thread proxy
        so that its m_connection is only accessed on that thread.

        Covered by existing tests.

        * platform/network/FormData.h:
        * platform/network/ResourceErrorBase.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::processResponse):
        * workers/service/context/ServiceWorkerFetch.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::cancelFetch):
        (WebCore::ServiceWorkerThreadProxy::continueDidReceiveFetchResponse):
        * workers/service/context/ServiceWorkerThreadProxy.h:

2019-02-15  Youenn Fablet  <youenn@apple.com>

        Make navigator.mediaDevices SecureContext
        https://bugs.webkit.org/show_bug.cgi?id=194666

        Reviewed by Eric Carlson.

        Make navigator.mediaDevices SecureContext.
        This can still be enabled for unsecure context using the existing page settings.
        To cover that case, introduce ContextHasMediaDevices custom IDL keyword.

        Covered by API test.

        * Modules/mediastream/NavigatorMediaDevices.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateRuntimeEnableConditionalString):
        * bindings/scripts/IDLAttributes.json:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::hasMediaDevices const):
        (WebCore::ScriptExecutionContext::hasServiceWorkerScheme const):
        * dom/ScriptExecutionContext.h:

2019-02-15  Youenn Fablet  <youenn@apple.com>

        WebSocket should not fire events after being stopped
        https://bugs.webkit.org/show_bug.cgi?id=194690

        Reviewed by Geoffrey Garen.

        dispatchOrQueueErrorEvent is scheduled using RunLoop::main().dispatch or dispatch_async.
        This makes it possible to dispatch an event while WebSocket is already stopped.
        Instead, use Document::postTask so that the task is only executed if WebSocket is not stopped.

        As a refactoring, make use of PendingActivity to keep track of setPendingActivity/unsetPendingActivity more easily.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::stop):
        (WebCore::WebSocket::connect):
        * Modules/websockets/WebSocket.h:

2019-02-15  Youenn Fablet  <youenn@apple.com>

        Performance should not fire events when its context is stopped
        https://bugs.webkit.org/show_bug.cgi?id=194689

        Reviewed by Alex Christensen.

        Stop the timer when its context is destroyed.
        Add an assertion to ensure the timer does not fire after context is destroyed.

        * page/Performance.cpp:
        (WebCore::Performance::stop):

2019-02-15  Alex Christensen  <achristensen@webkit.org>

        REGRESSION: ( r240978-r240985 ) [ iOS Release ] Layout Test imported/w3c/web-platform-tests/xhr/send-redirect-post-upload.htm is crashing
        https://bugs.webkit.org/show_bug.cgi?id=194523

        Reviewed by Geoffrey Garen.

        The scope of the FormCreationContext was limited to the scope of createHTTPBodyCFReadStream,
        so when it was used in formCreate it was lucky to get the same context if the stack hadn't been overwritten
        and if the FormData hadn't been freed.  Instead, keep it alive with new/delete like we do the FormStreamFields.
        A younger me should've noticed this when reviewing r218517.

        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::formCreate):
        (WebCore::createHTTPBodyCFReadStream):

2019-02-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241559 and r241566.
        https://bugs.webkit.org/show_bug.cgi?id=194710

        Causes layout test crashes under GuardMalloc (Requested by
        ryanhaddad on #webkit).

        Reverted changesets:

        "[WTF] Add environment variable helpers"
        https://bugs.webkit.org/show_bug.cgi?id=192405
        https://trac.webkit.org/changeset/241559

        "Unreviewed build fix for WinCairo Debug after r241559."
        https://trac.webkit.org/changeset/241566

2019-02-15  Youenn Fablet  <youenn@apple.com>

        Stop the endpoint synchronously in RTCPeerConnection::close
        https://bugs.webkit.org/show_bug.cgi?id=194688

        Reviewed by Eric Carlson.

        In the case where the peer connection is being closed, it was asynchronously stopping the endpoint.
        But the endpoint, before being stopped, could try to fire an event.
        If the context is gone in between, we end up with a null pointer dereference.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::close):

2019-02-15  Zalan Bujtas  <zalan@apple.com>

        [LFC] Out-of-flow box is never a float box
        https://bugs.webkit.org/show_bug.cgi?id=194704

        Reviewed by Antti Koivisto.

        We can't have it both ways. Absolute positioning wins.

        Test: fast/block/block-only/out-of-flow-is-never-float-box.html

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isFloatingPositioned const):
        (WebCore::Layout::Box::isLeftFloatingPositioned const):
        (WebCore::Layout::Box::isRightFloatingPositioned const):

2019-02-15  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Simplify GObject class name check
        https://bugs.webkit.org/show_bug.cgi?id=194537

        Reviewed by Michael Catanzaro.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::uriDecodeBinElementAddedCallback):
        Use G_OBJECT_TYPE_NAME() to filter out uridecodebin child
        elements.

2019-02-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor EditingStyle::textDirection to return an Optional<WritingDirection> instead of a bool
        https://bugs.webkit.org/show_bug.cgi?id=194686

        Reviewed by Ryosuke Niwa.

        Changes EditingStyle::textDirection to return an Optional<WritingDirection>, instead of taking a reference to
        the resulting WritingDirection. No change in behavior.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi):
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::textDirection const):
        (WebCore::EditingStyle::textDirectionForSelection):
        * editing/EditingStyle.h:

2019-02-10  Darin Adler  <darin@apple.com>

        Replace more uses of String::format with StringConcatenate (mostly non-Apple platform-specific cases)
        https://bugs.webkit.org/show_bug.cgi?id=194487

        Reviewed by Daniel Bates.

        * accessibility/win/AccessibilityObjectWrapperWin.cpp:
        (WebCore::AccessibilityObjectWrapper::accessibilityAttributeValue): Use makeString
        instead of String::format.

        * page/linux/ResourceUsageOverlayLinux.cpp:
        (WebCore::formatByteNumber): Use String::number instead of String::format.

        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:
        (WebCore::AudioSourceProviderGStreamer::AudioSourceProviderGStreamer):
        Use makeString instead of String::format.
        * platform/glib/UserAgentGLib.cpp:
        (WebCore::platformVersionForUAString): Ditto.
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::simpleBusMessageCallback): Ditto.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Ditto.
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::AppendPipeline): Ditto.
        (WebCore::AppendPipeline::handleStateChangeMessage): Ditto.
        (WebCore::AppendPipeline::resetParserState): Ditto.
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::load): Ditto.
        (WebCore::MediaPlayerPrivateGStreamerMSE::doSeek): Ditto.

        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::encodeImage): Use String::number instead of String::format.

        * platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp:
        (WebCore::GStreamerAudioCaptureSource::create): Use makeString instead of
        String::format.
        * platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.cpp:
        (WebCore::GStreamerCaptureDeviceManager::addDevice): Ditto.
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (WebCore::webkitMediaStreamSrcAddPad): Ditto.
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        (WebCore::GStreamerVideoCaptureSource::create): Ditto.
        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::verifySchemaVersion): Ditto.
        * platform/win/SearchPopupMenuDB.cpp:
        (WebCore::SearchPopupMenuDB::verifySchemaVersion): Ditto.

2019-02-15  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Decoding media-capabilities configuration initial support
        https://bugs.webkit.org/show_bug.cgi?id=191191

        Reviewed by Xabier Rodriguez-Calvar.

        This patch enables basic platform probing for GStreamer decoders,
        optionally using Hardware decoding capabilities. The previous code
        for decoders/demuxers probing partially duplicated between the MSE
        player and its parent class was moved to a new module called
        GStreamerRegistryScanner. There is one instance of it for the MSE player
        and one for the parent class.

        The scanner can check for the presence of the GstElement Hardware
        metadata classifier in decoders and thus advise the
        MediaEngineConfigurationFactoryGStreamer that hardware decoding is
        supported or not. This is only a first step though. The scanner
        should also probably attempt a NULL->READY transition on decoders
        to validate specific input caps are supported. As this might
        require changes in GStreamer, this part of the patch wasn't
        included.

        This patch is covered by the existing media tests.

        * platform/GStreamer.cmake: New files.
        * platform/graphics/MediaPlayer.cpp: Add support for converting
        SupportsType enum to string.
        (WebCore::convertEnumerationToString):
        * platform/graphics/MediaPlayer.h: Ditto.
        * platform/graphics/MediaPlayerEnums.h: Ditto.
        * platform/graphics/gstreamer/GStreamerCommon.cpp: Move
        gstRegistryHasElementForMediaType to GStreamerRegistryScanner.
        * platform/graphics/gstreamer/GStreamerCommon.h: Ditto.
        * platform/graphics/gstreamer/GStreamerRegistryScanner.cpp: Added.
        (WebCore::GStreamerRegistryScanner::singleton):
        (WebCore::GStreamerRegistryScanner::GStreamerRegistryScanner): Initialize
        supported mime-types and codecs from the GStreamer registry.
        (WebCore::GStreamerRegistryScanner::~GStreamerRegistryScanner): Free the element factories.
        (WebCore::GStreamerRegistryScanner::gstRegistryHasElementForMediaType):
        Check the input caps are supported, optionally using hardware
        device.
        (WebCore::GStreamerRegistryScanner::fillMimeTypeSetFromCapsMapping):
        Moved from MediaPlayerPrivateGStreamer{,MSE}.
        (WebCore::GStreamerRegistryScanner::initialize): Ditto.
        (WebCore::GStreamerRegistryScanner::supportsCodec const): Ditto.
        (WebCore::GStreamerRegistryScanner::supportsAllCodecs const): Ditto.
        (WebCore::GStreamerRegistryScanner::isDecodingSupported const): Check
        the given configuration is supported. For now hardware support is
        checked for video configurations only as it is quite uncommon
        anyway to have hardware-enabled audio decoders.
        * platform/graphics/gstreamer/GStreamerRegistryScanner.h: Added.
        (WebCore::GStreamerRegistryScanner::mimeTypeSet):
        (WebCore::GStreamerRegistryScanner::supportsContainerType const):
        (WebCore::GStreamerRegistryScanner::RegistryLookupResult::operator bool const):
        * platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.cpp: Added.
        (WebCore::createMediaPlayerDecodingConfigurationGStreamer):
        * platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.h: Added.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        Rely on new GStreamerRegistryScanner and add some debugging macros.
        (WebCore::MediaPlayerPrivateGStreamer::getSupportedTypes):
        (WebCore::MediaPlayerPrivateGStreamer::supportsType):
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp: Ditto. Also
        plug qtdemux for AAC containers, this is an explicit consequence
        of finer-grained codecs probing.
        (WebCore::AppendPipeline::AppendPipeline):
        (WebCore::AppendPipeline::parseDemuxerSrcPadCaps):
        * platform/graphics/gstreamer/mse/GStreamerRegistryScannerMSE.cpp: Added.
        (WebCore::GStreamerRegistryScannerMSE::singleton):
        (WebCore::GStreamerRegistryScannerMSE::GStreamerRegistryScannerMSE):
        * platform/graphics/gstreamer/mse/GStreamerRegistryScannerMSE.h: Added.
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        Rely on new GStreamerRegistryScanner and add some debugging macros.
        (WebCore::MediaPlayerPrivateGStreamerMSE::getSupportedTypes):
        (WebCore::MediaPlayerPrivateGStreamerMSE::supportsType):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:
        * platform/mediacapabilities/MediaEngineConfigurationFactory.cpp:
        (WebCore::factories): GStreamer support.

2019-02-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Occasional crash under WebCore::CSSStyleSheet::item called from Inspector
        https://bugs.webkit.org/show_bug.cgi?id=194671
        <rdar://problem/47628191>

        Reviewed by Devin Rousso.

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::item):
        A crash may happen if the m_childRuleCSSOMWrappers Vector gets out of
        sync with the m_contents list of rules. In particular if the wrappers
        vector is shorter than the rule list. We tried exercising code paths
        that modify these lists but were not able to reproduce the crash.
        To avoid a crash we can make this access safer and avoid the original
        overflow. At the same time we will keep and promote the assertion that
        would catch the lists getting out of sync in debug builds.

2019-02-14  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed build fix for WinCairo Debug after r241559.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlContext::CurlContext):

2019-02-14  Ross Kirsling  <ross.kirsling@sony.com>

        [WTF] Add environment variable helpers
        https://bugs.webkit.org/show_bug.cgi?id=192405

        Reviewed by Michael Catanzaro.

        * platform/NotImplemented.h:
        * platform/cocoa/SystemVersion.mm:
        (WebCore::createSystemMarketingVersion):
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::initializeGStreamer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/nicosia/NicosiaPaintingEngine.cpp:
        (Nicosia::PaintingEngine::create):
        * platform/graphics/texmap/TextureMapperFPSCounter.cpp:
        (WebCore::TextureMapperFPSCounter::TextureMapperFPSCounter):
        * platform/graphics/x11/PlatformDisplayX11.cpp:
        (WebCore::PlatformDisplayX11::create):
        * platform/gtk/RenderThemeWidget.cpp:
        (WebCore::RenderThemeScrollbar::RenderThemeScrollbar):
        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::ScrollbarThemeGtk::ScrollbarThemeGtk):
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlContext::CurlContext):
        (WebCore::EnvironmentVariableReader::read): Deleted.
        (WebCore::EnvironmentVariableReader::defined): Deleted.
        (WebCore::EnvironmentVariableReader::readAs): Deleted.
        (WebCore::EnvironmentVariableReader::sscanTemplate): Deleted.
        (WebCore::EnvironmentVariableReader::sscanTemplate<signed>): Deleted.
        (WebCore::EnvironmentVariableReader::sscanTemplate<unsigned>): Deleted.
        * platform/network/curl/NetworkStorageSessionCurl.cpp:
        (WebCore::defaultCookieJarPath):
        * platform/network/playstation/CurlSSLHandlePlayStation.cpp:
        (WebCore::getCACertPathEnv):
        * platform/network/win/CurlSSLHandleWin.cpp:
        (WebCore::getCACertPathEnv):
        * platform/text/hyphen/HyphenationLibHyphen.cpp:
        (WebCore::topLevelPath):
        (WebCore::webkitBuildDirectory):
        * platform/unix/LoggingUnix.cpp:
        (WebCore::logLevelString):
        * platform/win/LoggingWin.cpp:
        (WebCore::logLevelString):
        Utilize WTF::Environment where possible.

2019-02-14  Chris Dumez  <cdumez@apple.com>

        [PSON] Introduce a WebContent Process cache
        https://bugs.webkit.org/show_bug.cgi?id=194594
        <rdar://problem/46793397>

        Reviewed by Geoff Garen.

        Update localizable strings.

        * en.lproj/Localizable.strings:

2019-02-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241486.
        https://bugs.webkit.org/show_bug.cgi?id=194655

        causing API failures in builds (Requested by ShawnRoberts on
        #webkit).

        Reverted changeset:

        "[Cocoa] Media elements will restart network buffering just
        before suspending"
        https://bugs.webkit.org/show_bug.cgi?id=193691
        https://trac.webkit.org/changeset/241486

2019-02-13  Brian Burg  <bburg@apple.com>

        Web Inspector: don't include accessibility role in DOM.Node object payloads
        https://bugs.webkit.org/show_bug.cgi?id=194623
        <rdar://problem/36384037>

        Reviewed by Devin Rousso.

        Accessibility properties are complicated to fetch at all the points where we want to build and push nodes immediately.
        Turning on AX often indirectly causes style recalc and layout. This is bad because we are often building nodes in the
        first place due to a DOM node tree update (i.e., NodeInserted).

        It turns out that DOM.getAccessibilityPropertiesForNode is called every time we display
        the computed role in the Elements Tab > Nodes Sidebar > Accessibility Section. So it is not
        necessary to collect this information in a problematic way when initially pushing the node, as
        it will be updated anyway.

        No new tests, no change in behavior.

        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):

2019-02-14  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapse] Replaced boxes don't collapse through their margins
        https://bugs.webkit.org/show_bug.cgi?id=194622

        Reviewed by Antti Koivisto.

        Ensure that block replaced boxes don't collapse through their vertical margins. 

        Test: fast/block/block-only/block-replaced-with-vertical-margins.html

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginsCollapseThrough):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

2019-02-14  Zalan Bujtas  <zalan@apple.com>

        [LFC] Shrink-to-fit-width should be constrained by min/max width
        https://bugs.webkit.org/show_bug.cgi?id=194653

        Reviewed by Antti Koivisto.

        Use the fixed value of min-width/max-width to constrain the computed preferred width.

        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::constrainByMinMaxWidth):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::intrinsicWidthConstraints):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthConstraints const):

2019-02-13  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in DOMTimer::fired
        https://bugs.webkit.org/show_bug.cgi?id=194638

        Reviewed by Brent Fulgham.

        This patch continues the saga of hunting down timer related crashes after r239814, r225985, r227934.

        The crash was caused by the bug that we don't remove a DOMTimer from NestedTimersMap if a DOMTimer
        is created & installed inside another DOMTimer's callback (via execute call in DOMTimer::fired).

        Fixed the crash by using a Ref in NestedTimersMap. This will keep the timer alive until we exit
        from DOMTimer::fired. Because DOMTimer::fired always calls stopTracking() which clears the map
        we would not leak these DOM timers.

        We could, alternatively, use WeakPtr in NestedTimersMap but that would unnecessarily increase the
        size of DOMTimer for a very marginal benefit of DOMTimer objcets being deleted slightly earlier.
        Deleting itself in DOMTimer's destructor involves more logic & house keeping in the timer code,
        and is no longer the preferred approach when dealing with these classes of bugs in WebKit.

        Test: fast/dom/timer-destruction-during-firing.html

        * page/DOMTimer.cpp:
        (WebCore::NestedTimersMap::add):
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::fired):

2019-02-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Crash when inspecting an element that constantly changes visibility
        https://bugs.webkit.org/show_bug.cgi?id=194632
        <rdar://problem/48060258>

        Reviewed by Matt Baker and Devin Rousso.

        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::processAccessibilityChildren):
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
        Don't use rvalue-references as that was taking ownership and deleting
        the object we want to keep around. Instead simplify this to just use
        references so no ref counting changes happen.

2019-02-13  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash in handleMenuOpen
        https://bugs.webkit.org/show_bug.cgi?id=194627

        Reviewed by Zalan Bujtas.

        Tests run under libGuardMalloc will cause crashes.

        This list of objects is a Node list, not an Element list, so we were
        not removing some nodes when they were being deallocated.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::remove):

2019-02-13  Jer Noble  <jer.noble@apple.com>

        [Mac] PiP window can get "stuck" if PiP is closed while Safari window is minimized.
        https://bugs.webkit.org/show_bug.cgi?id=194621
        <rdar://problem/48002560>

        Reviewed by Eric Carlson.

        When Safari is minimized, no rAF() requests are executed. Don't gate responding to presentation
        change events in the media-controller.js on rAF().

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype._returnMediaLayerToInlineIfNeeded):

2019-02-13  John Wilander  <wilander@apple.com>

        Ignore Ad Click Attribution where source and destination are same-site
        https://bugs.webkit.org/show_bug.cgi?id=194620
        <rdar://problem/47890018>

        Reviewed by Jiewen Tan.

        Updated the existing test.

        We should not accept Ad Click Attribution requests where the site of the
        anchor tag and its addestination attribute are same-site. Such attributions
        don’t make sense (the site can track intra-site clicks through better means)
        and would just lead to increased memory use where are the pending
        attributions are stored.

        For ports that don't have access to the Public Suffix List, this patch
        only checks that the hosts don't match, i.e. not just eTLD+1.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAdClickAttribution const):
            Now returns WTF::nullopt if the current document and the
            addestination are same site. Also fixed a console message
            typo.

2019-02-13  Eric Carlson  <eric.carlson@apple.com> and Youenn Fablet  <youenn@apple.com>

        getUserMedia with an ideal deviceId constraint doesn't always select the correct device
        https://bugs.webkit.org/show_bug.cgi?id=193614

        Reviewed by Eric Carlson.

        Compute a fitness score based on constraints.
        For each constraint, a fitness score is computed from the distance.
        The smaller the distance, the higher the score.
        Fitness scores are then summed to give a device fitness score.
        Matching devices are then sorted according the fitness score.

        For important constraints, deviceId and facingMode, add a more important weight.
        This ensures that should any of these ideal constraints are set, they will be respected.

        Restrict our automatic setting of default constraints to not add a default ideal facingMode in case of existing deviceId constraint.
        Do not set a default ideal frameRate if width and height are already set.

        Covered by updated test.

        * platform/mediastream/MediaConstraints.cpp:
        (WebCore::FlattenedConstraint::set):
        (WebCore::MediaConstraints::setDefaultVideoConstraints):
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::fitnessDistance):
        (WebCore::RealtimeMediaSource::selectSettings):
        (WebCore::RealtimeMediaSource::supportsConstraints):
        (WebCore::RealtimeMediaSource::applyConstraints):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::validateRequestConstraints):

2019-02-13  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Add a hack to work around buggy video control library
        https://bugs.webkit.org/show_bug.cgi?id=194615
        <rdar://problem/46146946>

        Reviewed by Jer Noble.

        Test: media/ios/video-volume-ios-quirk.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setVolume): Change m_volume for one turn of the runloop.
        (WebCore::HTMLMediaElement::cancelPendingTasks): Clear the task queue used to restore m_volume.
        (WebCore::HTMLMediaElement::closeTaskQueues): Close it.
        * html/HTMLMediaElement.h:

2019-02-13  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Media elements will restart network buffering just before suspending
        https://bugs.webkit.org/show_bug.cgi?id=193691

        Reviewed by Eric Carlson.

        API Test: WebKit.ProcessSuspendMediaBuffering

        Allow the Page to suspend all media buffering in its child Documents.

        * dom/Document.cpp:
        (WebCore::Document::suspendAllMediaBuffering):
        (WebCore::Document::resumeAllMediaBuffering):
        * dom/Document.h:
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::dataBufferingPermitted const):
        (WebCore::MediaElementSession::suspendBuffering):
        (WebCore::MediaElementSession::resumeBuffering):
        (WebCore::MediaElementSession::bufferingSuspended const):
        * html/MediaElementSession.h:
        * page/Page.cpp:
        (WebCore::Page::suspendAllMediaBuffering):
        (WebCore::Page::resumeAllMediaBuffering):
        * page/Page.h:
        (WebCore::Page::mediaPlaybackIsSuspended const):
        (WebCore::Page::mediaBufferingIsSuspended const):
        (WebCore::Page::mediaPlaybackIsSuspended): Deleted.
        * platform/audio/PlatformMediaSession.h:
        (WebCore::PlatformMediaSession::suspendBuffering):
        (WebCore::PlatformMediaSession::resumeBuffering):
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::suspendAllMediaBufferingForDocument):
        (WebCore::PlatformMediaSessionManager::resumeAllMediaBufferingForDocument):
        * platform/audio/PlatformMediaSessionManager.h:

2019-02-13  Jer Noble  <jer.noble@apple.com>

        Entering fullscreen inside a shadow root will not set fullscreen pseudoclasses outside of root
        https://bugs.webkit.org/show_bug.cgi?id=194516
        <rdar://problem/44678353>

        Reviewed by Antoine Quint.

        Test: fast/shadow-dom/fullscreen-in-shadow-full-screen-ancestor.html

        When walking up the element ancestor chain, use parentElementInComposedTree() to
        walk past the shadow root boundary.

        * dom/Element.cpp:
        (WebCore::parentCrossingFrameBoundaries):

2019-02-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed, update localizable strings.

        * en.lproj/Localizable.strings:

2019-02-12  Jiewen Tan  <jiewen_tan@apple.com>

        Further restricting webarchive loads
        https://bugs.webkit.org/show_bug.cgi?id=194567
        <rdar://problem/47610130>

        Reviewed by Youenn Fablet.

        This patch futher restricts main frame webarchive loads to the followings:
        1) loaded by clients;
        2) loaded by drag;
        3) reloaded from any of the previous two.

        It moves setAlwaysAllowLocalWebarchive, which is used for testing only, from Document
        to FrameLoader such that the option is remembered during redirections.

        Covered by API tests.

        * dom/Document.h:
        (WebCore::Document::setAlwaysAllowLocalWebarchive): Deleted.
        (WebCore::Document::alwaysAllowLocalWebarchive const): Deleted.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::disallowWebArchive const):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setAllowsWebArchiveForMainFrame):
        (WebCore::DocumentLoader::allowsWebArchiveForMainFrame):
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::setIsRequestFromClientOrUserInput):
        (WebCore::FrameLoadRequest::isRequestFromClientOrUserInput):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::reload):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::setAlwaysAllowLocalWebarchive):
        (WebCore::FrameLoader::alwaysAllowLocalWebarchive const):
        * page/DragController.cpp:
        (WebCore::DragController::performDragOperation):
        * testing/Internals.cpp:
        (WebCore::Internals::setAlwaysAllowLocalWebarchive const):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-02-13  Jer Noble  <jer.noble@apple.com>

        Null-deref crash at SourceBufferPrivateAVFObjC::outputObscuredDueToInsufficientExternalProtectionChanged()
        https://bugs.webkit.org/show_bug.cgi?id=194613
        <rdar://problem/48023912>

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::outputObscuredDueToInsufficientExternalProtectionChanged):

2019-02-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix unused variable warnings after r241148/r241251
        https://bugs.webkit.org/show_bug.cgi?id=194348
        <rdar://problem/47566449>

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveRenderingError):
        (WebCore::SourceBuffer::evictCodedFrames):
        (WebCore::SourceBuffer::provideMediaData):

2019-02-13  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION: [ Mac Debug WK2 ] Layout Test storage/indexeddb/key-type-infinity-private.html is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=194413
        <rdar://problem/47897254>

        Reviewed by Brady Eidson.

        IDB clients expected transaction operations to be executed in order, but in 
        UniqueIDBDatabase::immediateCloseForUserDelete, callbacks in callback map were errored out randomly.
        This patch added a callback queue to UniqueIDBDatabase to make sure callbacks will be called in the same order
        as IDB Server receives the request.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::storeCallbackOrFireError):
        (WebCore::IDBServer::UniqueIDBDatabase::immediateCloseForUserDelete):
        (WebCore::IDBServer::UniqueIDBDatabase::performErrorCallback):
        (WebCore::IDBServer::UniqueIDBDatabase::performKeyDataCallback):
        (WebCore::IDBServer::UniqueIDBDatabase::performGetResultCallback):
        (WebCore::IDBServer::UniqueIDBDatabase::performGetAllResultsCallback):
        (WebCore::IDBServer::UniqueIDBDatabase::performCountCallback):
        (WebCore::IDBServer::UniqueIDBDatabase::forgetErrorCallback):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

2019-02-13  John Wilander  <wilander@apple.com>

        Store Ad Click Attribution requests in the network process
        https://bugs.webkit.org/show_bug.cgi?id=194510
        <rdar://problem/47650118>

        Reviewed by Alex Christensen and Daniel Bates.

        Test: http/tests/adClickAttribution/store-ad-click-attribution.html

        This patch adds support functions for validation and storage of
        WebCore::AdClickAttribution objects. It also adds WTF::HashTraits so that
        WebCore::AdClickAttribution::Source and WebCore::AdClickAttribution::Destination
        can be used in a HashMap.

        * loader/AdClickAttribution.cpp:
        (WebCore::AdClickAttribution::toString const):
        * loader/AdClickAttribution.h:
        (WebCore::AdClickAttribution::Source::operator== const):
        (WebCore::AdClickAttribution::Source::deletedValue):
        (WebCore::AdClickAttribution::Source::constructDeletedValue):
        (WebCore::AdClickAttribution::Source::deleteValue):
        (WebCore::AdClickAttribution::Source::isDeletedValue const):
        (WebCore::AdClickAttribution::SourceHash::hash):
        (WebCore::AdClickAttribution::SourceHash::equal):
        (WebCore::AdClickAttribution::Destination::operator== const):
        (WebCore::AdClickAttribution::Destination::matches const):
            This convenience function allows matching of a WTF::URL object.
        (WebCore::AdClickAttribution::Destination::deletedValue):
        (WebCore::AdClickAttribution::Destination::constructDeletedValue):
        (WebCore::AdClickAttribution::Destination::deleteValue):
        (WebCore::AdClickAttribution::Destination::isDeletedValue const):
        (WebCore::AdClickAttribution::DestinationHash::hash):
        (WebCore::AdClickAttribution::DestinationHash::equal):
        (WebCore::AdClickAttribution::source const):
        (WebCore::AdClickAttribution::destination const):
            Getters added to support mapped storage based on source and destination.
        (WTF::HashTraits<WebCore::AdClickAttribution::Source>::emptyValue):
        (WTF::HashTraits<WebCore::AdClickAttribution::Source>::constructDeletedValue):
        (WTF::HashTraits<WebCore::AdClickAttribution::Source>::isDeletedValue):
        (WTF::HashTraits<WebCore::AdClickAttribution::Destination>::emptyValue):
        (WTF::HashTraits<WebCore::AdClickAttribution::Destination>::constructDeletedValue):
        (WTF::HashTraits<WebCore::AdClickAttribution::Destination>::isDeletedValue):
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::adClickAttribution const):
        (WebCore::NavigationAction::adClickAttribution): Deleted.
            Corrected the constness of this function.

2019-02-13  Eric Carlson  <eric.carlson@apple.com>

        Revert r240434
        https://bugs.webkit.org/show_bug.cgi?id=194600
        <rdar://problem/48044566>

        Reviewed by Brent Fulgham.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setVolume):
        (WebCore::HTMLMediaElement::mediaPlayerVolumeChanged):
        (WebCore::HTMLMediaElement::updateVolume):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVolume):

2019-02-13  Alex Christensen  <achristensen@webkit.org>

        Stop using setDefersLoading from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=194315

        Reviewed by Jer Noble.

        That is what CompletionHandlers are for.

        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResource::responseReceived):
        (WebCore::MediaResource::setDefersLoading): Deleted.
        * loader/MediaResourceLoader.h:
        * platform/graphics/PlatformMediaResourceLoader.h:
        (WebCore::PlatformMediaResourceClient::responseReceived):
        (WebCore::PlatformMediaResource::stop):
        (WebCore::PlatformMediaResource::setDefersLoading): Deleted.
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (WebCore::WebCoreNSURLSessionDataTaskClient::responseReceived):
        (-[WebCoreNSURLSessionDataTask resource:receivedResponse:completionHandler:]):
        (-[WebCoreNSURLSessionDataTask _setDefersLoading:]): Deleted.
        (-[WebCoreNSURLSessionDataTask resource:receivedResponse:]): Deleted.

2019-02-13  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Switch to CVPixelBufferGetBytesPerRow() for calculating CVPixelBuffer base address size.
        https://bugs.webkit.org/show_bug.cgi?id=194580
        <rdar://problem/42727739>

        Reviewed by Eric Carlson.

        * platform/cocoa/CoreVideoSoftLink.cpp:
        * platform/cocoa/CoreVideoSoftLink.h:
        * platform/graphics/cv/PixelBufferConformerCV.cpp:
        (WebCore::CVPixelBufferGetBytePointerCallback):
        (WebCore::PixelBufferConformerCV::createImageFromPixelBuffer):

2019-02-13  Antoine Quint  <graouts@apple.com>

        Support simulated mouse events on iOS based on a PlatformTouchEvent
        https://bugs.webkit.org/show_bug.cgi?id=194501
        <rdar://problem/46910790>

        Reviewed by Dean Jackson.

        Add support for two new internal runtime flags to control whether simulated mouse events should be dipatched along with touch events and
        whether simulated mousemove events dispatched should automatically trigger the behavior preventDefault() would also trigger. To facilitate
        that, we allow for a MouseEvent to be created, much like a PointerEvent, based on a PlatformTouchEvent. Then, we set a flag on Event within
        EventTarget::innerInvokeEventListeners() to see whether any page code has been evaluated as a result of a mousemove event being dispatched.
        Finally, we also track mouse events when invalidating touch regions provided the required internal runtime flag is on.

        Test: fast/events/touch/ios/mouse-events-dispatch-with-touch.html

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Event.cpp:
        * dom/Event.h:
        (WebCore::Event::hasEncounteredListener const):
        (WebCore::Event::setHasEncounteredListener):
        * dom/EventNames.h:
        (WebCore::EventNames::isTouchRelatedEventType const):
        (WebCore::EventNames::touchRelatedEventNames const):
        (WebCore::EventNames::extendedTouchRelatedEventNames const):
        (WebCore::EventNames::isTouchEventType const): Deleted.
        (WebCore::EventNames::touchAndPointerEventNames const): Deleted.
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::innerInvokeEventListeners):
        * dom/MouseEvent.h:
        * dom/Node.cpp:
        (WebCore::Node::moveNodeToNewDocument):
        (WebCore::tryAddEventListener):
        (WebCore::tryRemoveEventListener):
        (WebCore::Node::defaultEventHandler):
        * dom/ios/MouseEventIOS.cpp: Added.
        (WebCore::mouseEventType):
        (WebCore::MouseEvent::create):
        * dom/ios/PointerEventIOS.cpp:
        (WebCore::pointerEventType):
        (WebCore::PointerEvent::create):
        (WebCore::eventType): Deleted.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        * page/EventHandler.h:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::mouseEventsSimulationEnabled const):
        (WebCore::RuntimeEnabledFeatures::setMouseEventsSimulationEnabled):
        (WebCore::RuntimeEnabledFeatures::mousemoveEventHandlingPreventsDefaultEnabled const):
        (WebCore::RuntimeEnabledFeatures::setMousemoveEventHandlingPreventsDefaultEnabled):

2019-02-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [FreeType] Unable to render some Hebrew characters
        https://bugs.webkit.org/show_bug.cgi?id=194498

        Reviewed by Michael Catanzaro.

        We are failing to find a font for some of the combining character sequences because normalization is failing due
        to overflow error. In case of overflow, normalize returns the required length for the normalized characters, so
        we should handle that case to resize the output buffer and try again.

        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::FontCascade::fontForCombiningCharacterSequence const):

2019-02-13  Ryosuke Niwa  <rniwa@webkit.org>

        Release assert in PolicyCheckIdentifier::isValidFor via WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction
        https://bugs.webkit.org/show_bug.cgi?id=194582

        Reviewed by Antti Koivisto.

        Check the zero-ness of m_policyCheck first so that we can differentiate process ID being wrong
        from the non-generated identifier being sent to us as it was the case in this failure.

        * loader/PolicyChecker.cpp:
        (WebCore::PolicyCheckIdentifier::isValidFor):

2019-02-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241273.
        https://bugs.webkit.org/show_bug.cgi?id=194579

        This change is causing a flaky assertion failure crash in High
        Sierra Debug (Requested by ShawnRoberts on #webkit).

        Reverted changeset:

        "Stop using setDefersLoading from WebCore"
        https://bugs.webkit.org/show_bug.cgi?id=194315
        https://trac.webkit.org/changeset/241273

2019-02-12  Mark Lam  <mark.lam@apple.com>

        Remove unnecessary null check in bindings.
        https://bugs.webkit.org/show_bug.cgi?id=194581

        Reviewed by Yusuke Suzuki.

        It is always safe to call visitor.containsOpaqueRoot(root) with a null root pointer.
        It will just return false.  Since we don't expect the root pointer to be null in
        the common case, having a null check here is also not optimal.  We'll remove this
        unneeded null check.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableOwner::isReachableFromOpaqueRoots):

2019-02-12  Rob Buis  <rbuis@igalia.com>

        Align with Fetch on data: URLs
        https://bugs.webkit.org/show_bug.cgi?id=182325

        Reviewed by Alex Christensen.

        The MIME type part of the data url should be serialized as
        specified in step 3 under "data" [1].

        Test: web-platform-tests/fetch/data-urls/processing.any.js

        [1] https://fetch.spec.whatwg.org/#concept-scheme-fetch 

        * platform/network/DataURLDecoder.cpp:
        (WebCore::DataURLDecoder::parseMediaType):

2019-02-12  Alex Christensen  <achristensen@webkit.org>

        Build fix after r241320
        https://bugs.webkit.org/show_bug.cgi?id=194271

        * page/Frame.cpp:
        (WebCore::Frame::requestDOMPasteAccess):

2019-02-12  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Remove WebGPUBufferDescriptor/Usage and use GPU versions
        https://bugs.webkit.org/show_bug.cgi?id=194552

        Reviewed by Dean Jackson.

        WebGPUBufferDescriptor/Usage have been renamed to GPUBufferDescriptor/Usage in the Web GPU API.
        Consolidate the two versions of these classes in our implementation.

        Affected layout tests updated with new names. No change in behavior.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webgpu/GPUBufferDescriptor.idl: Renamed from Source/WebCore/Modules/webgpu/WebGPUBufferDescriptor.idl.
        * Modules/webgpu/GPUBufferUsage.idl: Renamed from Source/WebCore/Modules/webgpu/WebGPUBufferUsage.idl.
        * Modules/webgpu/WebGPUBufferUsage.h: Removed.
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createBuffer const):
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDevice.idl:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * platform/graphics/gpu/GPUBufferDescriptor.h: Moved out GPUBufferUsage.
        * platform/graphics/gpu/GPUBufferUsage.h: Moved from GPUBufferDescriptor.h.

2019-02-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, try to fix the internal iOS build after r241321

        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:

2019-02-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Allow pages to trigger programmatic paste from script on iOS
        https://bugs.webkit.org/show_bug.cgi?id=194271
        <rdar://problem/47808810>

        Reviewed by Tim Horton.

        Tests: editing/pasteboard/ios/dom-paste-confirmation.html
               editing/pasteboard/ios/dom-paste-consecutive-confirmations.html
               editing/pasteboard/ios/dom-paste-rejection.html
               editing/pasteboard/ios/dom-paste-requires-user-gesture.html

        * dom/UserGestureIndicator.cpp:
        (WebCore::UserGestureIndicator::~UserGestureIndicator):

        Reset a gesture token's DOM paste access when exiting the scope of a user gesture. This prevents DOM paste
        access permissions from leaking into `setTimeout()` callbacks when we forward user gesture tokens.

        * dom/UserGestureIndicator.h:
        (WebCore::UserGestureToken::resetDOMPasteAccess):

2019-02-12  Chris Fleizach  <cfleizach@apple.com>

        AX: IsolatedTree: Implement more attributes
        https://bugs.webkit.org/show_bug.cgi?id=193911
        <rdar://problem/47599217>

        Reviewed by Daniel Bates.

        Make use of new HIServices SPI to use a secondary AX thread.
        Store root node/focused node status in IsolatedTree rather than on the element.
        Implement the following attributes: children, parent, isIgnored, isTree, isTreeItem, relativeFrame, speechHint, title, description.
        Implement hit-testing using relative-frames.
        Ensure that WKAccessibilityWebPageObject queries happen on main thread when they need to.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::generateIsolatedAccessibilityTree):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::focusedUIElementForPage):
        * accessibility/AccessibilityAttachment.cpp:
        (WebCore::AccessibilityAttachment::accessibilityText const):
        (WebCore::AccessibilityAttachment::accessibilityText): Deleted.
        * accessibility/AccessibilityAttachment.h:
        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::accessibilityText const):
        (WebCore::AccessibilityImageMapLink::accessibilityText): Deleted.
        * accessibility/AccessibilityImageMapLink.h:
        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControl::accessibilityText const):
        (WebCore::AccessibilityMediaControl::accessibilityText): Deleted.
        * accessibility/AccessibilityMediaControls.h:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::accessibilityText const):
        (WebCore::AccessibilityNodeObject::accessibilityText): Deleted.
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::convertFrameToSpace const):
        (WebCore::AccessibilityObject::relativeFrame const):
        (WebCore::AccessibilityObject::elementAccessibilityHitTest const):
        (WebCore::AccessibilityObject::focusedUIElement const):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::accessibilityText const):
        (WebCore::AccessibilityObject::isLink const): Deleted.
        (WebCore::AccessibilityObject::isImage const): Deleted.
        (WebCore::AccessibilityObject::isAttachment const): Deleted.
        (WebCore::AccessibilityObject::isFileUploadButton const): Deleted.
        (WebCore::AccessibilityObject::isImageMapLink const): Deleted.
        (WebCore::AccessibilityObject::isMediaControlLabel const): Deleted.
        (WebCore::AccessibilityObject::isTree const): Deleted.
        (WebCore::AccessibilityObject::isTreeItem const): Deleted.
        (WebCore::AccessibilityObject::isScrollbar const): Deleted.
        (WebCore::AccessibilityObject::accessibilityHitTest const): Deleted.
        (WebCore::AccessibilityObject::accessibilityText): Deleted.
        (WebCore::AccessibilityObject::roleValue const): Deleted.
        (WebCore::AccessibilityObject::wrapper const): Deleted.
        * accessibility/AccessibilityObjectInterface.h: Replaced.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isTabItemSelected const):
        (WebCore::AccessibilityRenderObject::remoteSVGElementHitTest const):
        (WebCore::AccessibilityRenderObject::elementAccessibilityHitTest const):
        (WebCore::AccessibilityRenderObject::accessibilityHitTest const):
        (WebCore::AccessibilityRenderObject::selectedChildren):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilitySVGElement.cpp:
        (WebCore::AccessibilitySVGElement::accessibilityText const):
        (WebCore::AccessibilitySVGElement::accessibilityText): Deleted.
        * accessibility/AccessibilitySVGElement.h:
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::accessibilityHitTest const):
        * accessibility/AccessibilityScrollView.h:
        * accessibility/ios/AccessibilityObjectIOS.mm:
        (WebCore::AccessibilityObject::fileUploadButtonReturnsValueInTitle const):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper fileUploadButtonReturnsValueInTitle]): Deleted.
        * accessibility/isolatedtree: Replaced.
        * accessibility/isolatedtree/AXIsolatedTree.cpp: Added.
        (WebCore::AXIsolatedTree::treePageCache):
        (WebCore::AXIsolatedTree::AXIsolatedTree):
        (WebCore::AXIsolatedTree::nodeInTreeForID):
        (WebCore::AXIsolatedTree::nodeForID const):
        (WebCore::AXIsolatedTree::focusedUIElement):
        (WebCore::AXIsolatedTree::setRootNodeID):
        (WebCore::AXIsolatedTree::setFocusedNodeID):
        (WebCore::AXIsolatedTree::setInitialRequestInProgress):
        (WebCore::AXIsolatedTree::applyPendingChanges):
        * accessibility/isolatedtree/AXIsolatedTree.h: Added.
        * accessibility/isolatedtree/AXIsolatedTreeNode.cpp: Added.
        (WebCore::AXIsolatedTreeNode::AXIsolatedTreeNode):
        (WebCore::AXIsolatedTreeNode::~AXIsolatedTreeNode):
        (WebCore::AXIsolatedTreeNode::initializeAttributeData):
        (WebCore::AXIsolatedTreeNode::setProperty):
        (WebCore::AXIsolatedTreeNode::setParent):
        (WebCore::AXIsolatedTreeNode::setTreeIdentifier):
        (WebCore::AXIsolatedTreeNode::focusedUIElement const):
        (WebCore::AXIsolatedTreeNode::parentObjectInterfaceUnignored const):
        (WebCore::AXIsolatedTreeNode::accessibilityHitTest const):
        (WebCore::AXIsolatedTreeNode::tree const):
        (WebCore::AXIsolatedTreeNode::rectAttributeValue const):
        (WebCore::AXIsolatedTreeNode::stringAttributeValue const):
        * accessibility/isolatedtree/AXIsolatedTreeNode.h: Added.
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::associateIsolatedTreeNode):
        * accessibility/mac/AccessibilityObjectBase.mm: Added.
        (WebCore::AccessibilityObject::speechHintAttributeValue const):
        (WebCore::AccessibilityObject::descriptionAttributeValue const):
        (WebCore::AccessibilityObject::titleAttributeValue const):
        (WebCore::AccessibilityObject::helpTextAttributeValue const):
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::fileUploadButtonReturnsValueInTitle const):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (addChildToArray):
        (convertToNSArray):
        (-[WebAccessibilityObjectWrapperBase isolatedTreeNode]):
        (-[WebAccessibilityObjectWrapperBase detach]):
        (-[WebAccessibilityObjectWrapperBase updateObjectBackingStore]):
        (-[WebAccessibilityObjectWrapperBase accessibilityObject]):
        (-[WebAccessibilityObjectWrapperBase baseAccessibilityTitle]):
        (-[WebAccessibilityObjectWrapperBase axBackingObject]):
        (-[WebAccessibilityObjectWrapperBase baseAccessibilityDescription]):
        (-[WebAccessibilityObjectWrapperBase baseAccessibilitySpeechHint]):
        (-[WebAccessibilityObjectWrapperBase baseAccessibilityHelpText]):
        (convertPathToScreenSpaceFunction):
        (-[WebAccessibilityObjectWrapperBase convertRectToSpace:space:]):
        (-[WebAccessibilityObjectWrapperBase ariaLandmarkRoleDescription]):
        (-[WebAccessibilityObjectWrapperBase titleTagShouldBeUsedInDescriptionField]): Deleted.
        (-[WebAccessibilityObjectWrapperBase fileUploadButtonReturnsValueInTitle]): Deleted.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper IGNORE_WARNINGS_END]):
        (-[WebAccessibilityObjectWrapper childrenVectorSize]):
        (-[WebAccessibilityObjectWrapper childrenVectorArray]):
        (-[WebAccessibilityObjectWrapper position]):
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper roleDescription]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilityFocusedUIElement]):
        (-[WebAccessibilityObjectWrapper accessibilityHitTest:]):
        (-[WebAccessibilityObjectWrapper accessibilityIndexOfChild:]):
        (-[WebAccessibilityObjectWrapper accessibilityArrayAttributeCount:]):
        (-[WebAccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):

2019-02-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Allow pages to trigger programmatic paste from script on iOS
        https://bugs.webkit.org/show_bug.cgi?id=194271
        <rdar://problem/47808810>

        Reviewed by Ryosuke Niwa.

        Add support for allowing script to trigger programmatic paste commands. Currently on macOS and iOS, the ability
        to trigger programmatic paste (i.e. `document.execCommand('Paste');`) is disabled by default, such that
        execCommand is simply a no-op that returns false. This policy is a privacy measure (common among other major
        browsers) that prevents untrusted web content from sniffing content from the system pasteboard (even on user
        interaction, since unintended user interaction occasionally happens as well!).

        In order to make it possible for web pages to programmatically paste without opening the door to privacy and
        security issues, we make paste commands triggered from bindings present platform UI on iOS, in the form of a
        callout bar with the single option to paste. This UI is dismissed upon any user interaction; furthermore, any
        user interaction short of explicitly triggering the "Paste" action subsequently prevents the page from executing
        the paste (and causes execCommand to return false). However, if the paste action is chosen by the user, we
        instead follow through with the programmatic paste command.

        New tests to come in a followup patch.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMPasteAccessPolicy.h: Added.
        * dom/UserGestureIndicator.h:
        (WebCore::UserGestureToken::domPasteAccessPolicy const):
        (WebCore::UserGestureToken::didRequestDOMPasteAccess):

        Add helpers on UserGestureToken to update and query the current DOM paste access policy. The access policies are
        "NotRequestedYet" (i.e. pending a response from the user), "Granted" (the user has granted DOM paste access to
        the page), or "Denied" (the user has prevented the page from reading the contents of the clipboard). When DOM
        paste access is granted or rejected, make this decision sticky until the end of the current user gesture.

        * editing/EditorCommand.cpp:
        (WebCore::executePaste):
        (WebCore::executePasteAndMatchStyle):
        (WebCore::executePasteAsPlainText):
        (WebCore::executePasteAsQuotation):

        When executing a paste command where the source is DOM bindings, request DOM paste if needed before proceeding
        with the paste.

        (WebCore::supportedPaste):
        * loader/EmptyClients.cpp:
        * page/EditorClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::requestDOMPasteAccess):

        Add a helper method that requests access to the clipboard on behalf of script when pasting.

        * page/Frame.h:
        * page/Settings.yaml:

        Introduce a new WebCore setting, used to gate DOM paste access requests.

2019-02-12  Alex Christensen  <achristensen@webkit.org>

        Remove setDefersLoading infrastructure from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=194506

        Reviewed by Brady Eidson.

        setDefersLoading is inherently racy from WebCore to the NetworkProcess,
        it adds unwanted complexity to the initialization and use of network objects,
        and it has led to many unrecoverable hang bugs over the years.
        We needed to force it into WebKit2 to transition some existing clients who relied on it,
        but we have recently finished transitioning those clients to other solutions, mostly
        completion handlers.

        * inspector/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::setJavaScriptPaused):

2019-02-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix build warnings after content extensions enablement
        https://bugs.webkit.org/show_bug.cgi?id=193622
        <rdar://problem/47982850>

        * contentextensions/DFABytecode.h:
        (WebCore::ContentExtensions::instructionSizeWithArguments):
        * contentextensions/DFABytecodeCompiler.h:
        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::URLFilterParser::statusString):

2019-02-12  Justin Fan  <justin_fan@apple.com>

        [Web GPU] DepthStencilAttachment implementation
        https://bugs.webkit.org/show_bug.cgi?id=194458
        <rdar://problem/47932446>

        Reviewed by Dean Jackson.

        Implement ability to provide a depth attachment to the render pass encoder. Also implement
        GPULoad/StoreOp and update color attachments' implementation for full functionality.

        Test: webgpu/depth-enabled-triangle-strip.html

        Update project files for new symbols:
        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/webgpu/GPUColor.idl: Renamed from WebGPUColor.idl
        * Modules/webgpu/GPULoadOp.idl: Added. Interface for attachment operation enum.
        * Modules/webgpu/GPUStoreOp.idl: Ditto.
        * Modules/webpug/WebGPUColor.h: Removed.
        * Modules/webgpu/WebGPUCommandBuffer.cpp: Refactored descriptor validation logic out of this file.
        (WebCore::WebGPUCommandBuffer::beginRenderPass):
        * Modules/webgpu/WebGPURenderPassDescriptor.cpp: Added. Now owns code for validating descriptors.
        (WebCore::WebGPURenderPassDescriptor::validateAndConvertToGPUVersion const):
        * Modules/webgpu/WebGPURenderPassColorAttachmentDescriptor.h/idl: Removed. Code moved into WebGPURenderPassDescriptor.
        * Modules/webgpu/WebGPURenderPassDescriptor.h: Move sub-descriptor definitions into this file.
        * Modules/webgpu/WebGPURenderPassDescriptor.idl: Ditto.
        * Modules/webgpu/WebGPURenderPipelineDescriptor.h: Make depthStencilState optional to match API update.
        * Modules/webgpu/WebGPURenderPipelineDescriptor.idl: Ditto.
        * Modules/webgpu/WebGPUTextureView.h:
        * platform/graphics/gpu/GPULoadOp.h: Added.
        * platform/graphics/gpu/GPURenderPassColorAttachmentDescriptor.h: Removed (moved into GPURenderPassDescriptor).
        * platform/graphics/gpu/GPURenderPassDescriptor.h: Mirror WebGPU* changes.
        * platform/graphics/gpu/GPURenderPipelineDescriptor.h: Make depthStencilState optional.
        (WebCore::GPURenderPipelineDescriptor::GPURenderPipelineDescriptor):
        * platform/graphics/gpu/GPUStoreOp.h: Added.
        * platform/graphics/gpu/GPUTexture.h:
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::loadActionForGPULoadOp): Added.
        (WebCore::storeActionForGPUStoreOp): Added.
        (WebCore::populateMtlColorAttachmentsArray): Added. Create all expected color attachments, rather than just the first.
        (WebCore::populateMtlDepthStencilAttachment): Added.
        (WebCore::GPURenderPassEncoder::create):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm: Make depthStencilState optional.
        (WebCore::GPURenderPipeline::create):

2019-02-12  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r238955, r240494): Soft-linking optional Lookup.framework triggers release assertion when missing
        <https://webkit.org/b/194529>
        <rdar://problem/47924449>

        Reviewed by Eric Carlson.

        * SourcesCocoa.txt:
        - Do not include DataDetectorsCoreSoftLink.mm in unified
          sources.
        * WebCore.xcodeproj/project.pbxproj:
        - Add DataDetectorsCoreSoftLink.mm to the WebCore target now
          that it isn't part of the unifed sources.
        * platform/cocoa/DataDetectorsCoreSoftLink.mm:
        - Switch from using SOFT_LINK_PRIVATE_FRAMEWORK_OPTIONAL() to
          SOFT_LINK_PRIVATE_FRAMEWORK_FOR_SOURCE() when linking
          DataDetectorsCore.framework. None of the other macros assume
          this framework is optional, and it was likely made optional
          originally because the framework was new to iOS and thus
          didn't exist on older versions.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        - Change use of SOFT_LINK_CLASS_FOR_SOURCE() macros to
          SOFT_LINK_CLASS() since the latter can only be used with
          SOFT_LINK_FRAMEWORK_OPTIONAL(AVFoundation).  This broke after
          the fix for <wtf/SoftLinking.h> was applied.

2019-02-12  Youenn Fablet  <youenn@apple.com>

        Make use of is<SubresourceLoader>
        https://bugs.webkit.org/show_bug.cgi?id=194541

        Reviewed by Alex Christensen.

        No change of behavior.

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::didReceiveResponse):
        * loader/SubresourceLoader.h:
        (isType):

2019-02-12  Mark Lam  <mark.lam@apple.com>

        Add some null checks in JSNodeCustom.h's root() and generated isReachableFromOpaqueRoots() functions.
        https://bugs.webkit.org/show_bug.cgi?id=194530
        <rdar://problem/47973274>

        Reviewed by Chris Dumez.

        This is needed to fix a null pointer dereference that arises from the following scenario:
        1. a Document detaches from its StyleSheetList.
        2. the JSStyleSheetList that is associated with the detached StyleSheetList has yet
           to be scanned and collected by the GC.
        3. the GC eventually looks for the opaque root of the StyleSheetList's owner, and
           discovers a null owner pointer.

        This patch fixes this issue by applying the following null checks:

        1. Add a null check in JSNodeCustom.h's root().

           root() is called from a isReachableFromOpaqueRoots() generated by CodeGeneratorJS.pm.
           isReachableFromOpaqueRoots() calls a ownerNode() method and passes its result
           to root().  However, depending on which class the ownerNode() method belongs to,
           it can either return a pointer or a reference.  The null check only makes sense
           in the pointer case.

           To accommodate the 2 forms, root() itself is has an overload that takes a
           reference instead of a pointer.

           Since CodeGeneratorJS.pm can't tell what the generated class' ownerNode()
           returns, it can't discern when the result is a pointer and apply the null check.
           Instead, we just add the null check to the version of root() that takes a
           pointer.  If the node pointer is null, we'll return a null opaque root.

        2. Fix CodeGeneratorJS.pm to null check the opaque root before using it.

        * bindings/js/JSNodeCustom.h:
        (WebCore::root):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableOwner::isReachableFromOpaqueRoots):

2019-02-12  Andy Estes  <aestes@apple.com>

        [iOSMac] Enable Parental Controls Content Filtering
        https://bugs.webkit.org/show_bug.cgi?id=194521
        <rdar://39732376>

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:
        * platform/ContentFilterUnblockHandler.h:
        * platform/cocoa/ContentFilterUnblockHandlerCocoa.mm:
        * platform/cocoa/ParentalControlsContentFilter.mm:

2019-02-11  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; add a HAVE_CELESTIAL guard around Celestial framework usage.

        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::providePresentingApplicationPIDIfNecessary):

2019-02-12  Antti Koivisto  <antti@apple.com>

        Crash in WebCore::ScrollingTree::updateTreeFromStateNode
        https://bugs.webkit.org/show_bug.cgi?id=194538
        <rdar://problem/47841926>

        Reviewed by Zalan Bujtas.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):

        Make sure we don't leave node entry behind in m_nodeMap in case we failed to add it to the parent.

2019-02-12  Zalan Bujtas  <zalan@apple.com>

        [LFC] Remove redundant InlineFormattingContext::computeBorderAndPadding
        https://bugs.webkit.org/show_bug.cgi?id=194540

        Reviewed by Antti Koivisto.

        Use FormattingContext::computeBorderAndPadding instead.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeBorderAndPadding const):
        * layout/FormattingContext.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeBorderAndPadding const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:

2019-02-12  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add intrinsic width support for float boxes.
        https://bugs.webkit.org/show_bug.cgi?id=194528

        Reviewed by Antti Koivisto.

        This patch implements a very simple float box support for intrinsic width.

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthConstraints const):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFloatBox const):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForInlineBlock const):
        (WebCore::Layout::InlineFormattingContext::computeMargin const):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingContextRoot const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:

2019-02-12  Rob Buis  <rbuis@igalia.com>

        Implement serializing in MIME type parser
        https://bugs.webkit.org/show_bug.cgi?id=193909

        Reviewed by Darin Adler.

        Implement serializing in MIME type parser [1], to preserve the parameter
        order the Vector m_parameterNames is introduced, since HashMaps do not
        guarantee any order.

        Test: ParsedContentType.Serialize

        [1] https://mimesniff.spec.whatwg.org/#serializing-a-mime-type

        * platform/network/ParsedContentType.cpp:
        (WebCore::skipSpaces):
        (WebCore::parseQuotedString):
        (WebCore::ParsedContentType::parseContentType):
        (WebCore::ParsedContentType::parameterValueForName const):
        (WebCore::ParsedContentType::parameterCount const):
        (WebCore::ParsedContentType::setContentType):
        (WebCore::ParsedContentType::setContentTypeParameter):
        (WebCore::ParsedContentType::serialize const):
        * platform/network/ParsedContentType.h:

2019-02-08  Chris Fleizach  <cfleizach@apple.com>

        AXObjectCache::childrenChanged shouldn't update layout or style during another style recalc
        https://bugs.webkit.org/show_bug.cgi?id=182280
        <rdar://problem/37018386>

        Reviewed by Alan Bujtas.

        Remove the possibility that changing children calls back into updating layout by
        handling children changes in a deferred manner.

        This follows the same architecture as many other deferred changes, but also requires us to check deferred changes
        in updateBackingStore, because things like aria-hidden changes won't trigger a layout, but will require us to update children.

        A few tests had to be modified to no longer change the tree and then check the children immediately. 

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::childrenChanged):
        (WebCore::AXObjectCache::prepareForDocumentDestruction):
        (WebCore::AXObjectCache::performDeferredCacheUpdate):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::updateBackingStore):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (convertToNSArray):
        (-[WebAccessibilityObjectWrapperBase updateObjectBackingStore]):

2019-02-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Ask platform for generic font family mappings
        https://bugs.webkit.org/show_bug.cgi?id=187723
        <rdar://problem/41892438>

        Reviewed by Brent Fulgham.

        WebKit API allows setting the generic font families for the USCRIPT_COMMON script.
        When trying to style a character with a generic font family, we first look to see if
        we have a mapping for the particular script the character is rendered with, and if we
        don't find a match, we then check USCRIPT_COMMON.

        In the Cocoa ports, the only way families get set for non-USCRIPT_COMMON scripts (aka
        the only scripts which won't use the API families) is in
        SettingsBase::initializeDefaultFontFamilies(). That function only sets the families
        for the CJK scripts.

        The mappings inside SettingsBase are incorrect and conflict with our policy regarding
        user-installed fonts. Instead, we should be consulting with the platform for some of
        these mappings, by calling CTFontDescriptorCreateForCSSFamily(). However, the WebKit
        API still has to work to set the mappings for untagged content. Therefore, we use the
        system mappings for language-tagged content, and the API mappings for non-language-tagged
        content. This is a good balance that makes sure we always have a good mapping for every
        language, but API clients can still set the mappings, too.

        Test: fast/text/ja-sans-serif.html

        * css/CSSComputedStyleDeclaration.cpp:
        * css/CSSFontSelector.cpp:
        (WebCore::resolveGenericFamily):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontFamily):
        * page/cocoa/SettingsBaseCocoa.mm:
        (WebCore::SettingsBase::initializeDefaultFontFamilies):
        (WebCore::osakaMonoIsInstalled): Deleted.
        * platform/graphics/FontDescription.cpp:
        (WebCore::FontDescription::platformResolveGenericFamily):
        * platform/graphics/FontDescription.h:
        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::computeSpecializedChineseLocale):
        (WebCore::cachedSpecializedChineseLocale):
        (WebCore::languageChanged):
        (WebCore::FontDescription::platformResolveGenericFamily):
        * platform/graphics/cocoa/SystemFontDatabaseCoreText.cpp:
        (WebCore::SystemFontDatabaseCoreText::clear):
        (WebCore::genericFamily):
        (WebCore::SystemFontDatabaseCoreText::serifFamily):
        (WebCore::SystemFontDatabaseCoreText::sansSerifFamily):
        (WebCore::SystemFontDatabaseCoreText::cursiveFamily):
        (WebCore::SystemFontDatabaseCoreText::fantasyFamily):
        (WebCore::SystemFontDatabaseCoreText::monospaceFamily):
        * platform/graphics/cocoa/SystemFontDatabaseCoreText.h:

2019-02-11  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Add content extensions support in WKTR and unskip layout tests
        https://bugs.webkit.org/show_bug.cgi?id=193622

        Reviewed by Michael Catanzaro.

        No new tests needed.

        * SourcesCocoa.txt: Remove loader/ResourceLoadInfo.cpp, it's not Cocoa-specific anymore.
        * Sources.txt: Add loader/ResourceLoadInfo.cpp, all ports use it now.

2019-02-11  Daniel Bates  <dabates@apple.com>

        [iOS] Mouse/Touch/Pointer events are missing modifier keys
        https://bugs.webkit.org/show_bug.cgi?id=191446
        <rdar://problem/45929460>

        Reviewed by Tim Horton.

        Extract the modifier flags from the WebEvent. This code is only used by Legacy WebKit
        on iOS and we will need to fix <rdar://problem/47929759> in order for modifier flags
        to be passed to WebKit.

        Tests: fast/events/touch/ios/mouse-events-with-modifiers.html
               fast/events/touch/ios/pointer-events-with-modifiers.html
               fast/events/touch/ios/touch-events-with-modifiers.html

        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::PlatformMouseEventBuilder::PlatformMouseEventBuilder):
        * platform/ios/WebEvent.h:
        * platform/ios/WebEvent.mm:
        (-[WebEvent initWithMouseEventType:timeStamp:location:]):
        (-[WebEvent initWithMouseEventType:timeStamp:location:modifiers:]):

2019-02-11  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Notify AVSystemController of our presenting PID before registering as a Now Playing app.
        https://bugs.webkit.org/show_bug.cgi?id=194504

        Reviewed by Eric Carlson.

        This allows the MediaRemote framework to associate the WebContent process with its host application.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::start):
        * platform/audio/PlatformMediaSessionManager.h:
        (WebCore::PlatformMediaSessionManager::prepareToSendUserMediaPermissionRequest):
        * platform/audio/cocoa/MediaSessionManagerCocoa.h:
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (MediaSessionManagerCocoa::prepareToSendUserMediaPermissionRequest):
        (MediaSessionManagerCocoa::providePresentingApplicationPIDIfNecessary):
        (MediaSessionManagerCocoa::updateNowPlayingInfo):

2019-02-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241272 and r241276.
        https://bugs.webkit.org/show_bug.cgi?id=194514

        Broke the Apple Internal build and the fix requires human
        intervention :( (Requested by dydz on #webkit).

        Reverted changesets:

        "[iOS] Mouse/Touch/Pointer events are missing modifier keys"
        https://bugs.webkit.org/show_bug.cgi?id=191446
        https://trac.webkit.org/changeset/241272

        "Fix internal iOS build after r241272"
        https://bugs.webkit.org/show_bug.cgi?id=191446
        https://trac.webkit.org/changeset/241276

2019-02-11  Alex Christensen  <achristensen@webkit.org>

        Stop using setDefersLoading from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=194315

        Reviewed by Jer Noble.

        That is what CompletionHandlers are for.

        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResource::responseReceived):
        (WebCore::MediaResource::setDefersLoading): Deleted.
        * loader/MediaResourceLoader.h:
        * platform/graphics/PlatformMediaResourceLoader.h:
        (WebCore::PlatformMediaResourceClient::responseReceived):
        (WebCore::PlatformMediaResource::stop):
        (WebCore::PlatformMediaResource::setDefersLoading): Deleted.
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (WebCore::WebCoreNSURLSessionDataTaskClient::responseReceived):
        (-[WebCoreNSURLSessionDataTask resource:receivedResponse:completionHandler:]):
        (-[WebCoreNSURLSessionDataTask _setDefersLoading:]): Deleted.
        (-[WebCoreNSURLSessionDataTask resource:receivedResponse:]): Deleted.

2019-02-11  Daniel Bates  <dabates@apple.com>

        [iOS] Mouse/Touch/Pointer events are missing modifier keys
        https://bugs.webkit.org/show_bug.cgi?id=191446
        <rdar://problem/45929460>

        Reviewed by Tim Horton.

        Extract the modifier flags from the WebEvent. This code is only used by Legacy WebKit
        on iOS and we will need to fix <rdar://problem/47929759> in order for modifier flags
        to be passed to WebKit.

        Tests: fast/events/touch/ios/mouse-events-with-modifiers.html
               fast/events/touch/ios/pointer-events-with-modifiers.html
               fast/events/touch/ios/touch-events-with-modifiers.html

        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::PlatformMouseEventBuilder::PlatformMouseEventBuilder):
        * platform/ios/WebEvent.h:
        * platform/ios/WebEvent.mm:
        (-[WebEvent initWithMouseEventType:timeStamp:location:]):
        (-[WebEvent initWithMouseEventType:timeStamp:location:modifiers:]):

2019-02-11  Daniel Bates  <dabates@apple.com>

        Separate out outline-style: auto user-agent appearance from Mac animated focus ring drawing
        https://bugs.webkit.org/show_bug.cgi?id=193591

        Reviewed by Simon Fraser.

        Untangle the Mac-specific concept of animated focus ring drawing from the concepts of using
        the fancy shrink-wrapped focus ring appearance and using the platform focus ring color when
        outline-style: auto.

        No functionality changed. So, no new tests.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::drawFocusRing):
        (WebCore::drawFocusRingToContextAtTime):
        Change some macro guards.

        * rendering/RenderElement.cpp:
        (WebCore::usePlatformFocusRingColorForOutlineStyleAuto): Added.
        (WebCore::useShrinkWrappedFocusRingForOutlineStyleAuto): Added.
        (WebCore::drawFocusRing): Added.
        (WebCore::RenderElement::paintFocusRing): Write in terms of drawFocusRing().

2019-02-11  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241229.

        Revision broke internal builds for watchOS.

        Reverted changeset:

        "[Cocoa] Ask platform for generic font family mappings"
        https://bugs.webkit.org/show_bug.cgi?id=187723
        https://trac.webkit.org/changeset/241229

2019-02-11  Youenn Fablet  <youenn@apple.com>

        Make Request constructor throw if FetchRequestInit.signal is not undefined, null or an AbortSignal object
        https://bugs.webkit.org/show_bug.cgi?id=194404
        <rdar://problem/47891915>

        Reviewed by Geoffrey Garen.

        Align with the spec, except for known problematic web sites.
        Covered by updated test.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::needsSignalQuirk):
        (WebCore::processInvalidSignal):
        (WebCore::FetchRequest::initializeWith):

2019-02-11  Zalan Bujtas  <zalan@apple.com>

        [LFC] FormattingContext::Geometry::floatingHeightAndMargin should take UsedHorizontalValues
        https://bugs.webkit.org/show_bug.cgi?id=194490

        Reviewed by Antti Koivisto.

        This is in preparation for adding floating preferred width computation support. It requires height computaiton
        which uses containing block width to resolve vertical margins.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeBorderAndPadding const):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases):
        (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedVerticalMargin):
        * layout/FormattingContextQuirks.cpp:
        (WebCore::Layout::FormattingContext::Quirks::heightValueOfNearestContainingBlockWithFixedHeight):
        * layout/LayoutUnits.h:
        (WebCore::Layout::UsedHorizontalValues::UsedHorizontalValues):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedInFlowHeight):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeValues):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::estimatedMarginBefore):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin const):
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockHeightAndMargin):

2019-02-11  Zalan Bujtas  <zalan@apple.com>

        [LFC] FormattingContext::intrinsicWidthConstraints should compute and save the intrinsic widths consistently.
        https://bugs.webkit.org/show_bug.cgi?id=194483

        Reviewed by Antti Koivisto.

        Rename intrinsicWidthConstraints to computeIntrinsicWidthConstraints (it does not return the width values anymore).

        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::shrinkToFitWidth):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeIntrinsicWidthConstraints const):
        (WebCore::Layout::BlockFormattingContext::intrinsicWidthConstraints const): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthConstraints const):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingContextRoot const):
        (WebCore::Layout::InlineFormattingContext::intrinsicWidthConstraints const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:

2019-02-10  Zalan Bujtas  <zalan@apple.com>

        [LFC] Fix spelling error.
        https://bugs.webkit.org/show_bug.cgi?id=194489

        Reviewed by Simon Fraser.

        instrinsic -> intrinsic

        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::shrinkToFitWidth):
        * layout/FormattingState.h:
        (WebCore::Layout::FormattingState::setIntrinsicWidthConstraints):
        (WebCore::Layout::FormattingState::clearIntrinsicWidthConstraints):
        (WebCore::Layout::FormattingState::intrinsicWidthConstraints const):
        (WebCore::Layout::FormattingState::setInstrinsicWidthConstraints): Deleted.
        (WebCore::Layout::FormattingState::clearInstrinsicWidthConstraints): Deleted.
        (WebCore::Layout::FormattingState::instrinsicWidthConstraints const): Deleted.
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::intrinsicWidthConstraints const):
        (WebCore::Layout::BlockFormattingContext::instrinsicWidthConstraints const): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::intrinsicWidthConstraintsNeedChildrenWidth):
        (WebCore::Layout::BlockFormattingContext::Geometry::intrinsicWidthConstraints):
        (WebCore::Layout::BlockFormattingContext::Geometry::instrinsicWidthConstraintsNeedChildrenWidth): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::instrinsicWidthConstraints): Deleted.
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::intrinsicWidthConstraints const):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingContextRoot const):
        (WebCore::Layout::InlineFormattingContext::instrinsicWidthConstraints const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:

2019-02-10  Darin Adler  <darin@apple.com>

        Switch uses of StringBuilder with String::format for hex numbers to use HexNumber.h instead
        https://bugs.webkit.org/show_bug.cgi?id=194485

        Reviewed by Daniel Bates.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::encodeProtocolString): Use appendUnsignedAsHexFixedSize instead of String::format.

        * css/parser/CSSParserToken.cpp:
        (WebCore::CSSParserToken::serialize const): Fixed style of many return statements
        that called a function returning void; doesn't match WebKit's prevailing style.
        Also use break instead of return. Used appendLiteral instead of append in many
        cases, and append character instead of single-character literal in others.
        Use appendUnsignedAsHex instead of String::format.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::generateHashedName): Use appendUnsignedAsHex instad of appendUnsigned64AsHex.
        Should come back here and use makeString once we make HexNumber.h work with that.

        * platform/mac/WebCoreNSURLExtras.mm: Removed unnecessary include of HexNumber.h.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::quoteAndEscapeNonPrintables): Use appendLiteral instead of multiple calls
        to character append. Touched because it was next to a call to appendUnsignedAsHex.

2019-02-10  Pablo Saavedra  <psaavedra@igalia.com>

        libWPEWebKit-0.1.so: undefined reference to `JSC::JSValue::asCell() const
        https://bugs.webkit.org/show_bug.cgi?id=194484

        Reviewed by Darin Adler.

        * bindings/js/JSUndoItemCustom.cpp:

2019-02-10  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK Debug build fix after r241148.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::removeSamplesFromTrackBuffer):
        SourceBuffer::logClassName and friends are declared for
        !RELEASE_LOG_DISABLED builds so adapt calling sites accordingly.

2019-02-10  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add intrinsic width support for inline-block boxes
        https://bugs.webkit.org/show_bug.cgi?id=194479

        Reviewed by Antti Koivisto.

        Compute the intrinsic width for the inline-block (formatting context root) and set it as the content box width while
        laying out the content for the min/max width.

        <div style="position: absolute">before<span id=inline-block style="display: inline-block">inline_block content<span>after</div>

        The "inline-block" formatting root returns "inline_block" width for the minimum and "inline_block width" for
        the maximum width. These min/max values are used to figure out the intrinsic width for the parent <div>.

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::instrinsicWidthConstraints const):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingContextRoot const):
        (WebCore::Layout::InlineFormattingContext::computeMargin const):
        * layout/inlineformatting/InlineFormattingContext.h:
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

2019-02-10  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add intrinsic width support for replaced boxes
        https://bugs.webkit.org/show_bug.cgi?id=194478

        Reviewed by Antti Koivisto.

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        (WebCore::Layout::InlineFormattingContext::instrinsicWidthConstraints const):
        (WebCore::Layout::InlineFormattingContext::computeMargin const):
        (WebCore::Layout::InlineFormattingContext::computeBorderAndPadding const):
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox const):
        (WebCore::Layout::InlineFormattingContext::computeMarginBorderAndPadding const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:

2019-02-10  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Add missing return type to lambda
        https://bugs.webkit.org/show_bug.cgi?id=194414

        Reviewed by Darin Adler.

        Since g_signal_connect() is untyped, a compiler error was not
        generated when a lambda with a missing GstFlowReturn return type was
        provided for a signal that expects it.

        This used to work before r240784 because a recent function call had
        set GST_FLOW_OK in the return value register and it happened to
        survive until the lambda function call ended. Starting on that commit
        such return value was removed and it stopped working on debug.

        Of course, the actual problem is in the signature of the lambda
        function, and this patch fixes that.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::AppendPipeline):

2019-02-09  Darin Adler  <darin@apple.com>

        Eliminate unnecessary String temporaries by using StringConcatenateNumbers
        https://bugs.webkit.org/show_bug.cgi?id=194021

        Reviewed by Geoffrey Garen.

        For floating point numbers, String::number gives a fixed precision result,
        stripping trailing zeroes. When possible, I changed the code to instead use the
        equivalent of String::numberToStringECMAScript, which is what makeString does by
        default for floating point, gives the same results for many cases, and gives
        better results in many others. However, for floats, we do not yet have a good
        implementation, so instead I used FormattedNumber::fixedPrecision to match
        the old behavior.

        * Modules/indexeddb/shared/IDBTransactionInfo.cpp:
        (WebCore::IDBTransactionInfo::loggingString const): Remove String::number and let
        makeString do the conversion without allocating/destroying a String.
        * Modules/websockets/ThreadableWebSocketChannel.cpp:
        (WebCore::ThreadableWebSocketChannel::create): Ditto.
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect): Ditto. Added a cast to "unsigned" to sidestep the
        ambiguity with 16-bit unsigned types that are sometimes used for numbers (uint16_t)
        and sometimes used for UTF-16 code units (UChar) and can be the same type.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didFailSocketStream): Use ASCIILiteral when intializing
        a string instead of just a normal C literal. Switched to makeString so we could
        remove String::number and do the conversion without allocating/destroying a String.
        (WebCore::WebSocketChannel::didFail): Ditto.
        (WebCore::WebSocketChannel::processFrame): Ditto.
        * Modules/websockets/WebSocketFrame.cpp:
        (WebCore::WebSocketFrame::parseFrame): Ditto.
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readServerHandshake): Ditto.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::positionalDescriptionForMSAA const): Ditto.
        * bindings/js/JSDOMConvertNumbers.cpp:
        (WebCore::rangeErrorString): Ditto.
        * css/CSSAspectRatioValue.cpp:
        (WebCore::CSSAspectRatioValue::customCSSText const): Ditto. Used
        FormattedNumber::fixedPrecision since these are floats.

        * css/DOMMatrixReadOnly.cpp:
        (WebCore::DOMMatrixReadOnly::toString const): Use
        StringBuilder::builder.appendECMAScriptNumber instead of
        String::numberToStringECMAScript so we can do it without allocating/destroying
        a String.
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::toString const): Ditto.

        * dom/MessagePortIdentifier.h:
        (WebCore::MessagePortIdentifier::logString const): Remove String::number and let
        makeString do the conversion without allocating/destroying a String.

        * editing/cocoa/DataDetection.mm:
        (WebCore::dataDetectorStringForPath): Remove unnecessary type casts on values
        passed to String::number and to StringBuilder::appendNumber. These could do
        harm if the values were out of range, and should not be necessary.

        * history/BackForwardItemIdentifier.h:
        (WebCore::BackForwardItemIdentifier::logString const): Remove String::number
        and let makeString do the conversion without allocating/destroying a String.
        * html/FTPDirectoryDocument.cpp:
        (WebCore::processFileDateString): Ditto.
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::getUniformLocation): Ditto.
        (WebCore::WebGLRenderingContextBase::checkTextureCompleteness): Ditto.
        * inspector/agents/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::didReceiveResponse): Ditto.
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::loadResourceSynchronously): Ditto.
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFailLoadingManifest): Ditto.
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::urlForBlankFrame): Ditto.
        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageProperty): Ditto.
        (WebCore::PrintContext::pageSizeAndMarginsInPixels): Ditto.

        * page/WheelEventTestTrigger.cpp:
        (WebCore::dumpState): Use StringBuilder::appendNumber instead of
        String::number so we can do it without allocating/destroying a String.
        Also use StringBuilder::appendLiteral on a literal.

        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::ResourceUsageOverlay::platformDraw): Pass explicit
        KeepTrailingZeros to FormattedNumber::fixedPrecision to preserve behavior,
        since default is now to truncate trailing zeros.

        * platform/graphics/Color.cpp:
        (WebCore::Color::cssText): Use StringBuilder::appendNumber instead of
        calling numberToFixedPrecisionString to do the same thing.
        * platform/graphics/ExtendedColor.cpp:
        (WebCore::ExtendedColor::cssText): Ditto.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::animationIdentifier): Remove String::number and let makeString
        do the conversion without allocating/destroying a String. Had to add
        a typecast to convert the enumeration into an integer.
        * platform/graphics/ca/cocoa/PlatformCAFiltersCocoa.mm:
        (WebCore::PlatformCAFilters::setFiltersOnLayer): Ditto.
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::description const): Ditto.

        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockMediaSample::MockMediaSample): Use AtomicString::number
        instead of String::number to avoid unneccessarily allocating an additional
        temporary String when an AtomicString already exists.

        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::reportErrorToClient): Remove String::number
        and let makeString do the conversion without allocating/destroying a String.
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::setMaximumSize): Ditto.
        (WebCore::SQLiteDatabase::setSynchronous): Ditto. Had to add a typecast to
        convert the enumeration into an integer.
        * svg/SVGAngleValue.cpp:
        (WebCore::SVGAngleValue::valueAsString const): Ditto.
        * svg/SVGLengthValue.cpp:
        (WebCore::SVGLengthValue::valueAsString const): Ditto.
        * testing/Internals.cpp:
        (WebCore::Internals::configurationForViewport): Ditto. Used
        FormattedNumber::fixedPrecision since these are floats.
        (WebCore::Internals::getCurrentCursorInfo): Use StringBuilder::appendNumber
        instead of calling numberToFixedPrecisionString to do the same thing.
        (WebCore::Internals::queueMicroTask): Remove String::number and let makeString
        do the conversion without allocating/destroying a String.
        (WebCore::appendOffsets): Use StringBuilder::appendNumber instead of
        String::number so we can do it without allocating/destroying a String.

        * workers/service/ServiceWorkerClientIdentifier.h:
        (WebCore::ServiceWorkerClientIdentifier::toString const): Remove String::number
        and let makeString do the conversion without allocating/destroying a String.
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::databaseFilenameFromVersion): Ditto.

2019-02-09  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add intrinsic width support for basic inline containers
        https://bugs.webkit.org/show_bug.cgi?id=194473

        Reviewed by Antti Koivisto.

        Preferred width computation logic is very similar to normal layout.
        One of the main difference is that the preferred width codepath does not provide valid containing block width.
        This patch implement basic inline container support by passing nullopt containing block width in UsedHorizontalValues. 

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        (WebCore::Layout::InlineFormattingContext::instrinsicWidthConstraints const):
        (WebCore::Layout::InlineFormattingContext::computeBorderAndPadding const):
        (WebCore::Layout::InlineFormattingContext::computeMarginBorderAndPadding const):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin const):
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox const):
        * layout/inlineformatting/InlineFormattingContext.h:

2019-02-08  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] CTLineGetGlyphRuns() might return nullptr
        https://bugs.webkit.org/show_bug.cgi?id=194467
        <rdar://problem/42423999>

        Reviewed by Simon Fraser.

        Be somewhat defensive to try to make sure this sort of thing doesn't happen in the future.

        Covered by find/text/find-backwards.html

        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):

2019-02-08  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Ask platform for generic font family mappings
        https://bugs.webkit.org/show_bug.cgi?id=187723
        <rdar://problem/41892438>

        Reviewed by Brent Fulgham.

        WebKit API allows setting the generic font families for the USCRIPT_COMMON script.
        When trying to style a character with a generic font family, we first look to see if
        we have a mapping for the particular script the character is rendered with, and if we
        don't find a match, we then check USCRIPT_COMMON.

        In the Cocoa ports, the only way families get set for non-USCRIPT_COMMON scripts (aka
        the only scripts which won't use the API families) is in
        SettingsBase::initializeDefaultFontFamilies(). That function only sets the families
        for the CJK scripts.

        The mappings inside SettingsBase are incorrect and conflict with our policy regarding
        user-installed fonts. Instead, we should be consulting with the platform for some of
        these mappings, by calling CTFontDescriptorCreateForCSSFamily(). However, the WebKit
        API still has to work to set the mappings for untagged content. Therefore, we use the
        system mappings for language-tagged content, and the API mappings for non-language-tagged
        content. This is a good balance that makes sure we always have a good mapping for every
        language, but API clients can still set the mappings, too.

        Test: fast/text/ja-sans-serif.html

        * css/CSSComputedStyleDeclaration.cpp:
        * css/CSSFontSelector.cpp:
        (WebCore::resolveGenericFamily):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontFamily):
        * page/cocoa/SettingsBaseCocoa.mm:
        (WebCore::SettingsBase::initializeDefaultFontFamilies):
        (WebCore::osakaMonoIsInstalled): Deleted.
        * platform/graphics/FontDescription.cpp:
        (WebCore::FontDescription::platformResolveGenericFamily):
        * platform/graphics/FontDescription.h:
        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::computeSpecializedChineseLocale):
        (WebCore::cachedSpecializedChineseLocale):
        (WebCore::languageChanged):
        (WebCore::FontDescription::platformResolveGenericFamily):
        * platform/graphics/cocoa/SystemFontDatabaseCoreText.cpp:
        (WebCore::SystemFontDatabaseCoreText::clear):
        (WebCore::SystemFontDatabaseCoreText::serifFamily):
        (WebCore::SystemFontDatabaseCoreText::sansSerifFamily):
        (WebCore::SystemFontDatabaseCoreText::cursiveFamily):
        (WebCore::SystemFontDatabaseCoreText::fantasyFamily):
        (WebCore::SystemFontDatabaseCoreText::monospaceFamily):
        * platform/graphics/cocoa/SystemFontDatabaseCoreText.h:

2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Shrink sizeof(CodeBlock) more
        https://bugs.webkit.org/show_bug.cgi?id=194419

        Reviewed by Mark Lam.

        * testing/Internals.cpp:
        (WebCore::Internals::parserMetaData):

2019-02-08  Chris Dumez  <cdumez@apple.com>

        [Cocoa] Optimize ResourceResponse::platformLazyInit()
        https://bugs.webkit.org/show_bug.cgi?id=194438

        Reviewed by Alex Christensen.

        Optimize ResourceResponse::platformLazyInit(). Most of the CPU time currently goes into getting the
        HTTP headers from CFNetwork:
        """
        Sample Count, Samples %, CPU %, Symbol
        46, 0.0%, 0.0%, WebCore::initializeHTTPHeaders(WebCore::OnlyCommonHeaders, NSHTTPURLResponse*, WebCore::HTTPHeaderMap&) (in WebCore)
        34, 0.0%, 0.0%,     HTTPHeaderDict::copyAsOrdinaryDict(__CFAllocator const*) const (in CFNetwork)
        11, 0.0%, 0.0%,     CFDictionaryApplyFunction (in CoreFoundation)
        """

        We currently have 2 levels of initialization: CommonFieldsOnly & AllFields. With WebKit2, most ResourceResponses get sent over IPC
        and thus end up getting initialized twice, once with CommonFieldsOnly and then with AllFields.
        This would cause us to call the expensive HTTPHeaderDict::copyAsOrdinaryDict() twice instead of once, simply to initialize the common
        HTTP headers first and then the uncommon ones later.

        This patch updates ResourceResponse::platformLazyInit() to initialize all HTTP headers at once, as soon as CommonFieldsOnly
        initialization is requested, so that we no longer copy all HTTP headers twice.

        * platform/network/cocoa/ResourceResponseCocoa.mm:
        (WebCore::initializeHTTPHeaders):
        (WebCore::ResourceResponse::platformLazyInit):

2019-02-08  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Build fix for MTLStorageMode availability on different Cocoa platforms
        https://bugs.webkit.org/show_bug.cgi?id=194443

        Unreviewed build fix.

        For MTLTextures, MTLStorageModeManaged is only available on macOS. Other platforms,
        if not using MTLStorageModePrivate, must use MTLStorageModeShared.

        Behavior unchanged.

        * platform/graphics/gpu/cocoa/GPUTextureMetal.mm:
        (WebCore::storageModeForPixelFormatAndSampleCount):

2019-02-08  Per Arne Vollan  <pvollan@apple.com>

        [WebVTT] Inline WebVTT styles should start with '::cue'
        https://bugs.webkit.org/show_bug.cgi?id=194227
        <rdar://problem/47791087>

        Reviewed by Eric Carlson.

        Check that the CSS string starts with '::cue' and is successfully parsed before adding it
        to the CSS stylesheet list. Also, the caption preferences CSS string should start with
        '::cue', since it is added inside the video shadow root element.

        Test: media/track/track-cue-css.html

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::checkAndStoreStyleSheet):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionsStyleSheetOverride const):

2019-02-08  Youenn Fablet  <youenn@apple.com>

        Running RTCRtpSender.getCapabilities("video") before initial offer breaks VP8
        https://bugs.webkit.org/show_bug.cgi?id=194380
        <rdar://problem/47916514>

        Reviewed by Eric Carlson.

        Set whether VP8 is supported at creation of the page.
        This ensures that any call creating a peer connection factory will end up supporting the runtime flag configuration.

        Add internal API to enable resetting the factory to enable proper testing.

        Covered by updated test.

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::createLibWebRTCPeerConnectionBackend):
        * page/Page.cpp:
        (WebCore::m_applicationManifest):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * testing/Internals.cpp:
        (WebCore::Internals::clearPeerConnectionFactory):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-02-08  Andy Estes  <aestes@apple.com>

        [WebIDL] Support serializing sequences and FrozenArrays of non-interfaces
        https://bugs.webkit.org/show_bug.cgi?id=190997
        <rdar://problem/35983035>

        Reviewed by Brent Fulgham.

        Support serializing sequences and FrozenArrays of types that aren't interfaces. This is
        needed to properly serialize PaymentAddress, which has a FrozenArray of DOMStrings.

        We should support serializing sequences of interfaces too, but that's slightly more
        complicated since it involves iterating the sequence and serializing each of its items. I
        left that as a follow-up task, since I don't see any IDLs that currently need this.

        We also don't support serializing sequences with the CachedAttribute or CustomGetter
        extended attributes, because WebIDL specifies that a new array should be created when
        converting an IDL sequence into an ECMAScript value.

        Added bindings test cases to TestSerialization.idl and PaymentAddress test cases to
        http/tests/paymentrequest/payment-address-attributes-and-toJSON-method.https.html.

        * bindings/scripts/CodeGenerator.pm:
        (GetInterfaceForType): Renamed from GetInterfaceForAttribute.
        (IsSerializableType): Modified to allow sequences and FrozenArrays of non-interface types.
        (hasCachedAttributeOrCustomGetterExtendedAttribute): Added a helper to determine if an
        attribute has the CachedAttribute or CustomGetter extended attributes.
        (IsSerializableAttribute): Checked for sequences with the CachedAttribute or CustomGetter
        extended attributes before calling IsSerializableType.
        (GetInterfaceForAttribute): Renamed to GetInterfaceForType.
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        * bindings/scripts/test/TestSerialization.idl:

2019-02-08  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB tests leak documents
        https://bugs.webkit.org/show_bug.cgi?id=189435
        <rdar://problem/44240043>

        Reviewed by Geoffrey Garen.

        Remove use of JSC::Strong in IndexedDatabase.

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::continuePrimaryKey):
        (WebCore::IDBCursor::continueFunction):
        (WebCore::IDBCursor::deleteFunction):
        (WebCore::IDBCursor::setGetResult):
        * Modules/indexeddb/IDBCursor.h:
        (WebCore::IDBCursor::key):
        (WebCore::IDBCursor::primaryKey):
        (WebCore::IDBCursor::value):
        (WebCore::IDBCursor::keyWrapper):
        (WebCore::IDBCursor::primaryKeyWrapper):
        (WebCore::IDBCursor::valueWrapper):
        (WebCore::IDBCursor::key const): Deleted.
        (WebCore::IDBCursor::primaryKey const): Deleted.
        (WebCore::IDBCursor::value const): Deleted.
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBCursorWithValue.idl:
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::putForCursorUpdate):
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::~IDBRequest):
        (WebCore::IDBRequest::result const):
        (WebCore::IDBRequest::setResult):
        (WebCore::IDBRequest::setResultToStructuredClone):
        (WebCore::IDBRequest::setResultToUndefined):
        (WebCore::IDBRequest::resultCursor):
        (WebCore::IDBRequest::willIterateCursor):
        (WebCore::IDBRequest::didOpenOrIterateCursor):
        * Modules/indexeddb/IDBRequest.h:
        (WebCore::IDBRequest::resultWrapper):
        * Modules/indexeddb/IDBRequest.idl:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSIDBCursorCustom.cpp:
        (WebCore::JSIDBCursor::key const):
        (WebCore::JSIDBCursor::primaryKey const):
        (WebCore::JSIDBCursor::visitAdditionalChildren):
        * bindings/js/JSIDBCursorWithValueCustom.cpp:
        (WebCore::JSIDBCursorWithValue::value const):
        (WebCore::JSIDBCursorWithValue::visitAdditionalChildren):
        * bindings/js/JSIDBRequestCustom.cpp: Added.
        (WebCore::JSIDBRequest::result const):
        (WebCore::JSIDBRequest::visitAdditionalChildren):
        * inspector/agents/InspectorIndexedDBAgent.cpp:

2019-02-08  Zalan Bujtas  <zalan@apple.com>

        [LFC] The used containing block width value is optional
        https://bugs.webkit.org/show_bug.cgi?id=194428

        Reviewed by Antti Koivisto.

        The preferred width codepath cannot provide a valid used containing block width value.

        "The percentage is calculated with respect to the width of the generated box's containing block.
        If the containing block's width depends on this element's width, then the resulting layout is undefined in CSS 2.2."

        Let's use 0 as used value for now.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::shrinkToFitWidth):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedPadding):
        (WebCore::Layout::FormattingContext::Geometry::computedHorizontalMargin):
        * layout/LayoutUnits.h:
        (WebCore::Layout::UsedHorizontalValues::UsedHorizontalValues):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin):
        * page/FrameViewLayoutContext.cpp:

2019-02-08  Zalan Bujtas  <zalan@apple.com>

        [LFC] Horizontal geometry compute functions should take the containing block's width as a used value
        https://bugs.webkit.org/show_bug.cgi?id=194424

        Reviewed by Antti Koivisto.

        This is in preparation for passing optional containing block width for the preferred with codepath. 

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::computeBorderAndPadding const):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::shrinkToFitWidth):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedBorder):
        (WebCore::Layout::FormattingContext::Geometry::computedPadding):
        (WebCore::Layout::FormattingContext::Geometry::computedHorizontalMargin):
        * layout/LayoutUnits.h:
        (WebCore::Layout::UsedHorizontalValues::UsedHorizontalValues):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeMarginBorderAndPadding const):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin const):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin):

2019-02-08  Benjamin Poulain  <benjamin@webkit.org>

        clampTo(): do not convert the input to double when dealing with integers
        https://bugs.webkit.org/show_bug.cgi?id=194263
        <rdar://problem/47692312>

        Reviewed by Darin Adler.

        Make the calls to clampTo<float>() unambiguous.

        * page/FrameView.cpp:
        (WebCore::FrameView::computeUpdatedLayoutViewportRect):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setOpacity):
        (WebCore::RenderStyle::setShapeImageThreshold):

2019-02-08  Eric Liang  <ericliang@apple.com>

        When performing AXPress, check to see if the menu list is disabled.
        https://bugs.webkit.org/show_bug.cgi?id=193878

        Reviewed by Chris Fleizach.

        Test: accessibility/mac/press-not-work-for-disabled-menu-list.html

        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::press):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):

2019-02-07  Devin Rousso  <drousso@apple.com>

        PseudoElement created for any ::before/::after selector regardless of whether a content property exists
        https://bugs.webkit.org/show_bug.cgi?id=194423
        <rdar://problem/46787260>

        Reviewed by Antti Koivisto.

        Test: inspector/css/pseudo-creation.html

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolvePseudoStyle):
        We should only be creating `PseudoElement`s if we actually have a `content` proprety in the
        `PseudoElement`'s style. Otherwise, we end up creating `PseudoElement`s for every CSS rule
        that has a `::before`/`::after`, only to immediately destroy them as there is nothing to show.

2019-02-07  Chris Dumez  <cdumez@apple.com>

        Mark more heap-allocated classes as fast allocated
        https://bugs.webkit.org/show_bug.cgi?id=194422

        Reviewed by Ryosuke Niwa.

        * Modules/applepay/PaymentCoordinator.h:
        * Modules/beacon/NavigatorBeacon.h:
        * Modules/cache/DOMWindowCaches.h:
        * Modules/cache/WorkerGlobalScopeCaches.h:
        * Modules/credentialmanagement/NavigatorCredentials.h:
        * Modules/encryptedmedia/legacy/LegacyCDMPrivateClearKey.h:
        * Modules/gamepad/NavigatorGamepad.h:
        * Modules/indexeddb/IDBGetAllResult.h:
        * Modules/indexeddb/IDBGetResult.h:
        * Modules/indexeddb/IDBKeyData.h:
        * Modules/indexeddb/IDBValue.h:
        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.h:
        * Modules/indexeddb/server/IndexValueEntry.h:
        * Modules/indexeddb/server/IndexValueStore.h:
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.h:
        * Modules/indexeddb/server/MemoryCursor.h:
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        * Modules/indexeddb/server/SQLiteIDBCursor.h:
        * Modules/indexeddb/server/SQLiteIDBTransaction.h:
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        * Modules/indexeddb/shared/IDBDatabaseInfo.h:
        * Modules/indexeddb/shared/IDBResourceIdentifier.h:
        * Modules/indexeddb/shared/IDBTransactionInfo.h:
        * Modules/mediacapabilities/NavigatorMediaCapabilities.h:
        * Modules/mediasession/WebMediaSessionManager.cpp:
        * Modules/mediastream/NavigatorMediaDevices.h:
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpTransceiverBackend.h:
        * Modules/navigatorcontentutils/NavigatorContentUtils.h:
        * Modules/quota/DOMWindowQuota.h:
        * Modules/quota/NavigatorStorageQuota.h:
        * Modules/quota/WorkerNavigatorStorageQuota.h:
        * Modules/speech/DOMWindowSpeechSynthesis.h:
        * Modules/webaudio/BiquadProcessor.h:
        * Modules/webaudio/DelayProcessor.h:
        * Modules/webauthn/fido/FidoHidPacket.h:
        * Modules/webdriver/NavigatorWebDriver.h:
        * Modules/webgpu/DOMWindowWebGPU.h:
        * Modules/websockets/WebSocketChannel.h:
        * Modules/webvr/NavigatorWebVR.h:
        * accessibility/AXObjectCache.h:
        * bindings/js/DOMGCOutputConstraint.h:
        * bindings/js/DOMPromiseProxy.h:
        * bridge/c/c_runtime.h:
        * contentextensions/CombinedURLFilters.cpp:
        * crypto/CryptoAlgorithmParameters.h:
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSRegisteredCustomProperty.h:
        * css/DOMCSSPaintWorklet.h:
        * css/DOMCSSRegisterCustomProperty.h:
        * css/StyleRule.h:
        * dom/ConstantPropertyMap.h:
        * dom/CustomElementReactionQueue.h:
        * dom/Document.h:
        * dom/GenericEventQueue.h:
        * dom/RejectedPromiseTracker.h:
        * dom/UserGestureIndicator.h:
        * editing/ReplaceSelectionCommand.cpp:
        * editing/SelectionRectGatherer.h:
        * editing/TextIterator.h:
        * editing/cocoa/HTMLConverter.mm:
        * fileapi/AsyncFileStream.cpp:
        * fileapi/AsyncFileStream.h:
        * html/forms/FileIconLoader.h:
        * html/parser/HTMLTreeBuilder.h:
        * html/track/WebVTTParser.h:
        * inspector/DOMPatchSupport.cpp:
        * loader/FrameLoaderClient.h:
        * loader/WorkerThreadableLoader.cpp:
        * page/IntersectionObserver.h:
        * page/PerformanceMonitor.h:
        * page/PerformanceUserTiming.h:
        * page/PrintContext.h:
        * page/ValidationMessageClient.h:
        * platform/ColorChooser.h:
        * platform/ControlStates.h:
        * platform/DataListSuggestionPicker.h:
        * platform/FileStream.h:
        * platform/KeyedCoding.h:
        * platform/LowPowerModeNotifier.h:
        * platform/PlatformSpeechSynthesizer.h:
        * platform/WebGLStateTracker.h:
        * platform/audio/AudioArray.h:
        * platform/audio/AudioDestination.h:
        * platform/audio/DownSampler.h:
        * platform/audio/DynamicsCompressor.h:
        * platform/audio/FFTFrame.h:
        * platform/audio/HRTFDatabase.h:
        * platform/audio/MultiChannelResampler.h:
        * platform/audio/Panner.h:
        * platform/audio/Reverb.h:
        * platform/audio/ReverbConvolver.h:
        * platform/audio/ReverbConvolverStage.h:
        * platform/audio/UpSampler.h:
        * platform/audio/mac/AudioSessionMac.cpp:
        * platform/audio/mac/CAAudioStreamDescription.h:
        * platform/audio/mac/CARingBuffer.h:
        * platform/cocoa/ScrollSnapAnimatorState.h:
        * platform/gamepad/PlatformGamepad.h:
        * platform/graphics/GraphicsLayer.cpp:
        * platform/graphics/GraphicsLayerFactory.h:
        * platform/graphics/PlatformTimeRanges.h:
        * platform/graphics/TextTrackRepresentation.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.h:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h:
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        * platform/sql/SQLiteDatabase.h:
        * platform/text/TextCodecICU.h:
        * rendering/GridBaselineAlignment.h:
        * rendering/GridTrackSizingAlgorithm.h:
        * rendering/RenderObject.h:
        * rendering/style/GridArea.h:
        * workers/service/context/SWContextManager.h:

2019-02-07  Justin Fan  <justin_fan@apple.com>

        [Web GPU] GPUDevice::createTexture implementation prototype
        https://bugs.webkit.org/show_bug.cgi?id=194409
        <rdar://problem/47894312>

        Reviewed by Myles C. Maxfield.

        Test: textures-textureviews.html updated to test new functionality.

        Implement GPUDevice::createTexture():
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createTexture const):
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDevice.idl:
        * Modules/webgpu/WebGPUTexture.cpp:
        (WebCore::WebGPUTexture::create): Modified to return non-nullable to match direction of API.
        (WebCore::WebGPUTexture::WebGPUTexture):
        * Modules/webgpu/WebGPUTexture.h:

        Metal backend MTLTextureDescriptor and MTLTexture creation:
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::tryCreateTexture const):
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/GPUTexture.h:
        * platform/graphics/gpu/cocoa/GPUTextureMetal.mm:
        (WebCore::mtlTextureTypeForGPUTextureDescriptor):
        (WebCore::mtlTextureUsageForGPUTextureUsageFlags):
        (WebCore::storageModeForPixelFormatAndSampleCount):
        (WebCore::tryCreateMtlTextureDescriptor):
        (WebCore::GPUTexture::tryCreate):
        (WebCore::GPUTexture::createDefaultTextureView): Add ObjC try/catch guards.

        Add GPUUtils.h/cpp for shared utility functions:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/GPUUtils.h: Added. Moved platformTextureFormatForGPUTextureFormat here.
        * platform/graphics/gpu/cocoa/GPUSwapChainMetal.mm:
        (WebCore::GPUSwapChain::setFormat):
        (WebCore::platformTextureFormatForGPUTextureFormat): Moved to GPUUtils.
        * platform/graphics/gpu/cocoa/GPUUtilsMetal.mm: Added.
        (WebCore::platformTextureFormatForGPUTextureFormat): Moved here to be referenced by multiple files.

2019-02-07  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION(r239887): Crash under IDBConnectionToClient::didDeleteDatabase(WebCore::IDBResultData const&)
        https://bugs.webkit.org/show_bug.cgi?id=194402
        <rdar://problem/47858241>

        Reviewed by Geoffrey Garen.

        r239887 removed a reference cycle of IDBConnectionToClient so that IDBConnectionToClient would no longer be
        around forever. Therefore, ServerOpenRequest should keep a reference to IDBConnectionToClient to make sure it
        is valid during access.

        * Modules/indexeddb/server/ServerOpenDBRequest.cpp:
        (WebCore::IDBServer::ServerOpenDBRequest::maybeNotifyRequestBlocked):
        (WebCore::IDBServer::ServerOpenDBRequest::notifyDidDeleteDatabase):
        * Modules/indexeddb/server/ServerOpenDBRequest.h:

2019-02-07  Timothy Hatcher  <timothy@apple.com>

        Overflow element scrollbar is light for dark mode content.
        https://bugs.webkit.org/show_bug.cgi?id=194407
        rdar://problem/45991585

        Reviewed by Beth Dakin.

        Tested by css-dark-mode/supported-color-schemes-scrollbar.html.

        * page/ChromeClient.h:
        (WebCore::FrameView::preferredScrollbarOverlayStyle): Return WTF::nullopt by default to avoid
        short-circuiting auto detection in recalculateScrollbarOverlayStyle() for clients, like WK1,
        that do not implement preferredScrollbarOverlayStyle().
        * page/FrameView.cpp:
        (WebCore::FrameView::recalculateScrollbarOverlayStyle): Use WTF::nullopt in the false case
        to auto detect overlay style when page() is null.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::useDarkAppearance const): Added.
        * rendering/RenderLayer.h:
        * testing/Internals.cpp:
        (WebCore::Internals::scrollbarOverlayStyle const): Added Node argument.
        (WebCore::Internals::scrollbarUsingDarkAppearance const): Added.
        * testing/Internals.h:
        * testing/Internals.idl:

2019-02-07  Eric Carlson  <eric.carlson@apple.com>

        [MSE] Convert debug-only logging to runtime logging
        https://bugs.webkit.org/show_bug.cgi?id=194348
        <rdar://problem/47566449>

        Reviewed by Jer Noble.

        No new tests, this just changes existing logging.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::convertEnumerationToString):
        (WebCore::MediaSource::MediaSource):
        (WebCore::MediaSource::~MediaSource):
        (WebCore::MediaSource::setPrivateAndOpen):
        (WebCore::MediaSource::addedToRegistry):
        (WebCore::MediaSource::removedFromRegistry):
        (WebCore::MediaSource::durationChanged):
        (WebCore::MediaSource::seekToTime):
        (WebCore::MediaSource::completeSeek):
        (WebCore::MediaSource::setLiveSeekableRange):
        (WebCore::MediaSource::clearLiveSeekableRange):
        (WebCore::MediaSource::setDuration):
        (WebCore::MediaSource::setDurationInternal):
        (WebCore::MediaSource::setReadyState):
        (WebCore::MediaSource::endOfStream):
        (WebCore::MediaSource::streamEndedWithError):
        (WebCore::MediaSource::addSourceBuffer):
        (WebCore::MediaSource::removeSourceBuffer):
        (WebCore::MediaSource::isTypeSupported):
        (WebCore::MediaSource::detachFromElement):
        (WebCore::MediaSource::attachToElement):
        (WebCore::MediaSource::openIfInEndedState):
        (WebCore::MediaSource::suspend):
        (WebCore::MediaSource::resume):
        (WebCore::MediaSource::stop):
        (WebCore::MediaSource::onReadyStateChange):
        (WebCore::MediaSource::scheduleEvent):
        (WebCore::MediaSource::logChannel const):
        (WebCore::MediaSourceInternal::toString): Deleted.
        * Modules/mediasource/MediaSource.h:
        (WTF::LogArgument<WebCore::MediaSource::EndOfStreamError>::toString):
        (WTF::LogArgument<WebCore::MediaSource::ReadyState>::toString):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::SourceBuffer):
        (WebCore::SourceBuffer::~SourceBuffer):
        (WebCore::SourceBuffer::remove):
        (WebCore::SourceBuffer::seekToTime):
        (WebCore::SourceBuffer::appendBufferInternal):
        (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveRenderingError):
        (WebCore::removeSamplesFromTrackBuffer):
        (WebCore::SourceBuffer::removeCodedFrames):
        (WebCore::SourceBuffer::evictCodedFrames):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        (WebCore::SourceBuffer::sourceBufferPrivateReenqueSamples):
        (WebCore::SourceBuffer::sourceBufferPrivateDidBecomeReadyForMoreSamples):
        (WebCore::SourceBuffer::provideMediaData):
        (WebCore::SourceBuffer::trySignalAllSamplesInTrackEnqueued):
        (WebCore::SourceBuffer::monitorBufferingRate):
        (WebCore::SourceBuffer::logChannel const):
        * Modules/mediasource/SourceBuffer.h:
        * dom/Document.cpp:
        (WebCore::messageSourceForWTFLogChannel):
        (WebCore::Document::didLogMessage):
        * html/HTMLMediaElement.cpp:
        (WebCore::convertEnumerationToString):
        (WebCore::HTMLMediaElement::scheduleCheckPlaybackTargetCompatability):
        (WebCore::HTMLMediaElement::selectMediaResource):
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        (WebCore::HTMLMediaElement::scheduleConfigureTextTracks):
        (WebCore::HTMLMediaElement::scheduleMediaEngineWasUpdated):
        (WebCore::HTMLMediaElement::scheduleUpdatePlayState):
        (WebCore::HTMLMediaElement::scheduleUpdateMediaState):
        * platform/ContentType.cpp:
        (WebCore::ContentType::toJSONString const):
        * platform/ContentType.h:
        (WTF::LogArgument<WebCore::ContentType>::toString):
        * platform/MediaSample.h:
        (WebCore::MediaSample::toJSONString const):
        (WTF::LogArgument<WebCore::MediaSample>::toString):
        * platform/graphics/FloatSize.cpp:
        (WebCore::FloatSize::toJSONObject const):
        (WebCore::FloatSize::toJSONString const):
        * platform/graphics/FloatSize.h:
        (WTF::LogArgument<WebCore::FloatSize>::toString):
        * platform/graphics/MediaSourcePrivate.h:
        (WebCore::MediaSourcePrivate::mediaSourceLogIdentifier):
        (WTF::LogArgument<WebCore::MediaSourcePrivate::AddStatus>::toString):
        (WTF::LogArgument<WebCore::MediaSourcePrivate::EndOfStreamStatus>::toString):
        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::sourceBufferLogger const):
        (WebCore::SourceBufferPrivate::sourceBufferLogIdentifier):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setMuted):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setClosedCaptionsVisible):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isCurrentPlaybackTargetWireless const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessVideoPlaybackDisabled const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessVideoPlaybackDisabled):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldBufferData):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::mediaPlayerLogIdentifier):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::mediaPlayerLogger):
        (WTF::LogArgument<WebCore::MediaPlayerPrivateMediaSourceAVFObjC::SeekState>::toString):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::convertEnumerationToString):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::~MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::load):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::play):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::playInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pause):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pauseInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVolume):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setMuted):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVisible):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekWithTolerance):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::waitForSeekCompleted):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekCompleted):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setPreservesPitch):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setHasAvailableVideoFrame):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::updateAllRenderersHaveAvailableSamples):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::durationChanged):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setNaturalSize):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setCDMSession):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::outputObscuredDueToInsufficientExternalProtectionChanged):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::cdmInstanceAttached):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::cdmInstanceDetached):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::attemptToDecryptWithInstance):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::waitingForKeyChanged):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::initializationDataEncountered):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setReadyState):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setNetworkState):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setShouldPlayToPlaybackTarget):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isCurrentPlaybackTargetWireless const):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::logChannel const):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample):
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::toJSONString const):
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::MediaSourcePrivateAVFObjC):
        (WebCore::MediaSourcePrivateAVFObjC::~MediaSourcePrivateAVFObjC):
        (WebCore::MediaSourcePrivateAVFObjC::addSourceBuffer):
        (WebCore::MediaSourcePrivateAVFObjC::logChannel const):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::bufferWasConsumedCallback):
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset):
        (WebCore::SourceBufferPrivateAVFObjC::didFailToParseStreamDataWithError):
        (WebCore::SourceBufferPrivateAVFObjC::processCodedFrame):
        (WebCore::SourceBufferPrivateAVFObjC::willProvideContentKeyRequestInitializationDataForTrackID):
        (WebCore::SourceBufferPrivateAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID):
        (WebCore::SourceBufferPrivateAVFObjC::append):
        (WebCore::SourceBufferPrivateAVFObjC::abort):
        (WebCore::SourceBufferPrivateAVFObjC::resetParserState):
        (WebCore::SourceBufferPrivateAVFObjC::removedFromMediaSource):
        (WebCore::SourceBufferPrivateAVFObjC::setReadyState):
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::SourceBufferPrivateAVFObjC::setCDMSession):
        (WebCore::SourceBufferPrivateAVFObjC::setCDMInstance):
        (WebCore::SourceBufferPrivateAVFObjC::layerDidReceiveError):
        (WebCore::SourceBufferPrivateAVFObjC::outputObscuredDueToInsufficientExternalProtectionChanged):
        (WebCore::SourceBufferPrivateAVFObjC::flush):
        (WebCore::SourceBufferPrivateAVFObjC::flushVideo):
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):
        (WebCore::SourceBufferPrivateAVFObjC::bufferWasConsumed):
        (WebCore::SourceBufferPrivateAVFObjC::setActive):
        (WebCore::SourceBufferPrivateAVFObjC::willSeek):
        (WebCore::SourceBufferPrivateAVFObjC::didBecomeReadyForMoreSamples):
        (WebCore::SourceBufferPrivateAVFObjC::canSwitchToType):
        (WebCore::SourceBufferPrivateAVFObjC::setDecompressionSession):
        (WebCore::SourceBufferPrivateAVFObjC::logChannel const):

2019-02-07  Youenn Fablet  <youenn@apple.com>

        Simplify applyConstraints callbacks
        https://bugs.webkit.org/show_bug.cgi?id=194297

        Reviewed by Eric Carlson.

        Make use of one callback for both success and failure cases.
        No changed of behavior.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::applyConstraints):
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::applyConstraints):
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::applyConstraints):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::create):
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::create):
        * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.cpp:
        (WebCore::MockGStreamerAudioCaptureSource::applyConstraints):
        * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.h:
        * platform/mediastream/gstreamer/MockGStreamerVideoCaptureSource.cpp:
        (WebCore::MockGStreamerVideoCaptureSource::applyConstraints):
        * platform/mediastream/gstreamer/MockGStreamerVideoCaptureSource.h:

2019-02-07  Youenn Fablet  <youenn@apple.com>

        Unable to sign in leetcode.
        https://bugs.webkit.org/show_bug.cgi?id=194366
        rdar://problem/47259025.

        Reviewed by Chris Dumez.

        In case a signal is passed as part of a FetchRequestInit,
        the IDL binding code is throwing an exception in case signal is not an AbortSignal object.
        This breaks an AbortSignal shim used in some web sites.
        Relaxed the IDL binding rule by marking signal as any and doing the conversion in FetchRequest.

        Test: http/wpt/fetch/request-abort.html
        Also covered by manually signing in to leetcode.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::initializeWith):
        * Modules/fetch/FetchRequestInit.h:
        (WebCore::FetchRequestInit::hasMembers const):
        * Modules/fetch/FetchRequestInit.idl:

2019-02-07  Youenn Fablet  <youenn@apple.com>

        Make to clear sources from UserMediaCaptureManagerProxy and UserMediaCaptureManager when no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=194312

        Reviewed by Eric Carlson.

        Add a way for sources to know when they are ended, i.e. that they will never be started again.
        No observable change of behavior.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::requestStop):
        * platform/mediastream/RealtimeMediaSource.h:

2019-02-07  Jer Noble  <jer.noble@apple.com>

        HTMLMediaElement registers wrong ScriptExecutionContext with its ActiveDOMObject parent class
        https://bugs.webkit.org/show_bug.cgi?id=194360

        HTMLMediaElement registers the Document used to create it with ActiveDOMObject, when it should
        really use that Document's contextDocument(). Rather than just fix this in HTMLMediaElement,
        make sure that the correct document is used everywhere by adding a new ActiveDOMObject constructor
        taking a Document&, and making an explicitly deleted Document* constructor to catch any new cases.

        Reviewed by Geoffrey Garen.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::ApplePaySession):
        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::MediaRecorder):
        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::MediaDevices):
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::UserMediaRequest):
        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::PaymentRequest):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::WebAnimation):
        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::FontFaceSet):
        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::ActiveDOMObject):
        * dom/ActiveDOMObject.h:
        * dom/Document.h:
        (WebCore::ActiveDOMObject::ActiveDOMObject):
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::HTMLMarqueeElement):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::HTMLSourceElement):
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::IntersectionObserver):

2019-02-07  Zalan Bujtas  <zalan@apple.com>

        [LFC][Out-of-flow] Use the containing block's padding width when computing min/max width.
        https://bugs.webkit.org/show_bug.cgi?id=194391

        Reviewed by Antti Koivisto.

        The spec is not clear about this but that's what matches the current behaviour.

        Test: fast/block/block-only/absolute-positioned-min-max-percentage-with-parent-padding.html

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):

2019-02-07  Zalan Bujtas  <zalan@apple.com>

        [LFC] Use dedicated data structures for optional used values (input to geometry functions)
        https://bugs.webkit.org/show_bug.cgi?id=194376

        Reviewed by Antti Koivisto.

        This is in preparation for being able to pass in the containing block's width as an optional used value.
        During layout we always have a valid width for the containing block, however it's not the case while computing the preferred width.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowVerticalGeometry): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHorizontalGeometry): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::floatingWidthAndMargin): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin): Deleted.
        (): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin): Deleted.
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        * layout/LayoutUnits.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        * layout/blockformatting/BlockFormattingContext.h:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin): Deleted.
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin const):
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin const):
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin):
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockHeightAndMargin):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

2019-02-07  Antti Koivisto  <antti@apple.com>

        Infinite recursion via CachedResource::~CachedResource
        https://bugs.webkit.org/show_bug.cgi?id=194378
        <rdar://problem/42023295>

        Reviewed by Daniel Bates.

        I don't know the exact steps to trigger this but the mechanism seems clear.

        1) An existing resource is removed from or replaced in CachedResourceLoader::m_documentResources map.
        2) This decrements the handle count of resource and causes it be deleted.
        3) CachedResource::~CachedResource calls m_owningCachedResourceLoader->removeCachedResource(*this). This only happens with
           resources that are "owned" by CachedResourceLoader which is a rare special case (used by image document and if memory cache is disabled).
        4) CachedResourceLoader::removeCachedResource looks up the resource from the map which causes a temporary CachedResourceHandle to be created.
           This increments the handle count of the resource from 0 back to 1.
        5) When the temporary dies, CachedResource::~CachedResource is called again and we cycle back to 3).

        The fix here is simply to remove CachedResourceLoader::removeCachedResource call from ~CachedResource.
        It is a leftover from when the map contained raw pointers instead of owning CachedResourceHandles.

        Since m_documentResources map has a handle to the resource, the only way we are in the destructor is that the resource
        has been removed from the map already (or is in process of being removed like in this crash). Any call that does anything
        other than bail out is going to crash.

        CachedResource::n_owningCachedResourceLoader member and CachedResourceLoader::removeCachedResource function only exist to
        support this erranous call so they are removed as well.

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::~CachedResource):

        This is the substantive change. The rest just removes now-dead code.

        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::setOwningCachedResourceLoader): Deleted.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::~CachedResourceLoader):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::loadResource):
        (WebCore::CachedResourceLoader::garbageCollectDocumentResources):
        (WebCore::CachedResourceLoader::removeCachedResource): Deleted.
        * loader/cache/CachedResourceLoader.h:

2019-02-07  Miguel Gomez  <magomez@igalia.com>

        [WPE] Implement GStreamer based holepunch
        https://bugs.webkit.org/show_bug.cgi?id=193715

        Reviewed by Xabier Rodriguez-Calvar.

        Implement GStreamer based holepunch functionality. Instead of getting the video frames from the
        video sink and drawing then, the player just draws a transparent rectangle on the position where
        the video should be. MediaPlayerPrivateGStreamerBase will instantiate a platform dependant video
        sink which will be in charge of displaying the video frames in some way (usually on a plane below
        the browser), and will push empty frames to the compositor indicating that the rectangle to draw
        should overwrite the existent content. TextureMapperPlatformLayerBuffer::HolePunchClient is used
        to tell the video sink where to position the video so it's set below the browser transparent hole.

        Added ManualTest wpe/video-player-holepunch.html to test the feature.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::shouldIgnoreIntrinsicSize):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::shouldIgnoreIntrinsicSize):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::naturalSize const):
        (WebCore::MediaPlayerPrivateGStreamerBase::swapBuffersIfNeeded):
        (WebCore::setRectangleToVideoSink):
        (WebCore::GStreamerHolePunchClient::GStreamerHolePunchClient):
        (WebCore::MediaPlayerPrivateGStreamerBase::createHolePunchVideoSink):
        (WebCore::MediaPlayerPrivateGStreamerBase::pushNextHolePunchBuffer):
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawSolidColor):
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintSelf):
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.cpp:
        (WebCore::TextureMapperPlatformLayerBuffer::paintToTextureMapper):
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.h:
        (WebCore::TextureMapperPlatformLayerBuffer::setHolePunchClient):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsToPlatformLayer):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::videoBox const):

2019-02-06  Benjamin Poulain  <benjamin@webkit.org>

        Unreviewed, rolling out r240759 and r240944.

        Some timer uses are done off the main thread, WebCore::Timer
        cannot be used

        Reverted changesets:

        "<rdar://problem/47570443> Responsiveness timers are too
        expensive for frequent events"
        https://bugs.webkit.org/show_bug.cgi?id=194003
        https://trac.webkit.org/changeset/240759

        "Use deferrable timer to restart the Responsiveness Timer on
        each wheel event"
        https://bugs.webkit.org/show_bug.cgi?id=194135
        https://trac.webkit.org/changeset/240944

2019-02-06  Keith Rollin  <krollin@apple.com>

        Update .xcfilelist files

        Unreviewed build fix.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:

2019-02-06  Devin Rousso  <drousso@apple.com>

        Web Inspector: DOM: don't send the entire function string with each event listener
        https://bugs.webkit.org/show_bug.cgi?id=194293
        <rdar://problem/47822809>

        Reviewed by Joseph Pecoraro.

        Test: inspector/dom/getEventListenersForNode.html

        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):

2019-02-06  Andy Estes  <aestes@apple.com>

        [Payment Request] It should be possible to require a phonetic name for shipping contacts
        https://bugs.webkit.org/show_bug.cgi?id=194311
        <rdar://46733045>

        Reviewed by Alex Christensen.

        It should be possible to require that a shipping contact has a phonetic name in Payment Request.
        To accomplish this, move requiredShippingContactFields from ApplePayPaymentRequest to
        ApplePayRequestBase so that it can be used as part of an Apple Pay payment method data.

        Since required shipping contact fields can now be specified both in
        requiredShippingContactFields and PaymentOptions, we merge the required fields from these
        two sources such that, e.g., email is required if it is specified in either place.

        So that clients can detect this new feature, the API version number is bumped from 5 to 6.

        Added test cases to ApplePayRequestShippingContact.https.html and ApplePayRequestShippingContactV3.https.html.

        * DerivedSources.make:
        * Modules/applepay/ApplePayPaymentRequest.h:
        * Modules/applepay/ApplePayPaymentRequest.idl:
        * Modules/applepay/ApplePayRequestBase.cpp:
        (WebCore::convertAndValidate):
        * Modules/applepay/ApplePayRequestBase.h:
        * Modules/applepay/ApplePayRequestBase.idl:
        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate):
        * Modules/applepay/PaymentCoordinatorClient.cpp: Added.
        (WebCore::PaymentCoordinatorClient::supportsVersion):
        * Modules/applepay/PaymentCoordinatorClient.h:
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::mergePaymentOptions):
        (WebCore::ApplePayPaymentHandler::show):
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.cpp:
        * testing/MockPaymentContactFields.h: Added.
        (WebCore::MockPaymentContactFields::MockPaymentContactFields):
        * testing/MockPaymentContactFields.idl: Added.
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::showPaymentUI):
        (WebCore::MockPaymentCoordinator::supportsVersion): Deleted.
        * testing/MockPaymentCoordinator.h:
        * testing/MockPaymentCoordinator.idl:

2019-02-06  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] PrivateName to PublicName hash table is wasteful
        https://bugs.webkit.org/show_bug.cgi?id=194277

        Reviewed by Michael Saboff.

        Use WebCoreBuiltinNames instead of adding WebCore names to JSC CommonIdentifiers.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::addCrossOriginPropertyNames):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::getOwnPropertySlotCommon):
        (WebCore::putCommon):
        * bindings/js/WebCoreBuiltinNames.h:

2019-02-06  Keith Rollin  <krollin@apple.com>

        Really enable the automatic checking and regenerations of .xcfilelists during builds
        https://bugs.webkit.org/show_bug.cgi?id=194357
        <rdar://problem/47861231>

        Reviewed by Chris Dumez.

        Bug 194124 was supposed to enable the automatic checking and
        regenerating of .xcfilelist files during the build. While related
        changes were included in that patch, the change to actually enable the
        operation somehow was omitted. This patch actually enables the
        operation. The check-xcfilelist.sh scripts now check
        WK_DISABLE_CHECK_XCFILELISTS, and if it's "1", opts-out the developer
        from the checking.

        No new tests since there should be no observable behavior difference.

        * Scripts/check-xcfilelists.sh:

2019-02-06  John Wilander  <wilander@apple.com>

        Forward Ad Click Attribution data from HTMLAnchorElement::handleClick() to WebKit::NavigationActionData
        https://bugs.webkit.org/show_bug.cgi?id=194325
        <rdar://problem/47840283>

        Reviewed by Chris Dumez.

        No new tests. This is just data forwarding. Once the data is stored, I will create
        test infrastructure to query it.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):
        * loader/AdClickAttribution.h:
        (WebCore::AdClickAttribution::encode const):
        (WebCore::AdClickAttribution::decode):
        (WebCore::AdClickAttribution::Conversion::encode const):
        (WebCore::AdClickAttribution::Conversion::decode):
            Infrastructure for IPC.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::loadURL):
            These functions forward the optional WebCore::AdClickAttribution object
            FrameLoader::loadURL() creates the NavigationAction object and sets the
            WebCore::AdClickAttribution object on there.
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::loadURL):
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::adClickAttribution):
        (WebCore::NavigationAction::setAdClickAttribution):

2019-02-06  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Implement supporting dictionaries for GPUTexture
        https://bugs.webkit.org/show_bug.cgi?id=194354

        Reviewed by Dean Jackson.

        Add dictionaries needed to create a GPUTextureDescriptor.

        No new tests; no change in behavior. 

        New interface and dictionaries added:
        * Modules/webgpu/GPUExtent3D.idl:
        * Modules/webgpu/GPUTextureDescriptor.idl:
        * Modules/webgpu/GPUTextureDimension.idl:
        * Modules/webgpu/GPUTextureUsage.idl:
        * platform/graphics/gpu/GPUExtent3D.h:
        * platform/graphics/gpu/GPUTextureDescriptor.h:
        * platform/graphics/gpu/GPUTextureDimension.h:
        * platform/graphics/gpu/GPUTextureUsage.h:

        Update WebGPUTextureFormatEnum to GPUTextureFormat:
        * Modules/webgpu/WebGPUTextureFormatEnum.h: Removed.
        * Modules/webgpu/GPUTextureFormat.idl: Renamed from WebGPUTextureFormatEnum.idl and updated to hyphen-case.
        * platform/graphics/gpu/GPUTextureFormat.h: Renamed from GPUTextureFormatEnum and updated for hyphen-case IDL.
        * Modules/webgpu/WebGPUSwapChain.cpp:
        * Modules/webgpu/WebGPUSwapChain.h:
        * Modules/webgpu/WebGPUSwapChain.idl:
        * platform/graphics/gpu/GPUSwapChain.h:
        * platform/graphics/gpu/cocoa/GPUSwapChainMetal.mm:
        (WebCore::platformTextureFormatForGPUTextureFormat):
        (WebCore::GPUSwapChain::setFormat):

        Update project files with new symbols:
        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2019-02-12  Dean Jackson  <dino@apple.com>

        BitmapRenderer should handle existing ImageBuffers
        https://bugs.webkit.org/show_bug.cgi?id=194555
        <rdar://problem/47857150>

        Reviewed by Tim Horton.

        Our logic in ImageBitmapRenderingContext assumed that
        it had always created the ImageBuffer being used. However, it's
        valid to call something like toBlob() or toDataURL() before creating
        a context, so we need to handle the case where an ImageBuffer
        already exists.

        Test: fast/canvas/bitmaprenderer-created-after-toBlob.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer const): Move some logic into setImageBuffer.
        (WebCore::HTMLCanvasElement::setImageBuffer const): Make sure to clear the state saver.

2019-02-06  Daniel Bates  <dabates@apple.com>

        Standardize on ControlKey instead of CtrlKey
        https://bugs.webkit.org/show_bug.cgi?id=194317

        Reviewed by Tim Horton.

        * dom/UIEventWithKeyState.cpp:
        (WebCore::UIEventWithKeyState::modifiersFromInitializer):
        (WebCore::UIEventWithKeyState::setModifierKeys):
        * dom/UIEventWithKeyState.h:
        (WebCore::UIEventWithKeyState::ctrlKey const):
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::accessKeyModifiers):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::accessKeyModifiers):
        * platform/PlatformEvent.h:
        (WebCore::PlatformEvent::controlKey const):
        (WebCore::PlatformEvent::PlatformEvent):
        (WebCore::PlatformEvent::ctrlKey const): Deleted.
        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState):
        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::modifiersForGdkKeyEvent):
        * platform/gtk/PlatformMouseEventGtk.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/gtk/PlatformWheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/ios/KeyEventIOS.mm:
        (WebCore::PlatformKeyboardEvent::currentStateOfModifierKeys):
        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::modifiersForEvent):
        * platform/mac/KeyEventMac.mm:
        (WebCore::PlatformKeyboardEvent::currentStateOfModifierKeys):
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::modifiersForEvent):
        * testing/Internals.cpp:
        (WebCore::Internals::accessKeyModifiers const):

2019-02-06  Alex Christensen  <achristensen@webkit.org>

        Fix WatchOS build
        https://bugs.webkit.org/show_bug.cgi?id=194353

        Rubber stamped by Tim Horton and Wenson Hsieh.

        * rendering/RenderThemeIOS.mm:
        (WebCore::iconForAttachment):

2019-02-06  Olivier Blin  <olivier.blin@softathome.com>

        [SVG] fix SVGURIReference build by including SVGElement
        https://bugs.webkit.org/show_bug.cgi?id=194292

        Reviewed by Michael Catanzaro.

        * svg/SVGURIReference.h:
        SVGURIReference is making use of SVGElement in its constructor, but
        it was not declared.

        The issue was not seen in unified builds because it was grouped with
        other files including SVGElement.

2019-02-06  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move line layout code to a dedicated file
        https://bugs.webkit.org/show_bug.cgi?id=194328

        Reviewed by Antti Koivisto.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        (WebCore::Layout::isTrimmableContent): Deleted.
        (WebCore::Layout::InlineFormattingContext::initializeNewLine const): Deleted.
        (WebCore::Layout::InlineFormattingContext::splitInlineRunIfNeeded const): Deleted.
        (WebCore::Layout::InlineFormattingContext::createFinalRuns const): Deleted.
        (WebCore::Layout::InlineFormattingContext::postProcessInlineRuns const): Deleted.
        (WebCore::Layout::InlineFormattingContext::closeLine const): Deleted.
        (WebCore::Layout::InlineFormattingContext::appendContentToLine const): Deleted.
        (WebCore::Layout::InlineFormattingContext::layoutInlineContent const): Deleted.
        (WebCore::Layout::InlineFormattingContext::computeFloatPosition const): Deleted.
        (WebCore::Layout::InlineFormattingContext::placeInFlowPositionedChildren const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::LineLayout::Line::hasContent const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::Line::isClosed const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::Line::isFirstLine const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::Line::runs):
        (WebCore::Layout::InlineFormattingContext::LineLayout::Line::contentLogicalLeft const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::Line::availableWidth const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::Line::lastRunType const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::Line::logicalTop const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::Line::logicalBottom const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::Line::logicalHeight const):
        (WebCore::Layout::InlineFormattingContext::Line::hasContent const): Deleted.
        (WebCore::Layout::InlineFormattingContext::Line::isClosed const): Deleted.
        (WebCore::Layout::InlineFormattingContext::Line::isFirstLine const): Deleted.
        (WebCore::Layout::InlineFormattingContext::Line::runs): Deleted.
        (WebCore::Layout::InlineFormattingContext::Line::contentLogicalLeft const): Deleted.
        (WebCore::Layout::InlineFormattingContext::Line::availableWidth const): Deleted.
        (WebCore::Layout::InlineFormattingContext::Line::lastRunType const): Deleted.
        (WebCore::Layout::InlineFormattingContext::Line::logicalTop const): Deleted.
        (WebCore::Layout::InlineFormattingContext::Line::logicalBottom const): Deleted.
        (WebCore::Layout::InlineFormattingContext::Line::logicalHeight const): Deleted.
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::adjustedLineLogicalLeft): Deleted.
        (WebCore::Layout::InlineFormattingContext::Geometry::justifyRuns): Deleted.
        (WebCore::Layout::InlineFormattingContext::Geometry::computeExpansionOpportunities): Deleted.
        (WebCore::Layout::InlineFormattingContext::Geometry::alignRuns): Deleted.
        (WebCore::Layout::InlineFormattingContext::Geometry::runWidth): Deleted.
        * layout/inlineformatting/Line.cpp:
        (WebCore::Layout::InlineFormattingContext::LineLayout::Line::init):
        (WebCore::Layout::InlineFormattingContext::LineLayout::Line::adjustLogicalLeft):
        (WebCore::Layout::InlineFormattingContext::LineLayout::Line::adjustLogicalRight):
        (WebCore::Layout::InlineFormattingContext::LineLayout::Line::contentLogicalRight const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::Line::appendContent):
        (WebCore::Layout::InlineFormattingContext::LineLayout::Line::close):
        (WebCore::Layout::InlineFormattingContext::Line::init): Deleted.
        (WebCore::Layout::InlineFormattingContext::Line::adjustLogicalLeft): Deleted.
        (WebCore::Layout::InlineFormattingContext::Line::adjustLogicalRight): Deleted.
        (WebCore::Layout::InlineFormattingContext::Line::contentLogicalRight const): Deleted.
        (WebCore::Layout::InlineFormattingContext::Line::appendContent): Deleted.
        (WebCore::Layout::InlineFormattingContext::Line::close): Deleted.

2019-02-06  Youenn Fablet  <youenn@apple.com>

        CoreAudioCaptureSource should not configure its audio unit until it starts producing data
        https://bugs.webkit.org/show_bug.cgi?id=194310

        Reviewed by Eric Carlson.

        Delay the configuration of the audio unit until the source is instructed to start producing data.
        This allows the UIProcess to not start changing the audio unit when
        checking for constraints during getUserMedia call before the prompt.
        Covered by manual testing.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::CoreAudioCaptureSource):
        (WebCore::CoreAudioCaptureSource::initializeToStartProducingData):
        (WebCore::CoreAudioCaptureSource::startProducingData):
        * platform/mediastream/mac/CoreAudioCaptureSource.h:

2019-02-06  Youenn Fablet  <youenn@apple.com>

        Disable audio ducking at Audio Unit setup time
        https://bugs.webkit.org/show_bug.cgi?id=194303

        Reviewed by Eric Carlson.

        When creating a CoreAudioCaptureSource, the audio unit might be
        reconfigured if a past audio capture was done.
        This might trigger audio ducking which is undone in startInternal.
        In some cases, startInternal will never call start.
        In that case, the audio unit will continue ducking the other processing.
        To ensure ducking is disabled, unduck in setupAudioUnit as well as startInternal.

        In addition to that, once a shared unit is created, it stays alive until the UIProcess exits.
        This might affect all applications.
        Instead, whenever the shared unit is stopped, clean it so as to restore the state as if no capture ever happened.
        This has noticeable effects in the quality of audio being played on bluetooth devices.

        Covered by manual tests.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::setupAudioUnit):
        (WebCore::CoreAudioSharedUnit::unduck):
        (WebCore::CoreAudioSharedUnit::startInternal):
        (WebCore::CoreAudioSharedUnit::captureFailed):
        (WebCore::CoreAudioSharedUnit::stopProducingData):

2019-02-06  Antti Koivisto  <antti@apple.com>

        RELEASE_ASSERT(!m_document.isResolvingTreeStyle()) in com.apple.WebKit.WebContent at WebCore: WebCore::StyleResolver::~StyleResolver
        https://bugs.webkit.org/show_bug.cgi?id=194333
        <rdar://problem/47822929>

        Reviewed by Zalan Bujtas.

        Content extensions may mutate the extension stylesheet in the middle of a style resolution as a result of
        the legacy animation code triggering a resource load.

        Test: http/tests/contentextensions/css-display-none-keyframe.html

        * style/StyleScope.cpp:
        (WebCore::Style::Scope::scheduleUpdate):

        Avoid clearing the style resolver if we are in the middle of a style resolution.
        A better fix that avoid doing this in the first place is tracked by https://bugs.webkit.org/show_bug.cgi?id=194335.

2019-02-06  Pablo Saavedra  <psaavedra@igalia.com>

        Build failure after r240315
        https://bugs.webkit.org/show_bug.cgi?id=194341

        Reviewed by Wenson Hsieh.

        * bindings/js/JSUndoItemCustom.cpp:
        (WebCore::JSUndoItemOwner::isReachableFromOpaqueRoots):

2019-02-05  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r240909): Release assert in FrameLoader::loadURL when navigating with a non-existent target name
        https://bugs.webkit.org/show_bug.cgi?id=194329

        Reviewed by Geoffrey Garen.

        The bug was caused by the code path for when navigating with a specific target frame name that does not exist
        never setting the load type of PolicyChecker. As a result, we would use whatever load type used in the previous
        navigation, resulting in this release assertion.

        Updating the load type here should in theory fix the underlying bug r240909 was meant to catch & fix.

        Test: fast/loader/navigate-with-new-target-after-back-forward-navigation.html

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

2019-02-05  Claudio Saavedra  <csaavedra@igalia.com>

        [FreeType] Build fix for Debian stable

        Unreviewed build fix.

        Debian stable currently has a version of fontconfig that doesn't
        yet have FC_COLOR. #ifdef its use to fix the build.

        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::systemFallbackForCharacters):

2019-02-05  Alex Christensen  <achristensen@webkit.org>

        Stop using blobRegistry in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=194027

        Reviewed by Youenn Fablet.

        Also stop using NetworkBlobRegistry::singleton.
        Instead, have the NetworkProcess own a NetworkBlobRegistry which owns a BlobRegistryImpl.
        We now have to resolve all blob file references while we still have a
        NetworkConnectionToWebProcess/NetworkProcess/NetworkBlobRegistry/BlobRegistryImpl instead of
        using the singleton after we have passed everything to the loading code, but it works the same
        as it did before.  We must consume the sandbox extension from the BlobRegistryImpl before using
        the resolved files, so I pass around a Vector<RefPtr<WebCore::BlobDataFileReference>> so we know
        which extensions to revoke.

        * platform/network/BlobRegistryImpl.h:
        * platform/network/FormData.cpp:
        (WebCore::appendBlobResolved):
        (WebCore::FormData::resolveBlobReferences):
        * platform/network/FormData.h:
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::createHTTPBodyCFReadStream):
        * platform/network/curl/CurlFormDataStream.cpp:
        (WebCore::CurlFormDataStream::CurlFormDataStream):

2019-02-05  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r240984.

        Revision casued two API timeouts

        Reverted changeset:

        "Stop using blobRegistry in NetworkProcess"
        https://bugs.webkit.org/show_bug.cgi?id=194027
        https://trac.webkit.org/changeset/240984

2019-02-05  Keith Rollin  <krollin@apple.com>

        Enable the automatic checking and regenerations of .xcfilelists during builds
        https://bugs.webkit.org/show_bug.cgi?id=194124
        <rdar://problem/47721277>

        Reviewed by Tim Horton.

        Bug 193790 add a facility for checking -- during build time -- that
        any needed .xcfilelist files are up-to-date and for updating them if
        they are not. This facility was initially opt-in by setting
        WK_ENABLE_CHECK_XCFILELISTS until other pieces were in place and until
        the process seemed robust. Its now time to enable this facility and
        make it opt-out. If there is a need to disable this facility, set and
        export WK_DISABLE_CHECK_XCFILELISTS=1 in your environment before
        running `make` or `build-webkit`, or before running Xcode from the
        command line.

        Additionally, remove the step that generates a list of source files
        going into the UnifiedSources build step. It's only necessarily to
        specify Sources.txt and SourcesCocoa.txt as inputs.

        No new tests since there should be no observable behavior difference.

        * UnifiedSources-input.xcfilelist: Removed.
        * WebCore.xcodeproj/project.pbxproj:

2019-02-05  Keith Rollin  <krollin@apple.com>

        Update .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=194121
        <rdar://problem/47720863>

        Reviewed by Tim Horton.

        Preparatory to enabling the facility for automatically updating the
        .xcfilelist files, check in a freshly-updated set so that not everyone
        runs up against having to regenerate them themselves.

        No new tests since there should be no observable behavior difference.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:

2019-02-05  Alex Christensen  <achristensen@webkit.org>

        Stop using blobRegistry in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=194027

        Reviewed by Youenn Fablet.

        Also stop using NetworkBlobRegistry::singleton.
        Instead, have the NetworkProcess own a NetworkBlobRegistry which owns a BlobRegistryImpl.
        We now have to resolve all blob file references while we still have a
        NetworkConnectionToWebProcess/NetworkProcess/NetworkBlobRegistry/BlobRegistryImpl instead of
        using the singleton after we have passed everything to the loading code, but it works the same
        as it did before.  We must consume the sandbox extension from the BlobRegistryImpl before using
        the resolved files, so I pass around a Vector<RefPtr<WebCore::BlobDataFileReference>> so we know
        which extensions to revoke.

        * platform/network/BlobRegistryImpl.h:
        * platform/network/FormData.cpp:
        (WebCore::appendBlobResolved):
        (WebCore::FormData::resolveBlobReferences):
        * platform/network/FormData.h:
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::createHTTPBodyCFReadStream):
        * platform/network/curl/CurlFormDataStream.cpp:
        (WebCore::CurlFormDataStream::CurlFormDataStream):

2019-02-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r240742.

        Causes crashes on iOS simulator.

        Reverted changeset:

        "[iOS] Keyups for non-modifier keys identified as "Dead" when
        not focused in a content-editable element"
        https://bugs.webkit.org/show_bug.cgi?id=192824
        https://trac.webkit.org/changeset/240742

2019-02-05  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] collectInlineContent should use pre-computed margins, paddings and borders
        https://bugs.webkit.org/show_bug.cgi?id=194269

        Reviewed by Antti Koivisto.

        In this patch we pre-compute the margins padding and borders for formatting context roots, replaced boxes and non-replaced containers.
        These property values are input to collectInlineContent's inline item detaching logic.

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::nextInPreOrder):
        (WebCore::Layout::InlineFormattingContext::layout const):
        (WebCore::Layout::InlineFormattingContext::computeMarginBorderAndPadding const):
        (WebCore::Layout::InlineFormattingContext::collectInlineContent const):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/layouttree/LayoutBox.h: ran out bits. 

2019-02-05  Antoine Quint  <graouts@apple.com>

        REGRESSION (r240579): com.apple.WebKit.WebContent at WebCore: WebCore::Document::absoluteEventRegionForNode
        https://bugs.webkit.org/show_bug.cgi?id=194284
        <rdar://problem/47774298>

        Reviewed by Antti Koivisto.

        The m_touchActionElements list needs to be HashSet<RefPtr<Element>> instead of HashSet<Element*>. It was initially storing raw pointers based on m_touchEventTargets
        which is an EventTargetSet (typedef’d to HashCountedSet<Node*>), but that's because these nodes have an event listener registered for them and as such are kept alive,
        whereas elements with a touch-action property aren’t. Elements are removed from this list from Document::nodeWillBeRemoved() and from Document::updateTouchActionElements(),
        the latter being called from Style::TreeResolver::resolveElement().

        * dom/Document.cpp:
        (WebCore::Document::updateTouchActionElements):
        * dom/Document.h:
        (WebCore::Document::touchActionElements const):

2019-02-05  Benjamin Poulain  <benjamin@webkit.org>

        Hit testing functions optimizations
        https://bugs.webkit.org/show_bug.cgi?id=194073
        <rdar://problem/47692312>

        Reviewed by Zalan Bujtas.

        This patch implements some easy optimizations that speed up
        hit testing without changing the algorithms.

        * page/FrameViewLayoutContext.h:
        The code for:
            view().frameView().layoutContext().isPaintOffsetCacheEnabled()
        followed by:
            view().frameView().layoutContext().layoutState()
        was loading all the intermediate values twice and calling layoutState()
        twice.

        By marking the function as pure, Clang can CSE the whole thing and
        remove the duplicated code.

        * platform/graphics/LayoutRect.h:
        (WebCore::LayoutRect::isInfinite const):
        That one is pretty funny.

        Since LayoutRect::isInfinite() was implemented before operator==() is
        declared, the compiler was falling back to the implicit convertion to FloatRect()
        before doing any comparison.

        This explains a bunch of the convertions to float when using LayoutRect.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer const):
        Just reoder to make the register nice and clean for the optimization described above.

2019-02-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Shrink size of VM by lazily allocating IsoSubspaces for non-common types
        https://bugs.webkit.org/show_bug.cgi?id=193993

        Reviewed by Keith Miller.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bridge/runtime_method.h:

2019-02-04  Simon Fraser  <simon.fraser@apple.com>

        Move some macOS/iOS scrolling code into the scrolling/cocoa directory
        https://bugs.webkit.org/show_bug.cgi?id=194245

        Reviewed by Zalan Bujtas.

        ScrollingTreeFixedNode and ScrollingTreeStickyNode are used on iOS and macOS, so move them to the cocoa
        directory.

        Standardize on the ordering of ENABLE(ASYNC_SCROLLING) && PLATFORM(MAC).

        Stop building ScrollingThread for iOS (it's never used), and stub out some functions so things build.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::initializeRunLoop):
        (WebCore::ScrollingThread::wakeUpRunLoop):
        (WebCore::ScrollingThread::threadRunLoopSourceCallback):
        * page/scrolling/cocoa/ScrollingTreeFixedNode.h: Renamed from Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.h.
        * page/scrolling/cocoa/ScrollingTreeFixedNode.mm: Renamed from Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.mm.
        * page/scrolling/cocoa/ScrollingTreeStickyNode.h: Renamed from Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.h.
        * page/scrolling/cocoa/ScrollingTreeStickyNode.mm: Renamed from Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.mm.
        * page/scrolling/mac/ScrollingThreadMac.mm:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:

2019-02-04  Ms2ger  <Ms2ger@igalia.com>

        [GTK][WPE] Need a function to convert internal URI to display ("pretty") URI
        https://bugs.webkit.org/show_bug.cgi?id=174816

        Reviewed by Michael Catanzaro.

        Tests: enabled fast/url/user-visible/.

        * testing/Internals.cpp:
        (WebCore::Internals::userVisibleString): Enable method on all platforms.

2019-02-04  Fujii Hironori  <Hironori.Fujii@sony.com>

        [curl] ASSERTION FAILED: !m_didNotifyResponse || m_multipartHandle
        https://bugs.webkit.org/show_bug.cgi?id=190895

        Reviewed by Ross Kirsling.

        An assertion was failing in CurlRequest::invokeDidReceiveResponse
        because DidReceiveResponse was already dispatched. This condition
        was met if CurlRequestScheduler::completeTransfer is called while
        waiting for the reply for the first DidReceiveResponse.

        No new tests, covered by existing tests.

        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::needToInvokeDidReceiveResponse const):
        Return true if m_didNotifyResponse is false disregard to
        m_didReturnFromNotify.

2019-02-04  Said Abou-Hallawa  <said@apple.com>

        [CG] Enable setAdditionalSupportedImageTypes for WK1
        https://bugs.webkit.org/show_bug.cgi?id=194190

        Reviewed by Tim Horton.

        Move the function webCoreStringVectorFromNSStringArray from WebKit to
        WebCore so it can be used by both WebKit and WebKitLegacy.

        * platform/mac/StringUtilities.h:
        * platform/mac/StringUtilities.mm:
        (WebCore::webCoreStringVectorFromNSStringArray):

2019-02-04  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Code clean-up for RenderPipeline backend
        https://bugs.webkit.org/show_bug.cgi?id=194238

        Reviewed by Dean Jackson.

        Replace dot syntax setters with calls to setter methods, and remove unnecessary setter calls for 
        the input state's descriptor arrays.

        Covered by existing tests; no change in behavior.

        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::tryCreateMtlDepthStencilState): Refactor to use implicit setters rather than dot syntax.
        (WebCore::setInputStateForPipelineDescriptor): Ditto, and remove unnecessary setter calls on array objects.

2019-02-04  Benjamin Poulain  <benjamin@webkit.org>

        Use deferrable timer to restart the Responsiveness Timer on each wheel event
        https://bugs.webkit.org/show_bug.cgi?id=194135
        <rdar://problem/47724099>

        Reviewed by Simon Fraser.

        The original DeferrableOneShotTimer was not really deferrable.
        What it allows is to restart the count down from scratch after
        firing.

        For this optimization, I want to keep the correct timing but avoid
        starting a real timer every time.

        I renamed DeferrableOneShotTimer to ResettableOneShotTimer and
        created a real DeferrableOneShotTimer that support deadlines.

        * css/CSSImageGeneratorValue.cpp:
        * html/HTMLPlugInImageElement.h:
        * loader/cache/CachedResource.h:
        * platform/Timer.cpp:
        (WebCore::DeferrableOneShotTimer::startOneShot):
        (WebCore::DeferrableOneShotTimer::fired):
        * platform/Timer.h:
        (WebCore::TimerBase::nextFireTime const):
        (WebCore::ResettableOneShotTimer::ResettableOneShotTimer):
        (WebCore::DeferrableOneShotTimer::DeferrableOneShotTimer):
        (WebCore::DeferrableOneShotTimer::stop):
        (WebCore::DeferrableOneShotTimer::restart): Deleted.
        * platform/graphics/ca/TileController.h:
        * platform/graphics/cg/SubimageCacheWithTimer.h:

2019-02-04  Antoine Quint  <graouts@apple.com>

        Use constants for pointer types
        https://bugs.webkit.org/show_bug.cgi?id=194232

        Reviewed by Dean Jackson.

        We cannot use an enum for the pointer type since a custom pointer type can be created by developers when creating a
        pointer event using JavaScript, but we can at least used string constants for the ones created internally.

        * dom/PointerEvent.cpp:
        (WebCore::PointerEvent::mousePointerType):
        (WebCore::PointerEvent::penPointerType):
        (WebCore::PointerEvent::touchPointerType):
        * dom/PointerEvent.h:
        * dom/ios/PointerEventIOS.cpp:

2019-02-04  Zalan Bujtas  <zalan@apple.com>

        [First paint] Adjust "finishedParsingMainDocument" flag by taking deferred and async scripts into account.
        https://bugs.webkit.org/show_bug.cgi?id=194168

        Reviewed by Simon Fraser.

        First paint should not be blocked by async or deferred scripts.

        * page/FrameView.cpp:
        (WebCore::FrameView::qualifiesAsVisuallyNonEmpty const):

2019-02-04  Simon Fraser  <simon.fraser@apple.com>

        Async overflow scroll with border-radius renders incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=194205
        <rdar://problem/47771668>

        Reviewed by Zalan Bujtas.

        When an element has composited overflow:scroll and border-radius, we need to make a layer
        to clip to the inside of the border radius if necessary.

        Existing code simply turned off needsDescendantsClippingLayer for composited scrolling
        layers, but now we check to see if the inner border is rounded. If we have both a m_childContainmentLayer
        and scrolling layers, we need to adjust the location of the scrolling layers (which are parented
        in m_childContainmentLayer).

        Also fix offsetFromRenderer for these layers; it's positive for layers inset from the top left
        of the border box.

        Tests: compositing/clipping/border-radius-async-overflow-clipping-layer.html
               compositing/clipping/border-radius-async-overflow-non-stacking.html
               compositing/clipping/border-radius-async-overflow-stacking.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::updateChildClippingStrategy): Layout is always up-to-date now, so remove the comment.

2019-02-04  Simon Fraser  <simon.fraser@apple.com>

        PageOverlayController's layers should be created lazily
        https://bugs.webkit.org/show_bug.cgi?id=194199

        Reviewed by Tim Horton.

        Expose PageOverlayController::hasDocumentOverlays() and hasViewOverlays()
        and use them to only parent the overlay-hosting layers when necessary.

        For document overlays, RenderLayerCompositor::appendDocumentOverlayLayers() can
        simply do nothing if there are none. Updates are triggered via Page::installedPageOverlaysChanged(),
        which calls FrameView::setNeedsCompositingConfigurationUpdate() to trigger the root layer
        compositing updates that parents the layerWithDocumentOverlays().

        View overlays are added to the layer tree via the DrawingArea. When we go between having
        none and some view overlays, Page::installedPageOverlaysChanged() calls attachViewOverlayGraphicsLayer()
        on the ChromeClient, and the DrawingArea responds by calling updateRootLayers() and scheduling a
        compositing flush (this has to be done manually because view overlay layers are outside the
        subtree managed by RenderLayerCompositor).
        
        Now that GraphicsLayers are ref-counted, we can let the DrawingArea simply retain its m_viewOverlayRootLayer;
        there is no need for RenderLayerCompositor::attachRootLayer()/detachRootLayer() to do anything with view
        overlay layers. This implies that a page can navigate (new FrameView) and view overlays will persist, without
        having to be manually removed and re-added. We can also remove the Frame argument to attachViewOverlayGraphicsLayer().

        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::setNeedsCompositingConfigurationUpdate): These functions need to schedule a compositing flush
        because there may be nothing else that does.
        (WebCore::FrameView::setNeedsCompositingGeometryUpdate):
        * page/Page.cpp:
        (WebCore::Page::installedPageOverlaysChanged):
        * page/Page.h:
        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::hasDocumentOverlays const):
        (WebCore::PageOverlayController::hasViewOverlays const):
        (WebCore::PageOverlayController::attachViewOverlayLayers): PageOverlayController has the Page so it
        might as well be the one to call through the ChromeClient.
        (WebCore::PageOverlayController::detachViewOverlayLayers):
        (WebCore::PageOverlayController::installPageOverlay):
        (WebCore::PageOverlayController::uninstallPageOverlay):
        * page/PageOverlayController.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers): isFullUpdate is always true; remove it.
        (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers):
        (WebCore::RenderLayerCompositor::attachRootLayer):
        (WebCore::RenderLayerCompositor::detachRootLayer):

2019-02-04  Eric Liang  <ericliang@apple.com>

        When performing Increment or Decrement on sliders, check to see if the slider is disabled.
        https://bugs.webkit.org/show_bug.cgi?id=173497

        Reviewed by Chris Fleizach.

        Test: accessibility/set-value-not-work-for-disabled-sliders.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::alterSliderValue):

2019-02-04  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: leak WebIDBConnectionToServer in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=193688
        <rdar://problem/47353263>

        Reviewed by Geoffrey Garen.

        Let IDBConnectionToServer keep a WeakPtr of IDBConnectionToServerDelegate.

        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::IDBConnectionToServer):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:

2019-02-04  Youenn Fablet  <youenn@apple.com>

        Make sure to remove the device observer in AVVideoCaptureSource
        https://bugs.webkit.org/show_bug.cgi?id=194181
        <rdar://problem/47739247>

        Reviewed by Eric Carlson.

        Make sure to remove the device observer when the observer is destroyed.
        To simplify things, add the observer in AVVideoCaptureSource constructor and remove it in the destructor.

        Make also sure the session observer is also removed whenever the session is released by AVVideoCaptureSource.

        Covered by manual test.

       * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::AVVideoCaptureSource):
        (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource):
        (WebCore::AVVideoCaptureSource::initializeSession):
        (WebCore::AVVideoCaptureSource::clearSession):
        (WebCore::AVVideoCaptureSource::stopProducingData):
        (WebCore::AVVideoCaptureSource::setupSession):

2019-02-04  Antoine Quint  <graouts@apple.com>

        Use a dedicated type instead of int32_t for pointer identifiers
        https://bugs.webkit.org/show_bug.cgi?id=194217

        Reviewed by Antti Koivisto.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/PointerEvent.h:
        * dom/PointerID.h: Added.
        * page/PointerCaptureController.cpp:
        (WebCore::PointerCaptureController::setPointerCapture):
        (WebCore::PointerCaptureController::releasePointerCapture):
        (WebCore::PointerCaptureController::hasPointerCapture):
        (WebCore::PointerCaptureController::touchEndedOrWasCancelledForIdentifier):
        (WebCore::PointerCaptureController::hasCancelledPointerEventForIdentifier):
        (WebCore::PointerCaptureController::cancelPointer):
        * page/PointerCaptureController.h:

2019-02-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Unable to make a selection in jsfiddle.net using arrow keys when requesting desktop site
        Followup to https://bugs.webkit.org/show_bug.cgi?id=193758

        Reviewed by Daniel Bates.

        Put the iOS-specific behavior behind an EditingBehavior check, rather than a compile-time guard. No change in
        behavior.

        * editing/EditingBehavior.h:
        (WebCore::EditingBehavior::shouldMoveSelectionToEndWhenFocusingTextInput const):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setDefaultSelectionAfterFocus):

2019-02-04  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Make InlineFormattingContext::collectInlineContent non-recursive.
        https://bugs.webkit.org/show_bug.cgi?id=194210

        Reviewed by Antti Koivisto.

        Use iterative algorithm to collect inline content (and add breaking rules).
        This is in preparation for fixing the inline preferred width computation.  

        * layout/Verification.cpp:
        (WebCore::Layout::resolveForRelativePositionIfNeeded):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::addDetachingRules):
        (WebCore::Layout::createAndAppendInlineItem):
        (WebCore::Layout::InlineFormattingContext::collectInlineContent const):
        (WebCore::Layout::InlineFormattingContext::collectInlineContentForSubtree const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:

2019-02-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix unused variable warnings introduced in r240912
        https://bugs.webkit.org/show_bug.cgi?id=194198
        <rdar://problem/47776051>

        * page/FrameView.cpp:
        (WebCore::FrameView::setNeedsCompositingConfigurationUpdate):
        (WebCore::FrameView::setNeedsCompositingGeometryUpdate):

2019-02-04  Frederic Wang  <fwang@igalia.com>

        [css-scroll-snap] scroll-snap-align not honored on child with non-visible overflow
        https://bugs.webkit.org/show_bug.cgi?id=191816

        Reviewed by Wenson Hsieh.

        This patch fixes a bug that prevents children of a scroll container to create snap positions
        when they have non-visible overflow. This happens because for such a child, the function
        RenderBox::findEnclosingScrollableContainer() will return the child itself rather than the
        scroll container. To address that issue, we introduce a new
        RenderObject::enclosingScrollableContainerForSnapping() helper function that ensures that
        a real RenderBox ancestor is returned.

        Test: css3/scroll-snap/scroll-snap-children-with-overflow.html

        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::updateSnapOffsetsForScrollableArea): Use enclosingScrollableContainerForSnapping()
        so that we don't skip children with non-visible overflow.
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::styleDidChange): Ditto. The new function calls
        enclosingBox().
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::enclosingScrollableContainerForSnapping const): Return
        the scrollable container of the enclosing box. If it is actually the render object itself
        then start the search from the parent box instead.
        * rendering/RenderObject.h: Declare enclosingScrollableContainerForSnapping(). 

2019-02-04  Antti Koivisto  <antti@apple.com>

        Rename GraphicsLayer and PlatformCALayer scrolling layer type enum values to be less ambiguous
        https://bugs.webkit.org/show_bug.cgi?id=194215

        Reviewed by Frédéric Wang.

        GraphicsLayer::Type::Scrolling -> GraphicsLayer::Type::ScrollContainer
        PlatformCALayer::LayerTypeScrollingLayer -> PlatformCALayer::LayerTypeScrollContainerLayer

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::supportsLayerType):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayer::supportsLayerType):
        (WebCore::GraphicsLayerCA::initialize):
        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::operator<<):
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::PlatformCALayerCocoa):
        (WebCore::PlatformCALayerCocoa::commonInit):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateScrollingLayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::ensureRootLayer):

2019-02-03  Antti Koivisto  <antti@apple.com>

        [iOS] Tiles not created in large scrollable iframes
        https://bugs.webkit.org/show_bug.cgi?id=193665

        Reviewed by Simon Fraser.

        We are not syncing scroll position back to the graphics layer tree correctly.

        Test by Frédéric Wang.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::reconcileScrollingState):
        (WebCore::AsyncScrollingCoordinator::reconcileScrollPosition):

        Factor setting and syncing scrolling layer positions into a function.
        Use bounds.origin scrolling mechanic when scrollContainerLayer is present.

        (WebCore::AsyncScrollingCoordinator::scrollableAreaScrollbarLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::setSynchronousScrollingReasons):
        (WebCore::AsyncScrollingCoordinator::updateScrollLayerPosition): Deleted.
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::scrollContainerLayerForFrameView):
        (WebCore::ScrollingCoordinator::scrolledContentsLayerForFrameView):
        (WebCore::ScrollingCoordinator::scrollLayerForFrameView): Deleted.
        * page/scrolling/ScrollingCoordinator.h:
        * rendering/RenderLayerCompositor.cpp:

        Rename scrollLayer to scrolledContentsLayer according to out preferred naming scheme and use it in that role only.
        Add scrollContainerLayer as a separate layer. It is only constructed when using async scrolling on iOS.

        (WebCore::RenderLayerCompositor::~RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::customPositionForVisibleRectComputation const):
        (WebCore::RenderLayerCompositor::visibleRectForLayerFlushing const):
        (WebCore::RenderLayerCompositor::didChangePlatformLayerForLayer):
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):
        (WebCore::RenderLayerCompositor::updateScrollLayerPosition):
        (WebCore::RenderLayerCompositor::frameViewDidScroll):
        (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForHeader):
        (WebCore::RenderLayerCompositor::updateLayerForFooter):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::ensureRootLayer):
        (WebCore::RenderLayerCompositor::destroyRootLayer):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForScrollingRole):
        * rendering/RenderLayerCompositor.h:

2019-02-03  Simon Fraser  <simon.fraser@apple.com>

        Make setNeedsLayout on the root more explicitly about triggering its side-effects
        https://bugs.webkit.org/show_bug.cgi?id=194198

        Reviewed by Antti Koivisto.

        Calling setNeedsLayout() on the FrameView or RenderView is an odd concept; the render tree
        generally manages its own dirty state.

        Most callers of setNeedsLayout() on the root are really trying to trigger the side-effects
        of layout, like compositing updates, which are required when view configuration state, like
        headers, footers and transparency, change. These dependencies are currently implicit and
        poorly defined.

        Renaming "setNeedsLayout" on FrameView is a step towards being more explicit about pure
        rendering updates, vs updates of downstream data strutures like compositing. It's now called
        setNeedsLayoutAfterViewConfigurationChange(). In addition, expose
        setNeedsCompositingConfigurationUpdate() and setNeedsCompositingGeometryUpdate() so callers
        can trigger the appropriate types of compositing updates on the root layer.

        In addition, FrameViewLayoutContext::setNeedsLayoutAfterViewConfigurationChange() schedules a
        layout. Withtout this, some callers would dirty the RenderView's layout but rely on some
        other trigger to make the layout happen.

        This cleanup was prompted by noticing that FrameView::setHeaderHeight() dirtied layout
        but never scheduled it, making banner insertion in MiniBrowser unreliable.

        This patch also removes the aliasing of headerHeight/footerHeight between Page and
        FrameView. Banners are a property of Page, so FrameView fetches the banner heights
        from Page.

        * page/FrameView.cpp:
        (WebCore::FrameView::headerHeight const):
        (WebCore::FrameView::footerHeight const):
        (WebCore::FrameView::availableContentSizeChanged):
        (WebCore::FrameView::setNeedsLayoutAfterViewConfigurationChange):
        (WebCore::FrameView::setNeedsCompositingConfigurationUpdate):
        (WebCore::FrameView::setNeedsCompositingGeometryUpdate):
        (WebCore::FrameView::scheduleSelectionUpdate):
        (WebCore::FrameView::setTransparent):
        (WebCore::FrameView::setBaseBackgroundColor):
        (WebCore::FrameView::setAutoSizeFixedMinimumHeight):
        (WebCore::FrameView::enableAutoSizeMode):
        (WebCore::FrameView::setHeaderHeight): Deleted.
        (WebCore::FrameView::setFooterHeight): Deleted.
        (WebCore::FrameView::setNeedsLayout): Deleted.
        * page/FrameView.h:
        * page/FrameViewLayoutContext.cpp:
        (WebCore::FrameViewLayoutContext::setNeedsLayoutAfterViewConfigurationChange):
        (WebCore::FrameViewLayoutContext::setNeedsLayout): Deleted.
        * page/FrameViewLayoutContext.h:
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor):
        (WebCore::Page::setHeaderHeight):
        (WebCore::Page::setFooterHeight):
        (WebCore::Page::addHeaderWithHeight): Deleted.
        (WebCore::Page::addFooterWithHeight): Deleted.
        * page/Page.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setHeaderHeight):
        (WebCore::Internals::setFooterHeight):

2019-02-03  John Wilander  <wilander@apple.com>

        Parse and handle Ad Click Attribution attributes in HTMLAnchorElement::handleClick()
        https://bugs.webkit.org/show_bug.cgi?id=194104
        <rdar://problem/47649991>

        Reviewed by Chris Dumez, Daniel Bates, and Darin Adler.

        Test: http/tests/adClickAttribution/anchor-tag-attributes-validation.html

        This patch adds parsing and validation of the two new Ad Click Attribution
        attributes in anchor elements: adcampaignid and addestination. The data is
        not yet forwarded into the loader.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAdClickAttribution const):
        (WebCore::HTMLAnchorElement::handleClick):
            Now calls HTMLAnchorElement::parseAdClickAttribution().
        * html/HTMLAnchorElement.h:
        * loader/AdClickAttribution.h:
            Made WebCore::AdClickAttribution copyable since it's needed to have it be
            WTF::Optional. Also made AdClickAttribution::MaxEntropy public. Changed
            numeric types from unsigned short to uint32_t.
        (WebCore::AdClickAttribution::Campaign::isValid const):
        (WebCore::AdClickAttribution::Conversion::isValid const):

2019-02-03  Ryosuke Niwa  <rniwa@webkit.org>

        Validate navigation policy decisions to avoid crashes in continueLoadAfterNavigationPolicy
        https://bugs.webkit.org/show_bug.cgi?id=194189

        Reviewed by Geoffrey Garen.

        Introduced PolicyCheckIdentifier to pair each navigation policy check request with a decision,
        and deployed it in PolicyChecker. The identifier is passed from WebContent process to UI process
        in WebKit2, and passed it back with the policy decision.

        Because PolicyCheckIdentifier embeds the process identifier from which a navigation policy is checked,
        we would be able to detect when UI process had sent the decision to a wrong WebContent process.

        This patch also adds release assertions to make sure history().provisionalItem() is set whenever
        we're requesting a navigation policy check.

        These code changes should either:
        1. Fix crashes in FrameLoader::continueLoadAfterNavigationPolicy where isBackForwardLoadType would
           return true yet history().provisionalItem() is null.
        2. Detect a bug that UI process can send a navigation policy decision to a wrong WebContent process.
        3. Rule out the possibility that (2) exists.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::responseReceived):
        * loader/EmptyClients.cpp:
        (WebCore::EmptyFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebCore::EmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkContentPolicy):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::loadPostRequest):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/FrameLoaderTypes.h:
        (WebCore::PolicyCheckIdentifier): Added.
        (WebCore::PolicyCheckIdentifier::operator== const): Added.
        (WebCore::PolicyCheckIdentifier::PolicyCheckIdentifier): Added.
        (WebCore::PolicyCheckIdentifier::encode const): Added.
        (WebCore::PolicyCheckIdentifier::decode): Added.
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyCheckIdentifier::generate):
        (WebCore::PolicyCheckIdentifier::isValidFor): Returns true if the identifer matches. Also release asserts
        that the process ID is same, and that m_check is always not zero (meaning it's a generated value).
        The failure of these release assertions would indicate that there is a bug in UI process, which results in
        a policy decision response being sent to a wrong Web process.
        (WebCore::PolicyChecker::checkNavigationPolicy): Exit early if isValidFor fails.
        (WebCore::PolicyChecker::checkNewWindowPolicy):

2019-02-03  Antti Koivisto  <antti@apple.com>

        Don't include ScrollCoordinator.h from Element.h
        https://bugs.webkit.org/show_bug.cgi?id=194206

        Reviewed by Daniel Bates.

        * dom/Element.h:

2019-02-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unable to move selection into editable roots with 0 height
        https://bugs.webkit.org/show_bug.cgi?id=194143
        <rdar://problem/47767284>

        Reviewed by Ryosuke Niwa.

        Currently, positions inside editable elements of height 0 are not considered to be candidates when
        canonicalizing a position to its visible counterpart. This prevents us from moving the selection into these
        editable roots at all. To fix this, we relax this constraint by allowing positions anchored by root editable
        elements to be candidates.

        Test: editing/selection/insert-text-in-empty-content-editable.html

        * dom/Position.cpp:
        (WebCore::Position::isCandidate const):

2019-02-03  Simon Fraser  <simon.fraser@apple.com>

        Tidyup of Pagination and FrameView m_mediaType initialization
        https://bugs.webkit.org/show_bug.cgi?id=194203

        Reviewed by Darin Adler.

        Fix post-commit feedback on lines around code changed in r240901.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        * page/FrameView.h:
        * rendering/Pagination.h:
        (WebCore::Pagination::operator!= const):

2019-02-03  Megan Gardner  <megan_gardner@apple.com>

        Turn on Smart Paste
        https://bugs.webkit.org/show_bug.cgi?id=193786

        Reviewed by Ryosuke Niwa.

        Turned on a modified tests:
        LayoutTests/editing/pasteboard/smart-paste-001.html
        LayoutTests/editing/pasteboard/smart-paste-002.html
        LayoutTests/editing/pasteboard/smart-paste-003.html
        LayoutTests/editing/pasteboard/smart-paste-004.html
        LayoutTests/editing/pasteboard/smart-paste-005.html
        LayoutTests/editing/pasteboard/smart-paste-006.html
        LayoutTests/editing/pasteboard/smart-paste-007.html
        LayoutTests/editing/pasteboard/smart-paste-008.html

        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::canSmartReplace):
        Turn on smart replace.

2019-02-02  Simon Fraser  <simon.fraser@apple.com>

        Tidy up data memebers of FrameView and related classes to shrink class sizes
        https://bugs.webkit.org/show_bug.cgi?id=194197

        Reviewed by Zalan Bujtas.

        Make various enums 8-bit. Re-order data members of FrameView, FrameViewLayoutContext, Widget
        and ScrollView to optimize padding.

        Use more data member initializers.

        This shrinks FrameView from 1168 (144 padding bytes) to 1096 (96 padding bytes).

        * dom/Element.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        * page/FrameView.h:
        * page/FrameViewLayoutContext.h:
        * platform/ScrollTypes.h:
        * platform/ScrollView.h: Data members should come after member functions.
        * platform/Widget.h:
        * rendering/Pagination.h:
        (WebCore::Pagination::Pagination): Deleted.

2019-02-02  Simon Fraser  <simon.fraser@apple.com>

        Rename "scrollingLayer" in RenderLayerBacking to "scrollContainerLayer" for clarity
        https://bugs.webkit.org/show_bug.cgi?id=194194

        Rubber-stampted by Antti Koivisto.

        Our desired terminology is "scrollContainerLayer" for the outer, clipping layer
        for scrolling, and "scrolledContentsLayer" for the contents that move when you scroll.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateDebugIndicators):
        (WebCore::RenderLayerBacking::destroyGraphicsLayers):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::setLocationOfScrolledContents):
        (WebCore::RenderLayerBacking::updateAfterDescendants):
        (WebCore::RenderLayerBacking::updateInternalHierarchy):
        (WebCore::RenderLayerBacking::updateDrawsContent):
        (WebCore::RenderLayerBacking::updateScrollingLayers):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::didChangePlatformLayerForLayer):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForScrollingRole):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::registerAllViewportConstrainedLayers):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::updateScrollingLayer):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::unregisterAllScrollingLayers):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::removeScrollingLayer):

2019-02-02  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Fix GPURenderPassEncoder::setVertexBuffers and allow overlapping indices with GPUBindGroups
        https://bugs.webkit.org/show_bug.cgi?id=194125

        Reviewed by Myles C. Maxfield.

        GPURenderPassEncoder::setVertexBuffers is now actually written to set all buffers provided. In addition,
        shift vertex input buffer indices so that any resource bindings can bind vertex buffer resources to the same indices. 

        Existing tests cover setVertexBuffers. Updated buffer-resource-triangles to assign bind groups and vertex buffers to the same index.

        * Modules/webgpu/WHLSL/Metal/WHLSLVertexBufferIndexCalculator.cpp: Added.
        (WebCore::WHLSL::Metal::calculateVertexBufferIndex): Simple shifting function for vertex input buffer indices.
        * Modules/webgpu/WHLSL/Metal/WHLSLVertexBufferIndexCalculator.h: Added.
        * Modules/webgpu/WebGPUProgrammablePassEncoder.cpp:
        (WebCore::WebGPUProgrammablePassEncoder::setBindGroup const): Limit maximum bind group indices to 0 to 3.
        * Modules/webgpu/WebGPURenderPassEncoder.cpp: 
        (WebCore::WebGPURenderPassEncoder::setVertexBuffers): Limit vertex input indices to 0 to 15.
        * Modules/webgpu/WebGPURenderPassEncoder.h: Move IDL/bindings bug note to IDL file.
        * Modules/webgpu/WebGPURenderPassEncoder.idl: Ditto.
        * platform/graphics/gpu/GPULimits.h: Added. Home for Web GPU limits constants shared between files.
        * platform/graphics/gpu/GPURenderPassEncoder.h: Change IDL/bindings bug workaround to unsigned long long to prevent narrowing compared to spec.
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::GPURenderPassEncoder::setVertexBuffers): Now properly calls Metal's setVertexBuffers. 
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::setInputStateForPipelineDescriptor): Fix validation checks for vertex attribute numbers and vertex buffer indices. 

        Add symbols to project:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-02-01  Simon Fraser  <simon.fraser@apple.com>

        Async overflow scroll is jumpy on macOS if the main thread is busy
        https://bugs.webkit.org/show_bug.cgi?id=194184
        <rdar://problem/47758655>

        Reviewed by Antti Koivisto.

        This change extends to macOS some existing overflow-scroll functionality for iOS.
        When an async scroll is in process in the scroll thread (or UI process), we periodically
        message back to the web process main thread with scroll position updates. These
        can trigger post-scroll compositing updates, but we need to ensure that this update
        doesn't clobber the scroll position of the native layers, which would trigger
        stutters.

        To do this we have the notion of a scroll position "sync" (ScrollingLayerPositionAction::Sync) which
        pokes the new value into the GraphicsLayer (hence making visible rect computations work), but doesn't
        propagate it to the platform layer. This patch wires up syncs for macOS during async overflow scrolling,
        coming out of AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll().

        In RenderLayerBacking, m_scrollingContentsLayer is renamed to m_scrolledContentsLayer, and I added
        updateScrollOffset() and setLocationOfScrolledContents() to handle the set vs. sync, and to keep
        the iOS vs macOS differences in one function. This allows for more code sharing in RenderLayerBacking::updateGeometry().

        There's a confusing bit in the m_childClippingMaskLayer code (trac.webkit.org/178029) where the setOffsetFromRenderer()
        just looks wrong; it should match m_scrollingLayer. This code is never hit for Cocoa, which never has m_childClippingMaskLayer.

        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::setScrollPosition): Logging
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::setScrollLayerPosition): Logging
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::scrollTo):
        * rendering/RenderLayer.h: Rename m_requiresScrollBoundsOriginUpdate to m_requiresScrollPositionReconciliation
        and make it available on all platforms. Just reorder m_adjustForIOSCaretWhenScrolling to reduce #ifdef nesting confusion.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateDebugIndicators):
        (WebCore::RenderLayerBacking::destroyGraphicsLayers):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::setLocationOfScrolledContents):
        (WebCore::RenderLayerBacking::updateScrollOffset):
        (WebCore::RenderLayerBacking::updateDrawsContent):
        (WebCore::RenderLayerBacking::updateScrollingLayers):
        (WebCore::RenderLayerBacking::paintingPhaseForPrimaryLayer const):
        (WebCore::RenderLayerBacking::parentForSublayers const):
        (WebCore::RenderLayerBacking::setContentsNeedDisplay):
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
        (WebCore::RenderLayerBacking::paintContents):
        (WebCore::RenderLayerBacking::backingStoreMemoryEstimate const):
        * rendering/RenderLayerBacking.h:

2019-02-02  Zalan Bujtas  <zalan@apple.com>

        [LFC] Initialize ICB's style with fixed width/height.
        https://bugs.webkit.org/show_bug.cgi?id=194188

        Reviewed by Antti Koivisto.

        Let's set ICB's logical width/height to Fixed so that it's available when we try to resolve a box's height
        in FormattingContext::Geometry::computedHeightValue() by using the containing block's height (ICB in this case).

        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::LayoutState):
        * layout/LayoutState.h:
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutTree):

2019-02-02  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add missing case to out-of-flow non-replaced horizontal used margin value computation
        https://bugs.webkit.org/show_bug.cgi?id=194185

        Reviewed by Antti Koivisto.

        If none of horizontal values (left, right, width, margin-left/right) are auto, then usedHorizontalMarginValues = computedHorizontalMarginValues.

        Test: fast/block/block-only/absolute-position-left-right-margin.html

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):

2018-12-16  Darin Adler  <darin@apple.com>

        Convert additional String::format clients to alternative approaches
        https://bugs.webkit.org/show_bug.cgi?id=192746

        Reviewed by Alexey Proskuryakov.

        This round of conversions covers less-trivial cases such as floating
        point numerals and hexadecimal. Not yet taking on pointer serialization
        ("%p") or padding with spaces of zero digits, so call sites using those
        have been left untouched.

        In some cases these new idioms are a bit clumsy, and we could follow up
        with additional convenience functions to make them more elegant.

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::loggingString const): Use more ASCIILiteral and
        more appendLiteral for efficiency. Use upperNibbleToLowercaseASCIIHexDigit,
        lowerNibbleToLowercaseASCIIHexDigit, and also makeString and FormattedNumber.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::aspectRatioValueAsString): Use makeString and FormattedNumber.
        Doing it this way makes it a little clearer that we have an unpleasant
        use of fixed 6-digit precision here.

        * html/FTPDirectoryDocument.cpp:
        (WebCore::processFilesizeString): Use makeString and FormattedNumber.
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties): Ditto.
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::windowRoundedCornerRadiusCSS const): Ditto.
        * page/History.cpp:
        (WebCore::History::stateObjectAdded): Ditto.
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::formatByteNumber): Ditto.
        (WebCore::gcTimerString): Use String::number.
        (WebCore::ResourceUsageOverlay::platformDraw): Use makeString and FormattedNumber.

        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::snapOffsetsToString): Removed some unnecessary copying in the for loop,
        use appendLiteral, and use appendFixedWidthNumber.
        (WebCore::snapOffsetRangesToString): Ditto.
        (WebCore::snapPortOrAreaToString): Use makeString and FormattedNumber.

        * platform/animation/TimingFunction.cpp:
        (WebCore::TimingFunction::cssText const): Use makeString.

        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::keyIdentifierForCharCode): Use makeString and the ASCIIHexDigit
        functions.
        * platform/graphics/Color.cpp:
        (WebCore::Color::nameForRenderTreeAsText const): Ditto.

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::drawText): Use makeString and FormattedNumber.

        * platform/text/PlatformLocale.cpp:
        (WebCore::DateTimeStringBuilder::visitField): Use String::numberToStringFixedWidth.

2019-02-01  Simon Fraser  <simon.fraser@apple.com>

        Remove the unused layerForScrolling()
        https://bugs.webkit.org/show_bug.cgi?id=194180

        Reviewed by Zalan Bujtas.

        Remove ScrollableArea::layerForScrolling() and derivations. This was unused.

        * page/FrameView.cpp:
        (WebCore::FrameView::layerForScrolling const): Deleted.
        * page/FrameView.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::scrollLayerForScrollableArea): Deleted.
        * page/scrolling/ScrollingCoordinator.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::layerForScrolling const): Deleted.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:

2019-02-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Fix statically positioned replaced out-of-flow horizontal geometry
        https://bugs.webkit.org/show_bug.cgi?id=194163

        Reviewed by Simon Fraser.

        Fix a typo.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):

2019-02-01  Chris Dumez  <cdumez@apple.com>

        REGRESSION: Flaky ASSERTION FAILED: m_uncommittedState.state == State::Committed on http/tests/cookies/same-site/fetch-after-top-level-navigation-initiated-from-iframe-in-cross-origin-page.html
        https://bugs.webkit.org/show_bug.cgi?id=193740
        <rdar://problem/47527267>

        Reviewed by Alex Christensen.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        * loader/FrameLoader.h:
        * loader/FrameLoaderTypes.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        (WebCore::PolicyChecker::checkNewWindowPolicy):
        * loader/PolicyChecker.h:

2019-02-01  Antoine Quint  <graouts@apple.com>

        Dispatch pointercancel events when content is panned or zoomed on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193962
        <rdar://problem/47629134>

        Reviewed by Dean Jackson.

        Expose two new methods on PointerCaptureController so that, given a pointer id, it can be established whether this pointer
        has been cancelled, which is important because a cancelled pointer should no longer dispatch any further pointer events, and
        to cancel a pointer.

        Tests: pointerevents/ios/touch-action-pointercancel-pan-x.html
               pointerevents/ios/touch-action-pointercancel-pan-y.html
               pointerevents/ios/touch-action-pointercancel-pinch-zoom.html

        * WebCore.xcodeproj/project.pbxproj: Make PointerCaptureController.h Private so that it can be imported from WebKit.
        * dom/PointerEvent.h: Remove an unnecessary #if ENABLE(POINTER_EVENTS) since the entire file is already contained in one.
        Then we add a new create() method that takes an event type, a pointer id and a pointer type (touch vs. pen) that we use
        to create pointercancel events in PointerCaptureController::cancelPointer().
        * page/Page.cpp:
        (WebCore::Page::Page): Pass the Page as a parameter when creating the PointerCaptureController.
        * page/PointerCaptureController.cpp:
        (WebCore::PointerCaptureController::PointerCaptureController): Add a Page reference to the constructor since we'll need
        the page to access its main frame's EventHandler to perform hit testing in case we do not have a capture target override
        in cancelPointer().
        (WebCore::PointerCaptureController::releasePointerCapture): Drive-by, remove the the implicit parameter since on iOS we
        don't need to differentiate. We'll bring this back for the macOS work.
        (WebCore::PointerCaptureController::hasCancelledPointerEventForIdentifier): New method we'll use when dispatching pointer
        events to identify whether a pointer id has already been cancelled which will allow for _not_ dispatching any further
        pointer events for this pointer id.
        (WebCore::PointerCaptureController::pointerEventWillBeDispatched): Keep track of the pointer type so we can preserve it
        when dispatching pointercancel events for a given pointer id.
        (WebCore::PointerCaptureController::cancelPointer): Dispatch a pointercancel for the provided pointer id, using the capture
        target override as the event's target, if there is one, and otherwise hit-testing at the provided location to figure out
        what the target should be.
        * page/PointerCaptureController.h: Switch the target overrides from Element* to RefPtr<Element> to ensure it may not be
        deleted while we still need them. Existing code already ensures these get set to nullptr.

2019-02-01  Jer Noble  <jer.noble@apple.com>

        Make the WebKit default for media source based on the WebCore default.
        https://bugs.webkit.org/show_bug.cgi?id=194172

        Reviewed by Eric Carlson.

        * page/SettingsBase.h:

2019-02-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Memory timeline starts from zero when both CPU and Memory timeline are enabled
        https://bugs.webkit.org/show_bug.cgi?id=194111
        <rdar://problem/47714555>

        Rubber-stamped by Devin Rousso.

        * page/ResourceUsageThread.cpp:
        (WebCore::ResourceUsageThread::waitUntilObservers):
        (WebCore::ResourceUsageThread::threadBody):
        Wait a short period of time before the first listener registers
        and we start sampling. This will allow multiple listeners to
        register, each that wants different data.

2019-02-01  Antti Koivisto  <antti@apple.com>

        Don't use base layer() as the scroll layer in scrolling tree.
        https://bugs.webkit.org/show_bug.cgi?id=194160

        Reviewed by Simon Fraser.

        Maintain scrollContainerLayer() and scrolledContentsLayer() separately in ScrollingTreeScrollingNode.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::setNodeLayers):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::setNodeLayers):

        Turn the long layer parameter list into a struct.

        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode):
        (WebCore::ScrollingStateNode::setAllPropertiesChanged):
        (WebCore::ScrollingStateNode::setLayer):
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setAllPropertiesChanged):
        (WebCore::ScrollingStateScrollingNode::setScrollContainerLayer):
        (WebCore::ScrollingStateScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingStateScrollingNode.h:
        (WebCore::ScrollingStateScrollingNode::scrollContainerLayer const):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::commitStateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::scrollContainerLayer const):
        (WebCore::ScrollingTreeScrollingNode::scrolledContentsLayer const):
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::scrollPosition const):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::setScrollLayerPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::scrollLayer const): Deleted.
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::commitStateBeforeChildren):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateAfterChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollPosition const):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollLayerPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::exposedUnfilledArea const):
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::commitStateBeforeChildren):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::scrollPosition const):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::setScrollLayerPosition):
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::commitStateBeforeChildren):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::didChangePlatformLayerForLayer):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForViewportConstrainedRole):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForScrollingRole):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForFrameHostingRole):

2019-02-01  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r240698): fast/scrolling/sticky-to-fixed.html can cause a crash
        https://bugs.webkit.org/show_bug.cgi?id=194134
        rdar://problem/47721210

        Reviewed by Daniel Bates.

        fast/scrolling/sticky-to-fixed.html changes the scrolling node type, which causes
        scrollingCoordinator->insertNode() to return a different ScrollingNodeID to the one
        passed in. We have to handle this, removing the node for the nodeID and unregistering
        the layer with the old nodeID.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::attachScrollingNode):

2019-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r239915): css3/font-feature-font-face-local.html failing on WPE
        https://bugs.webkit.org/show_bug.cgi?id=194008

        Reviewed by Žan Doberšek.

        We need to replace control characters with zero width space too.

        * platform/graphics/freetype/GlyphPageTreeNodeFreeType.cpp:
        (WebCore::GlyphPage::fill):
        * platform/text/CharacterProperties.h:
        (WebCore::isControlCharacter):

2019-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        ComplexText: Test fast/text/word-space-nbsp.html fails when using complex text path
        https://bugs.webkit.org/show_bug.cgi?id=193279

        Reviewed by Michael Catanzaro.

        The fix applied in r135884 to WidthIterator should also be applied to ComplexTextController.

        * platform/graphics/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):

2019-02-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Adjust replaced element's intrinsic ratio
        https://bugs.webkit.org/show_bug.cgi?id=194154

        Reviewed by Antti Koivisto.

        Decouple image and iframe replaced types and set intrinsic ratio accordingly.

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::Box):
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::isReplaced const):
        (WebCore::Layout::Box::isIFrame const):
        (WebCore::Layout::Box::isImage const):
        * layout/layouttree/LayoutReplaced.cpp:
        (WebCore::Layout::Replaced::hasIntrinsicRatio const):
        (WebCore::Layout::Replaced::intrinsicRatio const):
        (WebCore::Layout::Replaced::hasAspectRatio const):
        * layout/layouttree/LayoutReplaced.h:
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createSubTree):

2019-02-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Set intrinsic size on Layout::Replaced
        https://bugs.webkit.org/show_bug.cgi?id=194139

        Reviewed by Antti Koivisto.

        Eventually Layout::Replaced will track intrinsic size internally until then let's query the RenderReplaced. 

        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::replaced):
        * layout/layouttree/LayoutReplaced.cpp:
        (WebCore::Layout::Replaced::hasIntrinsicWidth const):
        (WebCore::Layout::Replaced::hasIntrinsicHeight const):
        (WebCore::Layout::Replaced::intrinsicWidth const):
        (WebCore::Layout::Replaced::intrinsicHeight const):
        * layout/layouttree/LayoutReplaced.h:
        (WebCore::Layout::Replaced::setIntrinsicSize):
        (WebCore::Layout::Replaced::setIntrinsicRatio):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createSubTree):
        * rendering/RenderReplaced.h:

2019-02-01  Claudio Saavedra  <csaavedra@igalia.com>

        Race-condition during scrolling thread creation
        https://bugs.webkit.org/show_bug.cgi?id=194016

        Reviewed by Saam Barati.

        There is a threading issue during the initialization
        of the scrolling thread caused by createThreadIfNeeded
        locking only on the creation of the thread but not on
        the initialization of the main loop, making it possible
        for a thread to try to spin the main loop before it's
        created.

        Fix this by unconditionally waiting on the main loop
        being created. This makes it necessary to always hold
        the lock, even when the thread is already created.

        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::createThreadIfNeeded):

2019-02-01  Simon Fraser  <simon.fraser@apple.com>

        Use ScrollingNodeID in more places, and improve the name of a ScrollableArea function that returns a ScrollingNodeID
        https://bugs.webkit.org/show_bug.cgi?id=194126

        Reviewed by Frédéric Wang.
        
        Change uint64_t ScrollableArea::scrollLayerID() to ScrollingNodeID ScrollableArea::scrollingNodeID()
        and fix callers.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollingNodeID const):
        (WebCore::FrameView::scrollLayerID const): Deleted.
        * page/FrameView.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::updateExpectsWheelEventTestTriggerWithFrameView):
        (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::frameViewForScrollingNode const):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::reconcileScrollingState):
        (WebCore::AsyncScrollingCoordinator::scrollableAreaScrollbarLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::ensureRootStateNodeForFrameView):
        (WebCore::AsyncScrollingCoordinator::setSynchronousScrollingReasons):
        (WebCore::AsyncScrollingCoordinator::setActiveScrollSnapIndices):
        (WebCore::AsyncScrollingCoordinator::updateScrollSnapPropertiesWithFrameView):
        * page/scrolling/ScrollingCoordinatorTypes.h:
        * platform/ScrollTypes.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::scrollingNodeID const):
        (WebCore::ScrollableArea::scrollLayerID const): Deleted.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::parentFrameContentLayers):
        (WebCore::RenderLayerCompositor::detachRootLayer):

2019-01-31  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Expressions can't be copyable
        https://bugs.webkit.org/show_bug.cgi?id=194116

        Reviewed by Keith Rollin.

        Expressions have UniqueRef members, which can't be copied. Describe this constraint explicitly rather than implicitly.

        No new tests because there is no behavior change.

        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationMemberLiteral.h:
        * Modules/webgpu/WHLSL/AST/WHLSLExpression.h:

2019-01-31  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Remove unnecessary member from NetworkStorageSession.
        https://bugs.webkit.org/show_bug.cgi?id=194137

        Reviewed by Don Olmstead.

        No new tests since there is no behavior change.

        * platform/network/NetworkStorageSession.h:
        * platform/network/curl/NetworkStorageSessionCurl.cpp:
        (WebCore::NetworkStorageSession::NetworkStorageSession):
        (WebCore::NetworkStorageSession::context const): Deleted.

2019-01-31  Jer Noble  <jer.noble@apple.com>

        NSInvalidArgumentException in [WebAVSampleBufferErrorListener observeValueForKeyPath:ofObject:change:context:]
        https://bugs.webkit.org/show_bug.cgi?id=194123
        <rdar://problem/47721094>

        Reviewed by Eric Carlson.

        According to crash logs, AVSampleBufferDisplayLayer.error can go from an NSError* to nil; when such a change is KVO'd,
        the NSKeyValueChangeNewKey is a NSNull. Detect this state and bail out early.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVSampleBufferErrorListener observeValueForKeyPath:ofObject:change:context:]):

2019-01-31  Jer Noble  <jer.noble@apple.com>

        [Cocoa][EME] AirPlaying a FairPlay-protected HLS stream fails to decrypt
        https://bugs.webkit.org/show_bug.cgi?id=194114

        Reviewed by Eric Carlson.

        The AVAssetResourceLoaderDelegate must explicitly... delegate responsibility for FairPlay key
        requests to the AVContentKeySession.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):

2019-01-31  Megan Gardner  <megan_gardner@apple.com>

        Don't insert spaces at the beginning of a newline when using smart-copy-paste
        https://bugs.webkit.org/show_bug.cgi?id=194070

        Reviewed by Tim Horton.

        If our inserted content end is at the beginning of a paragraph, do not insert a space.
        Also, if our inserted content beginning is at the end of a paragraph, do not insert a space.

        Test: editing/pasteboard/mac/copy-smartpaste-first-line-in-textarea.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::addSpacesForSmartReplace):

2019-01-31  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Build fix: disable MTLCopyAllDevices call on non-Mac platforms
        https://bugs.webkit.org/show_bug.cgi?id=194120

        Unreviewed build fix. 

        No new tests; no change in behavior.

        * platform/graphics/gpu/cocoa/GPUDeviceMetal.mm:
        (WebCore::GPUDevice::create): Wrap problem code in #if PLATFORM(MAC).

2019-01-31  Simon Fraser  <simon.fraser@apple.com>

        Basic scrollability for async overflow scrolling on macOS
        https://bugs.webkit.org/show_bug.cgi?id=194093

        Reviewed by Antti Koivisto.

        Give a ScrollingTreeOverflowScrollingNodeMac a ScrollingTreeScrollingNodeDelegateMac and have it keep track
        of its layers so basic scrolling works for async overflow scroll.

        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::create):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::ScrollingTreeOverflowScrollingNodeMac):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::commitStateBeforeChildren):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::commitStateAfterChildren):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::handleWheelEvent):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::scrollPosition const):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::setScrollPosition):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::setScrollLayerPosition):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateScrollingLayers):

2019-01-31  Simon Fraser  <simon.fraser@apple.com>

        Generalize ScrollingTreeScrollingNodeDelegate for use in macOS too, add a macOS subclass for frame/overflow scrolling
        https://bugs.webkit.org/show_bug.cgi?id=194080

        Reviewed by Antti Koivisto.

        To share code between ScrollingTreeFrameScrollingNodeMac and ScrollingTreeOverflowScrollingNodeMac, build ScrollingTreeScrollingNodeDelegate
        for macOS too, and add some helper functions to ScrollingTreeScrollingNodeDelegate.

        Add a macOS subclass, ScrollingTreeScrollingNodeDelegateMac, which takes over the basic scrolling, rubber-banding
        and scroll snapping functionality from ScrollingTreeFrameScrollingNodeMac. The delegate owns the ScrollController and
        implements ScrollControllerClient.

        ScrollingTreeFrameScrollingNodeMac now owns a ScrollingTreeScrollingNodeDelegateMac. A future patch
        will add one to ScrollingTreeOverflowScrollingNodeMac.

        No behavior change.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::scrollBy): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNode::scrollByWithoutContentEdgeConstraints): Deleted.
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        (WebCore::ScrollingTreeFrameScrollingNode::frameScaleFactor const):
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::isRootNode const):
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNode::scrollBy):
        (WebCore::ScrollingTreeScrollingNode::scrollByWithoutContentEdgeConstraints):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::expectsWheelEventTestTrigger const):
        * page/scrolling/ScrollingTreeScrollingNodeDelegate.cpp:
        * page/scrolling/ScrollingTreeScrollingNodeDelegate.h:
        (WebCore::ScrollingTreeScrollingNodeDelegate::scrollPosition const):
        (WebCore::ScrollingTreeScrollingNodeDelegate::minimumScrollPosition const):
        (WebCore::ScrollingTreeScrollingNodeDelegate::maximumScrollPosition const):
        (WebCore::ScrollingTreeScrollingNodeDelegate::scrollableAreaSize const):
        (WebCore::ScrollingTreeScrollingNodeDelegate::totalContentsSize const):
        (WebCore::ScrollingTreeScrollingNodeDelegate::hasEnabledHorizontalScrollbar const):
        (WebCore::ScrollingTreeScrollingNodeDelegate::hasEnabledVerticalScrollbar const):
        (WebCore::ScrollingTreeScrollingNodeDelegate::horizontalScrollElasticity const):
        (WebCore::ScrollingTreeScrollingNodeDelegate::verticalScrollElasticity const):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::ScrollingTreeFrameScrollingNodeMac):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::handleWheelEvent):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::minimumScrollPosition const):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::maximumScrollPosition const):
        (WebCore::newGestureIsStarting): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::isAlreadyPinnedInDirectionOfGesture): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::allowsHorizontalStretching): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::allowsVerticalStretching): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::stretchAmount): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::pinnedInDirection): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::canScrollHorizontally): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::canScrollVertically): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::shouldRubberBandInDirection): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::immediateScrollBy): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::immediateScrollByWithoutContentEdgeConstraints): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::stopSnapRubberbandTimer): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::adjustScrollPositionToBoundsIfNecessary): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollOffset const): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::immediateScrollOnAxis): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::pageScaleFactor const): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::startScrollSnapTimer): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::stopScrollSnapTimer): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollExtent const): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::viewportSize const): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::deferTestsForReason const): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::removeTestDeferralForReason const): Deleted.
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h: Copied from Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h.
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm: Added.
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::ScrollingTreeScrollingNodeDelegateMac):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::updateScrollSnapPoints):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::setActiveScrollSnapIndexForAxis):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::activeScrollSnapIndexForAxis const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::activeScrollSnapIndexDidChange const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::handleWheelEvent):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::isScrollSnapInProgress const):
        (WebCore::newGestureIsStarting):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::isAlreadyPinnedInDirectionOfGesture):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::allowsHorizontalStretching):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::allowsVerticalStretching):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::stretchAmount):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::pinnedInDirection):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::canScrollHorizontally):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::canScrollVertically):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::shouldRubberBandInDirection):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::immediateScrollBy):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::immediateScrollByWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::stopSnapRubberbandTimer):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::adjustScrollPositionToBoundsIfNecessary):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::scrollOffset const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::immediateScrollOnAxis):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::pageScaleFactor const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::startScrollSnapTimer):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::stopScrollSnapTimer):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::scrollExtent const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::viewportSize const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::deferTestsForReason const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::removeTestDeferralForReason const):

2019-01-31  Jer Noble  <jer.noble@apple.com>

        [Mac] Requesting PiP from two different WebViews gets PiP window "stuck"
        https://bugs.webkit.org/show_bug.cgi?id=194099
        <rdar://problem/47271323>

        Reviewed by Eric Carlson.

        When a different client requests the PiP window, the PiP framework will call -pipDidClose: without
        first calling -pipActionStop:. This leaves the internal fullscreen state in a confused state where
        the WebView will attempt to re-enter PiP once it gets focus, and can lead to a state where the two
        WebViews will constantly try to steal PiP from one another, ad infinitum.

        When receiving a notification that the PiP window closed when our internal state tells us that the
        close was not requested, notify the client that PiP mode was exited, allowing them to set their
        expected state to a correct and sane value.

        * platform/mac/VideoFullscreenInterfaceMac.mm:
        (-[WebVideoFullscreenInterfaceMacObjC pipDidClose:]):

2019-01-31  Keith Rollin  <krollin@apple.com>

        WebCore::WHLSL::AST::Expression copy constructor needs to be be default, not delete
        https://bugs.webkit.org/show_bug.cgi?id=194055
        <rdar://problem/47684570>

        Reviewed by Myles C. Maxfield.

        WebCore::WHLSL::AST::Expression has a deleted copy constructor.
        EnumerationMemberLiteral, a subclass, has a default copy constructor.
        Some compilers may complain that the latter's c'tor can't access the
        former's, because it doesn't exist. Fix this by marking Expression's
        c'tor as default.

        No new tests since there should be no observable behavior difference.

        * Modules/webgpu/WHLSL/AST/WHLSLExpression.h:

2019-01-31  Alex Christensen  <achristensen@webkit.org>

        Revert r238819 which is unneeded and caused a performance regression.
        https://bugs.webkit.org/show_bug.cgi?id=192272
        <rdar://problem/46664625>

        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::prepareForLoadStart):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:

2019-01-31  Justin Fan  <justin_fan@apple.com>

        [WebGPU] WebGPUAdapterDescriptor -> GPURequestAdapterOptions and take powerPreference into account
        https://bugs.webkit.org/show_bug.cgi?id=194068
        <rdar://problem/47680215>

        Reviewed by Dean Jackson.
        
        Per the Web GPU IDL, WebGPUAdapterDescriptor is now known as GPURequestAdapterOptions and is optional.
        In addition, Web GPU now actually attempts to return an integrated GPU when a low-power adapter is requested.

        Test: adapter-options.html

        * Modules/webgpu/GPURequestAdapterOptions.idl: Renamed from Source/WebCore/Modules/webgpu/WebGPUAdapterDescriptor.idl.
        * Modules/webgpu/WebGPU.cpp:
        (WebCore::WebGPU::requestAdapter const):
        * Modules/webgpu/WebGPU.h:
        * Modules/webgpu/WebGPU.idl:
        * Modules/webgpu/WebGPUAdapter.cpp:
        (WebCore::WebGPUAdapter::create):
        (WebCore::WebGPUAdapter::WebGPUAdapter):
        * Modules/webgpu/WebGPUAdapter.h:
        (WebCore::WebGPUAdapter::options const):
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::create):
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/GPURequestAdapterOptions.h: Renamed from Source/WebCore/Modules/webgpu/WebGPUAdapterDescriptor.h.
        * platform/graphics/gpu/cocoa/GPUDeviceMetal.mm:
        (WebCore::GPUDevice::create):

2019-01-31  Jiewen Tan  <jiewen_tan@apple.com>

        Formalize WebKitAdditions mechanism of LoadOptimizer
        https://bugs.webkit.org/show_bug.cgi?id=193886
        <rdar://problem/47696809>

        Reviewed by Brent Fulgham.

        Covered by existing tests.

        * platform/network/ResourceRequestBase.h:
        Export isolatedCopy().

2019-01-31  Jer Noble  <jer.noble@apple.com>

        [Cocoa][EME] Modern EME uses a different path for SecureStop data than Legacy EME
        https://bugs.webkit.org/show_bug.cgi?id=193988

        Reviewed by Jon Lee.

        Modern EME is writing SecureStop data as a file at the same path as the
        directory used by Legacy EME; meaning, when Modern EME attempts to write
        to that file, it will fail because a directory exists at the same path.

        Add a migration step to take care of those instances where Modern EME Secure
        Stop data was already written to disk, and move that previously written data
        to the correct file path.

        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::initializeWithConfiguration):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::setStorageDirectory):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::updateLicense):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::loadSession):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::removeSessionData):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::ensureSession):

2019-01-31  Antti Koivisto  <antti@apple.com>

        Call the frame main contents layer "rootContentsLayer" consistently.
        https://bugs.webkit.org/show_bug.cgi?id=194089

        Reviewed by Simon Fraser.

        This is currently called "rootContentLayer" in the compositor and "scrolledContentsLayer" in the scrolling tree.
        We want to reserve term "scrolledContentsLayer" to mean the direct child layer of the  scroll container layer
        without any positioning oddities (which this isn't).

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::reconcileScrollingState):
        (WebCore::AsyncScrollingCoordinator::setNodeLayers):

        Set the rootContentsLayer for frame. It is only used by the Mac frame scrolling code.

        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::rootContentsLayerForFrameView):
        (WebCore::ScrollingCoordinator::rootContentLayerForFrameView): Deleted.
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::setNodeLayers):
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
        (WebCore::ScrollingStateFrameScrollingNode::setAllPropertiesChanged):
        (WebCore::ScrollingStateFrameScrollingNode::setRootContentsLayer):
        (WebCore::ScrollingStateFrameScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingStateFrameScrollingNode.h:

        Introduce rootContentLayer for frames only.

        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollLayerPosition):

        Switch to using rootContentsLayer.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::didChangePlatformLayerForLayer):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::updateRootContentLayerClipping):
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        (WebCore::RenderLayerCompositor::rootGraphicsLayer const):
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForHeader):
        (WebCore::RenderLayerCompositor::updateLayerForFooter):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::ensureRootLayer):
        (WebCore::RenderLayerCompositor::destroyRootLayer):
        (WebCore::RenderLayerCompositor::attachRootLayer):
        (WebCore::RenderLayerCompositor::detachRootLayer):
        (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForScrollingRole):

        Pass rootContentsLayer separately for frames only.
        Pass null as frame scrolledContentsLayer until these are rearranged (it is not used).

        * rendering/RenderLayerCompositor.h:

2019-01-31  Keith Rollin  <krollin@apple.com>

        GCGamepad is deprecated
        https://bugs.webkit.org/show_bug.cgi?id=194056
        <rdar://problem/47685010>

        Reviewed by Brady Eidson.

        GCGamepad is deprecated, resulting in compiler warnings. Address this
        for now by employing ALLOW_DEPRECATED_DECLARATIONS_BEGIN/END.

        No new tests since there should be no observable behavior difference.

        * platform/gamepad/cocoa/GameControllerGamepad.mm:
        (WebCore::GameControllerGamepad::setupAsGamepad):

2019-01-31  Darin Adler  <darin@apple.com>

        Simplify and streamline code that creates an appropriate document based on MIME type
        https://bugs.webkit.org/show_bug.cgi?id=193756

        Reviewed by Chris Dumez.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): Use equalLettersIgnoringASCIICase rather
        than == for all the MIME type checks. Use MIMETypeRegistry::isSupportedImageMIMEType
        instead of Image::supportsType. Rearranged checks so that all the combinations that
        that take precedence over plug-ins are checked first, fixing some unimportant edge
        cases where the plug-in database is initialized and doesn't need to be. Straightened
        out the logic for various special types so that the checks are more independent from
        each other and hence easier to understand.

2019-01-31  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Unreviewed debug build fix, obsolete assert

        Since m_playerPrivate is now a reference, it no longer has a default
        cast to bool. But there is also no longer a need to assert it's non
        null, so just remove the assert.

        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp:
        (WebCore::MediaSourceClientGStreamerMSE::append):

2019-01-31  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Use reference instead of pointer in m_playerPrivate
        https://bugs.webkit.org/show_bug.cgi?id=194091

        Reviewed by Xabier Rodriguez-Calvar.

        Since the pointer is initialized with the class, it's never null and
        never changes, it's preferrable to use a reference instead of a
        pointer.

        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp:
        (WebCore::MediaSourceClientGStreamerMSE::MediaSourceClientGStreamerMSE):
        (WebCore::MediaSourceClientGStreamerMSE::addSourceBuffer):
        (WebCore::MediaSourceClientGStreamerMSE::durationChanged):
        (WebCore::MediaSourceClientGStreamerMSE::abort):
        (WebCore::MediaSourceClientGStreamerMSE::resetParserState):
        (WebCore::MediaSourceClientGStreamerMSE::append):
        (WebCore::MediaSourceClientGStreamerMSE::markEndOfStream):
        (WebCore::MediaSourceClientGStreamerMSE::removedFromMediaSource):
        (WebCore::MediaSourceClientGStreamerMSE::flush):
        (WebCore::MediaSourceClientGStreamerMSE::enqueueSample):
        (WebCore::MediaSourceClientGStreamerMSE::allSamplesInTrackEnqueued):
        (WebCore::MediaSourceClientGStreamerMSE::webKitMediaSrc):
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.h:

2019-01-31  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] Momentum scrolling stops abruptly before websites end
        https://bugs.webkit.org/show_bug.cgi?id=193350

        Reviewed by Carlos Garcia Campos.

        Don't immediately set velocity to 0 when position reaches upper or bottom limit.
        Instead, set it to the overshot distance, so that position exactly matches upper
        or lower limit on the next frame, and then clamp velocity to 0 using the existing
        mechanism.

        * platform/ScrollAnimationKinetic.cpp:
        (WebCore::ScrollAnimationKinetic::PerAxisData::animateScroll):

2019-01-31  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix incorrect string format
        https://bugs.webkit.org/show_bug.cgi?id=193907
        <rdar://problem/47604080>

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):

2019-01-30  Simon Fraser  <simon.fraser@apple.com>

        [Mac] Implement basic hit testing in the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=172917
        <rdar://problem/34215516>

        Reviewed by Antti Koivisto.

        First steps to getting hit testing of scrolling nodes in the scrolling tree. Based on patch
        by Frédéric Wang.

        First we pipe the "async scrolling enabled" setting through to the ScrollingTree via
        the root node (like the other settings; weird, but that's how it's done). For now,
        we hit test in the scrolling tree if either async overflow or frame scrolling are enabled
        (it's hard to deal with one without the other).

        Nodes in the scrolling tree implement scrollingNodeForPoint() to implement hit testing.
        Two helper functions exist to simplify coordinate conversion: parentToLocalPoint()
        and localToContentsPoint(). Child nodes are hit-testing in reverse order to find nodes
        hightest in Z first. Only scrolling nodes are returned (not sure if we'll ever need
        to hit-test non-scrolling nodes). Nodes use parentRelativeScrollableRect and scroll positions
        to do these point mappings.

        handleWheelEvent() is changed to return a ScrollingEventResult.

        Latching is not correct with this change when async frame scrolling is enabled. That needs
        to be fixed separately.

        No tests yet; for ease of testing, I'd like to add an Internals API to hit-test the
        scrolling tree, rather than doing eventSender stuff everywhere.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::asyncFrameOrOverflowScrollingEnabled const):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
        (WebCore::ScrollingStateFrameScrollingNode::setAllPropertiesChanged):
        (WebCore::ScrollingStateFrameScrollingNode::setAsyncFrameOrOverflowScrollingEnabled):
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously):
        (WebCore::ScrollingTree::handleWheelEvent):
        (WebCore::ScrollingTree::commitTreeState):
        (WebCore::ScrollingTree::setAsyncFrameOrOverflowScrollingEnabled):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::asyncFrameOrOverflowScrollingEnabled const):
        * page/scrolling/ScrollingTreeFrameHostingNode.cpp:
        (WebCore::ScrollingTreeFrameHostingNode::parentToLocalPoint const):
        * page/scrolling/ScrollingTreeFrameHostingNode.h:
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::parentToLocalPoint const):
        (WebCore::ScrollingTreeFrameScrollingNode::localToContentsPoint const):
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::scrollingNodeForPoint const):
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::children const):
        (WebCore::ScrollingTreeNode::parentToLocalPoint const):
        (WebCore::ScrollingTreeNode::localToContentsPoint const):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::scrollLimitReached const):
        (WebCore::ScrollingTreeScrollingNode::parentToLocalPoint const):
        (WebCore::ScrollingTreeScrollingNode::localToContentsPoint const):
        (WebCore::ScrollingTreeScrollingNode::scrollingNodeForPoint const):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::handleWheelEvent):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::handleWheelEvent):
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::handleWheelEvent):
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h:

2019-01-31  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Remove unused GstFlowReturn in AppendPipeline methods
        https://bugs.webkit.org/show_bug.cgi?id=194067

        Reviewed by Xabier Rodriguez-Calvar.

        A couple methods in AppendPipeline were returning GstFlowReturn
        despite there being no codepath (sans assertions) where values other
        than GST_FLOW_OK are returned.

        Therefore, it makes sense to just make these methods return void.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::pushNewBuffer):
        (WebCore::AppendPipeline::handleAppsinkNewSampleFromStreamingThread):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp:
        (WebCore::MediaSourceClientGStreamerMSE::append):
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.h:
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::append):

2019-01-31  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Remove if (m_playerPrivate) from MediaSourceClientGStreamerMSE
        https://bugs.webkit.org/show_bug.cgi?id=194069

        Reviewed by Xabier Rodriguez-Calvar.

        m_playerPrivate is non-NULL since MediaSourceClientGStreamerMSE
        creation well until its destruction.

        The only case that could make a NULL m_playerPrivate is
        clearPlayerPrivate() but that method is not used anymore.

        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp:
        (WebCore::MediaSourceClientGStreamerMSE::addSourceBuffer):
        (WebCore::MediaSourceClientGStreamerMSE::durationChanged):
        (WebCore::MediaSourceClientGStreamerMSE::abort):
        (WebCore::MediaSourceClientGStreamerMSE::resetParserState):
        (WebCore::MediaSourceClientGStreamerMSE::markEndOfStream):
        (WebCore::MediaSourceClientGStreamerMSE::removedFromMediaSource):
        (WebCore::MediaSourceClientGStreamerMSE::flush):
        (WebCore::MediaSourceClientGStreamerMSE::enqueueSample):
        (WebCore::MediaSourceClientGStreamerMSE::allSamplesInTrackEnqueued):
        (WebCore::MediaSourceClientGStreamerMSE::webKitMediaSrc):
        (WebCore::MediaSourceClientGStreamerMSE::clearPlayerPrivate): Deleted.
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.h:

2019-01-31  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Avoid returning FLUSHING when it is not the case in GStreamerMediaStreamSource
        https://bugs.webkit.org/show_bug.cgi?id=194087

        Basically GstFlowCombiner was mostly designed for element that have 1 sinkpad and several srcpad
        meaning that it makes sense that when any of the downstream pad is returning flushing, you should
        return FLUSHING upstream. But in our case we have several sinkpads and FLUSHING should be returned
        *only* if the internally linked srcpad is FLUSHING otherwise we might end up setting the upstream
        source element task to PAUSED (because downstream returned flushing) on a branch that was not
        flushing!

        Reviewed by Philippe Normand.

        This is a theorical race we can't really cover with tests.

        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (WebCore::webkitMediaStreamSrcChain):

2019-01-31  Zalan Bujtas  <zalan@apple.com>

        [LFC] Margin before/after/start/end initial value is 0 and not auto.
        https://bugs.webkit.org/show_bug.cgi?id=194090

        Reviewed by Antti Koivisto.

        Don't treat it like auto.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):

2019-01-31  Zalan Bujtas  <zalan@apple.com>

        [LFC] Use the used margin values in outOfFlowReplacedHorizontalGeometry consistently
        https://bugs.webkit.org/show_bug.cgi?id=194074

        Reviewed by Antti Koivisto.

        Check the used margin variables whether we already computed start/end values.

        Test: fast/block/block-only/absolute-position-with-margin-auto-simple2.html

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):

2019-01-31  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Add support for block level replaced box.
        https://bugs.webkit.org/show_bug.cgi?id=194071

        Reviewed by Antti Koivisto.

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::Box):
        * layout/layouttree/LayoutBox.h:
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createSubTree):
        (WebCore::Layout::outputLayoutBox):

2019-01-31  Chris Fleizach  <cfleizach@apple.com>

        ASSERTION FAILED: cache under WebCore::AXObjectCache::postTextStateChangePlatformNotification
        https://bugs.webkit.org/show_bug.cgi?id=189094
        <rdar://problem/43853526>

        Reviewed by Zalan Bujtas.

        Protect against access to objects and cache's that can be removed while an object is still in memory.

        Unskipped flaky tests on mac-wk2.

        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postTextStateChangePlatformNotification):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (textMarkerForVisiblePosition):
        (textMarkerRangeFromVisiblePositions):

2019-01-30  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) History navigations to twitter.com lead to a 403 HTTP error
        https://bugs.webkit.org/show_bug.cgi?id=194023
        <rdar://problem/47417981>

        Reviewed by Geoffrey Garen.

        The issue was caused by the 'isTopSite' flag not getting properly set on the network request
        in case of a cross-site history navigation (with process-swap). As a result, twitter.com was
        not getting its same-site lax cookies.

        The 'isTopSite' flag normally gets set by FrameLoader::addExtraFieldsToRequest(), but we were
        bypassing this method entirely when continuing a load in a new process after a swap. This was
        intentional as the network request is normally already fully populated by the previous process
        and we do not want the new process to modify the request in any way (e.g. we would not want to
        add a Origin header back after it was removed by the previous process). However, in case of a
        History navigation, we do not actually pass a request along from one process to another. Instead,
        we pass a HistoryItem and then build a fresh new request from the HistoryItem in the new process.
        In this case, we *want* addExtraFieldsToRequest() to be called on the new request, even though
        we are technically continuing a load in a new process.

        We thus address the issue by bypassing FrameLoader::addExtraFieldsToRequest() only if we're
        continuing a load with a request and not when we're continuing a load with a HistoryItem.

        Test: http/tests/cookies/same-site/lax-samesite-cookie-after-cross-site-history-load.php

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::shouldTreatCurrentLoadAsContinuingLoad const):

2019-01-30  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Support GPUDepthStencilStateDescriptor
        https://bugs.webkit.org/show_bug.cgi?id=194048
        <rdar://problem/46289645>

        Reviewed by Dean Jackson.

        Implement GPUDepthStencilStateDescriptor to specify a MTLDepthStencilState that is set on the command encoder.

        Existing tests cover changes to pipeline. Behavior does not change as DepthStencilState has no effect 
        without a depth texture attached.

        New interface files added:
        * Modules/webgpu/GPUCompareFunction.idl:
        * Modules/webgpu/GPUDepthStencilStateDescriptor.idl:
        * platform/graphics/gpu/GPUCompareFunction.h:
        * platform/graphics/gpu/GPUDepthStencilStateDescriptor.h:

        Modifications:
        * Modules/webgpu/WebGPUDevice.cpp: Include depthStencilState when creating pipeline.
        (WebCore::WebGPUDevice::createRenderPipeline const):
        * Modules/webgpu/WebGPURenderPipelineDescriptor.h: Add depthStencilState to the descriptor.
        * Modules/webgpu/WebGPURenderPipelineDescriptor.idl: Ditto.
        * platform/graphics/gpu/GPURenderPipeline.h: Ditto.
        (WebCore::GPURenderPipeline::depthStencilState const): Getter.
        (WebCore::GPURenderPipeline::platformRenderPipeline const):
        * platform/graphics/gpu/GPURenderPipelineDescriptor.h: Update constructor to take depthStencilState.
        (WebCore::GPURenderPipelineDescriptor::GPURenderPipelineDescriptor):
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm: Setting pipeline also sets the included depthStencilState.
        (WebCore::GPURenderPassEncoder::setPipeline):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm: Convert DepthStencilStateDescriptor to MTLDepthStencilState.
        (WebCore::validateAndConvertDepthCompareFunctionToMtl):
        (WebCore::tryCreateMtlDepthStencilState):
        (WebCore::tryCreateMtlRenderPipelineState): Refactored logic out of GPURenderPipeline::create.
        (WebCore::GPURenderPipeline::create):
        (WebCore::GPURenderPipeline::GPURenderPipeline):

        Added symbols for CompareFunction, DepthStencilStateDescriptor to the project:
        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/webgpu/WebGPUDevice.idl: Cleaned up IDL to match current version.

2019-01-30  Jer Noble  <jer.noble@apple.com>

        [Cocoa][EME] persistent-usage-record data not issued after MediaKeySession.remove()
        https://bugs.webkit.org/show_bug.cgi?id=193984

        Reviewed by Eric Carlson.

        MediaKeySession.sessionId is empty during the CDMInstance->requestLicense success callback handler. The
        KVO notification that AVContentKeySession.contentProtectionSessionIdentifier changed isn't called until
        after the -[AVContentKeyRequest makeStreamingContentKeyRequestDataForApp:contentIdentifier:options:completionHandler:]
        completion handler is called.

        Explicitly ask for the -contentProtectionSessionIdentifier inside that handler, and just in case the sessionID
        changes after that, add a new client callback method to notify the MediaKeySession that the ID has changed.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::sessionIdChanged):
        * Modules/encryptedmedia/MediaKeySession.h:
        * platform/encryptedmedia/CDMInstanceSession.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvideRequest):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::nextRequest):

2019-01-30  Keith Rollin  <krollin@apple.com>

        FloatWithRect has invalid and inaccessible default constructor
        https://bugs.webkit.org/show_bug.cgi?id=194057
        <rdar://problem/47685211>

        Reviewed by Zalan Bujtas.

        FloatWithRect has a default constructor declared as 'default'. This
        constructor is invalid because FloatWithRect has a data member that's
        a reference that will not get initialized with this constructor. Since
        it's invalid, and since it's private and not accessed by anything,
        remove this constructor.

        No new tests since there should be no observable behavior difference.

        * rendering/line/LineLayoutState.h:

2019-01-30  Daniel Bates  <dabates@apple.com>

        [iOS] Keyups for non-modifier keys identified as "Dead" when not focused in a content-editable element
        https://bugs.webkit.org/show_bug.cgi?id=192824
        <rdar://problem/47100332>

        Reviewed by Wenson Hsieh.

        When building with USE(UIKIT_KEYBOARD_ADDITIONS) enabled, normalize input strings for some more key codes
        now that hardware key events to non-editable elements use the same code path as for editable elements. 

        * platform/ios/KeyEventIOS.mm:
        (WebCore::windowsKeyCodeForCharCode): Demarcate mappings that are only needed when building with
        !USE(UIKIT_KEYBOARD_ADDITIONS) in the hope that one day we can remove this code.
        (WebCore::isFunctionKey): Ditto.
        * platform/ios/WebEvent.mm:
        (normalizedStringWithAppKitCompatibilityMapping): Normalize some more input strings when building with
        USE(UIKIT_KEYBOARD_ADDITIONS) enabled.

2019-01-30  Jer Noble  <jer.noble@apple.com>

        Ensure ENABLE_MEDIA_SOURCE is defined inside DerivedSources.make
        https://bugs.webkit.org/show_bug.cgi?id=194063

        Reviewed by Jon Lee.

        * DerivedSources.make:

2019-01-30  Youenn Fablet  <youenn@apple.com>

        Refactor ServiceWorkerJob management by ServiceWorkerContainer to make it more memory safe
        https://bugs.webkit.org/show_bug.cgi?id=193747
        <rdar://problem/47498196>

        Reviewed by Chris Dumez.

        Make ServiceWorkerJob be no longer ref counted.
        Instead its lifetime is fully controlled by ServiceWorkerContainer.

        Make sure that a failing load will remove the job from ServiceWorkerContainer job map.
        This allows to ensure that these jobs do not stay forever.
        Before the patch, the jobs map was never cleared, which is creating a ref cycle whenever a job is not succesful.

        Before the patch, unsetPendingActivity was only called for successful jobs finishing.
        In case of failing loads, ServiceWorkerContainer would leak.
        Make sure that setPendingActivity/unsetPendingActivity is balanced by storing
        a pending activity in the job map next to the job.

        When ServiceWorkerContainer is stopped, notify that all jobs are cancelled to NetworkProcess.
        This makes these jobs in NetworkProcess-side to not stay until the corresponding WebProcess is gone.

        Simplify ServiceWorkerJob promise rejection handling so that it is clear when promise is rejected and when it is not.
        Update type of exception to be SecurityError when load fails due to AccessControl.

        Covered by existing tests.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::removeRegistration):
        (WebCore::ServiceWorkerContainer::updateRegistration):
        (WebCore::ServiceWorkerContainer::scheduleJob):
        (WebCore::ServiceWorkerContainer::jobFailedWithException):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::jobResolvedWithUnregistrationResult):
        (WebCore::ServiceWorkerContainer::jobFailedLoadingScript):
        (WebCore::ServiceWorkerContainer::jobDidFinish):
        (WebCore::ServiceWorkerContainer::stop):
        (WebCore::ServiceWorkerContainer::job):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::failedWithException):
        (WebCore::ServiceWorkerJob::resolvedWithRegistration):
        (WebCore::ServiceWorkerJob::resolvedWithUnregistrationResult):
        (WebCore::ServiceWorkerJob::startScriptFetch):
        (WebCore::ServiceWorkerJob::didReceiveResponse):
        (WebCore::ServiceWorkerJob::notifyFinished):
        (WebCore::ServiceWorkerJob::cancelPendingLoad):
        * workers/service/ServiceWorkerJob.h:
        (WebCore::ServiceWorkerJob::hasPromise const):
        (WebCore::ServiceWorkerJob::takePromise):
        * workers/service/ServiceWorkerJobClient.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptFetchFinished):

2019-01-30  Dean Jackson  <dino@apple.com>

        PointerEvents - tiltX and tiltY are reversed
        https://bugs.webkit.org/show_bug.cgi?id=194032
        <rdar://problem/47674184>

        Reviewed by Jon Lee.

        I got tiltX and tiltY the wrong way around.

        * dom/ios/PointerEventIOS.cpp: Flip the values.

2019-01-30  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] nextBreakablePosition returns the same position on hyphen characters
        https://bugs.webkit.org/show_bug.cgi?id=194001

        Reviewed by Antti Koivisto.

        Skip to the next position manually. This is exactly what we do in simple line layout.

        * layout/inlineformatting/InlineRunProvider.cpp:
        (WebCore::Layout::InlineRunProvider::moveToNextBreakablePosition):

2019-01-30  Simon Fraser  <simon.fraser@apple.com>

        Add some basic geometry information to the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=194002
        rdar://problem/47656294

        Reviewed by Antti Koivisto.

        To allow hit-testing in the scrolling tree, store a parent-relative scrollable
        rect in "scrolling" and "frame hosting" nodes. This is a rect whose size is the size
        of the scrollable area, and whose origin is relative to the parent scrolling tree node.
        
        Frame hosting nodes need this rect because they take care of the geometry offset between
        an iframe and its scrolling tree ancestor in the parent document.
        
        Based on a patch by Frédéric Wang in bug 172917.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::setScrollingNodeGeometry):
        * page/scrolling/ScrollingStateFrameHostingNode.cpp:
        (WebCore::ScrollingStateFrameHostingNode::ScrollingStateFrameHostingNode):
        (WebCore::ScrollingStateFrameHostingNode::setAllPropertiesChanged):
        (WebCore::ScrollingStateFrameHostingNode::setParentRelativeScrollableRect):
        (WebCore::ScrollingStateFrameHostingNode::dumpProperties const):
        * page/scrolling/ScrollingStateFrameHostingNode.h:
        * page/scrolling/ScrollingTreeFrameHostingNode.cpp:
        (WebCore::ScrollingTreeFrameHostingNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameHostingNode::dumpProperties const):
        * page/scrolling/ScrollingTreeFrameHostingNode.h:
        (WebCore::ScrollingTreeFrameHostingNode::parentRelativeScrollableRect const):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateScrollingLayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeFrameScrollingGeometry const):
        (WebCore::RenderLayerCompositor::computeFrameHostingGeometry const):
        (WebCore::RenderLayerCompositor::computeOverflowScrollingGeometry const):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForScrollingRole):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForFrameHostingRole):
        (WebCore::RenderLayerCompositor::updateScrollSnapPropertiesWithFrameView const):
        (WebCore::RenderLayerCompositor::updateScrollSnapPropertiesWithFrameView): Deleted.
        * rendering/RenderLayerCompositor.h:

2019-01-30  Zalan Bujtas  <zalan@apple.com>

        [LFC] Use the used margin values in outOfFlowReplacedVerticalGeometry consistently
        https://bugs.webkit.org/show_bug.cgi?id=194020

        Reviewed by Antti Koivisto.

        Check the used margin variables whether we already computed before/after values.

        Test: fast/block/block-only/absolute-position-with-margin-auto-simple.html

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):

2019-01-30  Chris Fleizach  <cfleizach@apple.com>

        AX: Support color well on iOS
        https://bugs.webkit.org/show_bug.cgi?id=194010

        Reviewed by Joanmarie Diggs.

        Test: accessibility/ios-simulator/color-well.html

        Add support for color well on iOS.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityCanFuzzyHitTest]):
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        (-[WebAccessibilityObjectWrapper accessibilityRoleDescription]):
        (-[WebAccessibilityObjectWrapper accessibilityColorStringValue]):
        * en.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::AXColorWellText):
        * platform/LocalizedStrings.h:

2019-01-30  Chris Fleizach  <cfleizach@apple.com>

        AX: Role=switch not returning correct accessibilityValue
        https://bugs.webkit.org/show_bug.cgi?id=194006

        Reviewed by Joanmarie Diggs.

        Return the toggle state of a role=switch element.        

        Test: accessibility/ios-simulator/role-switch.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityValue]):

2019-01-29  Rob Buis  <rbuis@igalia.com>

        Align with Fetch on data: URLs
        https://bugs.webkit.org/show_bug.cgi?id=182325

        Reviewed by Alex Christensen.

        Implement most remaining steps for data: URL processing [1].
        Serialization is still to be implemented.

        To make the code in DataURLDecoder::parseMediaType more efficient,
        refactor ParsedContentType so that validation and parsing is done
        in one pass.

        Test: web-platform-tests/fetch/data-urls/processing.any.js

        [1] https://fetch.spec.whatwg.org/#data-urls

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::getSupportedCapabilitiesForAudioVideoType):
        * platform/network/DataURLDecoder.cpp:
        (WebCore::DataURLDecoder::parseMediaType):
        (WebCore::DataURLDecoder::DecodeTask::process):
        * platform/network/MIMEHeader.cpp:
        (WebCore::MIMEHeader::parseHeader):
        * platform/network/ParsedContentType.cpp:
        (WebCore::containsNewline):
        (WebCore::ParsedContentType::parseContentType):
        (WebCore::ParsedContentType::create):
        (WebCore::isValidContentType):
        (WebCore::ParsedContentType::ParsedContentType):
        (WebCore::DummyParsedContentType::setContentType const): Deleted.
        (WebCore::DummyParsedContentType::setContentTypeParameter const): Deleted.
        (WebCore::parseContentType): Deleted.
        * platform/network/ParsedContentType.h:

2019-01-29  Eric Carlson  <eric.carlson@apple.com>

        [MSE] add more source buffer logging
        https://bugs.webkit.org/show_bug.cgi?id=193995
        <rdar://problem/47650399>

        Reviewed by Jon Lee.

        No new tests, no functional change.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::resetParserState):
        (WebCore::SourceBufferPrivateAVFObjC::setReadyState):
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):
        (WebCore::SourceBufferPrivateAVFObjC::willSeek):
        (WebCore::SourceBufferPrivateAVFObjC::setDecompressionSession):

2019-01-29  Simon Fraser  <simon.fraser@apple.com>

        Add nodes to the scrolling tree in z-index order.
        https://bugs.webkit.org/show_bug.cgi?id=192529
        <rdar://problem/47402708>

        Reviewed by Dean Jackson.

        We currently add nodes to the scrolling tree via RenderLayerBacking::updateGeometry() and some other places.
        This is sub-optimal, because we don't readily know the scrolling ancestor at these times, so have to do RenderLayer
        walks to find them.

        With this change we update the scrolling tree during the RenderLayerCompositor::updateBackingAndHierarchy()
        tree walk, storing state along the way so we always know our scrolling tree ancestor, and the sibling index
        (which makes it so that the scrolling tree correctly reflects layer z-order).

        The reattachSubframeScrollLayers() code path is removed, since we can now reliably parent frame nodes via FrameHosting
        nodes in their parent document.

        There is also some minor cleanup around RenderLayerBacking teardown; it used to be the case that cleanup in ~RenderLayerBacking
        was hard because the backing was already disconnected from its owning RenderLayer, so I added RenderLayerBacking::willBeDestroyed()
        to do work that requires that layer->backing() is still valid. This allows for fewer callsites for detachFromScrollingCoordinator().

        updateScrollCoordinatedLayersAfterFlushIncludingSubframes() is now iOS-only because it's only relevant for iOS WK1,
        and m_scrollCoordinatedLayers can be moved to LegacyWebKitScrollingLayerCoordinator.

        Tests: scrollingcoordinator/scrolling-tree/overflow-in-fixed.html
               scrollingcoordinator/scrolling-tree/scrolling-tree-is-z-order.html

        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::insertNode):
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::~ScrollingTreeNode):
        * platform/Logging.cpp:
        (WebCore::initializeLogChannelsIfNecessary):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setParent):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::~RenderLayerBacking):
        (WebCore::RenderLayerBacking::willBeDestroyed):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::updateBackgroundLayer):
        (WebCore::RenderLayerBacking::coordinatedScrollingRoles const):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayersAfterFlush):
        (WebCore::RenderLayerCompositor::didChangePlatformLayerForLayer):
        (WebCore::frameHostingNodeForFrame):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::updateBackingAndHierarchy):
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::layerWillBeRemoved):
        (WebCore::RenderLayerCompositor::setIsInWindow):
        (WebCore::RenderLayerCompositor::clearBackingForLayerIncludingDescendants):
        (WebCore::RenderLayerCompositor::useCoordinatedScrollingForLayer const):
        (WebCore::RenderLayerCompositor::removeFromScrollCoordinatedLayers):
        (WebCore::RenderLayerCompositor::attachScrollingNode):
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayerWithRole):
        (WebCore::RenderLayerCompositor::updateScrollCoordinationForLayer):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForViewportConstrainedRole):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForScrollingRole):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForFrameHostingRole):
        (WebCore::RenderLayerCompositor::willRemoveScrollingLayerWithBacking):
        (WebCore::RenderLayerCompositor::didAddScrollingLayer):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::registerAllViewportConstrainedLayers):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::addScrollingLayer):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::removeScrollingLayer):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::removeLayer):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::addViewportConstrainedLayer):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::removeViewportConstrainedLayer):
        (WebCore::RenderLayerCompositor::updateCustomLayersAfterFlush): Deleted.
        (WebCore::RenderLayerCompositor::setCompositingParent): Deleted. This was always called with a null parentLayer, so was a no-op.
        (WebCore::RenderLayerCompositor::removeCompositedChildren): Deleted.
        (WebCore::RenderLayerCompositor::fixedRootBackgroundLayerChanged): Deleted. The work happens via didChangePlatformLayerForLayer() now.
        (WebCore::canCoordinateScrollingForLayer): Deleted.
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedStatus): Deleted.
        (WebCore::enclosingScrollingNodeID): Deleted.
        (WebCore::scrollCoordinatedAncestorInParentOfFrame): Deleted.
        (WebCore::RenderLayerCompositor::reattachSubframeScrollLayers): Deleted.
        (WebCore::RenderLayerCompositor::updateScrollCoordinationForThisFrame): Deleted.
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer): Deleted.
        * rendering/RenderLayerCompositor.h:

2019-01-29  Brent Fulgham  <bfulgham@apple.com>

        Make sure we have a frame before trying to access its loader 
        https://bugs.webkit.org/show_bug.cgi?id=193985
        <rdar://problem/47618239>

        Reviewed by Ryosuke Niwa.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):

2019-01-29  Andy Estes  <aestes@apple.com>

        Try to fix the watchOS build.

        * dom/Element.cpp:

2019-01-29  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION(r240553): [iOS] Crash in ScrollingTree::updateTreeFromStateNode when attempting to log in to icloud.com
        https://bugs.webkit.org/show_bug.cgi?id=193907
        rdar://problem/47604080

        Reviewed by Frédéric Wang.

        Recent scrolling tree changes can trigger unparenting and reparenting of subtrees in the
        state tree. If a subframe's state tree nodes are unparented, a scrolling tree commit would
        show these as nodes being destroyed, which destroyed the tree nodes. When re-parented, the
        commit would re-create the tree node, but the state node would only have a subset of the
        change flags set, so the new tree node would fail to get all of the state (for example, it
        would be missing layers and scrolling geometry).

        Fix by ensuring that when we reparent state node subtrees, we set all the change flags
        so that the full set of data is sent to the scrolling tree (the UI process, in the case of iOS WK2).
        Annoyingly, virtual setAllPropertiesChanged() functions are needed so each state node subclass can
        set the right change flags.

        This patch also gets rid of m_nodesRemovedSinceLastCommit in the state tree. We can gain the same
        information by using copying all of the nodeIDs in m_nodeMap into a HashSet, and removing nodes
        as we encounter them in the tree walk.
        
        Rename m_latchedNode to m_latchedNodeID in ScrollingTree, since it's a nodeID, not a node pointer.

        Test: compositing/geometry/composited-frame-contents.html

        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::setAllPropertiesChanged):
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::setAllPropertiesChanged):
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::setPropertyChanged):
        (WebCore::ScrollingStateNode::setAllPropertiesChanged):
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::setPropertyChangedBit):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::setAllPropertiesChanged):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::setAllPropertiesChanged):
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::insertNode): Add a RELEASE_ASSERT on the type of the node created
        if parentID == 0, since mistakes here can associate a ScrollingNodeType::MainFrame node with some
        other nodeID which can result in type confusion later.
        (WebCore::ScrollingStateTree::nodeWasReattachedRecursive):
        (WebCore::ScrollingStateTree::commit):
        (WebCore::ScrollingStateTree::willRemoveNode):
        (WebCore::ScrollingStateTree::setRemovedNodes): Deleted.
        * page/scrolling/ScrollingStateTree.h:
        (WebCore::ScrollingStateTree::removedNodes const): Deleted.
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously):
        (WebCore::ScrollingTree::commitTreeState):
        (WebCore::ScrollingTree::updateTreeFromStateNode):
        (WebCore::ScrollingTree::latchedNode):
        (WebCore::ScrollingTree::setLatchedNode):
        (WebCore::ScrollingTree::clearLatchedNode):
        (WebCore::ScrollingTree::scrollingTreeAsText):
        (WebCore::ScrollingTree::removeDestroyedNodes): Deleted.
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::hasLatchedNode const):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::ensureRootLayer): The scroll layer needs a 0,0,0 anchor point so that
        setting its position doesn't offset it relative to the center.

2019-01-29  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Fix and add validation to WebGPURenderPipeline and MTLVertexDescriptor
        https://bugs.webkit.org/show_bug.cgi?id=193926
        <rdar://problem/47327648>

        Reviewed by Myles C. Maxfield.

        Update vertex input to properly utilize inputSlot and shaderLocation fields, and add some validation.

        Test: webgpu/vertex-buffer-triangle-strip.html

        * Modules/webgpu/WebGPUVertexInputDescriptor.idl: 
        * platform/graphics/gpu/GPUVertexInputDescriptor.h:
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::setInputStateForPipelineDescriptor): Properly retain Metal types.
        (WebCore::GPURenderPipeline::create): Provide error logging for MTLRenderPipelineState creation.

2019-01-29  Keith Rollin  <krollin@apple.com>

        Add .xcfilelists to Run Script build phases
        https://bugs.webkit.org/show_bug.cgi?id=193792
        <rdar://problem/47201785>

        Reviewed by Alex Christensen.

        As part of supporting XCBuild, update the necessary Run Script build
        phases in their Xcode projects to refer to their associated
        .xcfilelist files.

        Note that the addition of these files bumps the Xcode project version
        number to something that's Xcode 10 compatible. This change means that
        older versions of the Xcode IDE can't read these projects. Nor can it
        fully load workspaces that refer to these projects (the updated
        projects are shown as non-expandable placeholders). `xcodebuild` can
        still build these projects; it's just that the IDE can't open them.

        Make special accommodations for incorporating .xcfilelists from
        WebKitAdditions.

        No new tests since there should be no observable behavior difference.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:

2019-01-29  John Wilander  <wilander@apple.com>

        Add data abstraction and validation for Ad Click Attribution
        https://bugs.webkit.org/show_bug.cgi?id=193916
        <rdar://problem/47603481>

        Reviewed by Daniel Bates, Brent Fulgham, and Alex Christensen.

        New API tests added.

        Ad click attribution has two steps. First, the storage of an ad
        campaign ID for a click that takes the user to a destination
        site. Second, a conversion on the destination site that can be
        attributed to the ad click.

        This patch adds a class that represents a request for ad click
        attribution. Validation makes sure that the bits of entropy
        reported through this mechanism is limited.

        This feature is experimental and off by default.

        * Sources.txt:
            Added loader/AdClickAttribution.cpp.
        * WebCore.xcodeproj/project.pbxproj:
        * loader/AdClickAttribution.cpp: Added.
        (WebCore::AdClickAttribution::isValid const):
        (WebCore::AdClickAttribution::setConversion):
        (WebCore::AdClickAttribution::url const):
        (WebCore::AdClickAttribution::referrer const):
        * loader/AdClickAttribution.h: Added.
        (WebCore::AdClickAttribution::Campaign::Campaign):
        (WebCore::AdClickAttribution::Campaign::isValid const):
        (WebCore::AdClickAttribution::Source::Source):
        (WebCore::AdClickAttribution::Destination::Destination):
        (WebCore::AdClickAttribution::Priority::Priority):
        (WebCore::AdClickAttribution::Conversion::Conversion):
        (WebCore::AdClickAttribution::Conversion::isValid const):
        (WebCore::AdClickAttribution::AdClickAttribution):
        (WebCore::AdClickAttribution::earliestTimeToSend const):
        * loader/DocumentLoader.cpp:
            Added missing #include "RuntimeEnabledFeatures.h".

2019-01-29  Zalan Bujtas  <zalan@apple.com>

        [MathML] Move enum class ScriptType to MathMLScriptsElement.
        https://bugs.webkit.org/show_bug.cgi?id=193969

        Reviewed by Antti Koivisto.

        * mathml/MathMLScriptsElement.cpp:
        (WebCore::scriptTypeOf):
        * mathml/MathMLScriptsElement.h:
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::scriptType const):
        (WebCore::RenderMathMLScripts::validateAndGetReferenceChildren):
        (WebCore::RenderMathMLScripts::computePreferredLogicalWidths):
        (WebCore::RenderMathMLScripts::verticalMetrics):
        (WebCore::RenderMathMLScripts::layoutBlock):
        * rendering/mathml/RenderMathMLScripts.h:
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::isValid const):
        (WebCore::RenderMathMLUnderOver::under const):
        (WebCore::RenderMathMLUnderOver::over const):
        (WebCore::RenderMathMLUnderOver::computePreferredLogicalWidths):
        (WebCore::RenderMathMLUnderOver::hasAccent const):
        (WebCore::RenderMathMLUnderOver::layoutBlock):

2019-01-29  Chris Dumez  <cdumez@apple.com>

        Make sure WTF::generateObjectIdentifier() internal counter does not get duplicated
        https://bugs.webkit.org/show_bug.cgi?id=193848

        Reviewed by Youenn Fablet.

        * dom/Document.cpp:
        * dom/MessageChannel.cpp:
        (WebCore::MessageChannel::MessageChannel):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::contextIdentifier const):
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::registerTemporaryServiceWorkerClient):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow):
        * platform/Process.cpp:
        (WebCore::Process::identifier):
        * workers/service/ServiceWorkerJobData.cpp:
        (WebCore::ServiceWorkerJobData::ServiceWorkerJobData):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::importRecords):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::Connection):
        (WebCore::SWServer::updateWorker):
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::generateServiceWorkerRegistrationIdentifier):
        * workers/service/server/SWServerToContextConnection.cpp:
        (WebCore::generateServerToContextConnectionIdentifier):


2019-01-29  Alex Christensen  <achristensen@webkit.org>

        Use lambdas instead of member pointer functions for TransactionOperationImpl
        https://bugs.webkit.org/show_bug.cgi?id=193933

        Reviewed by Tim Horton.

        No change in behavior.  This just makes it easier to add new parameters to these functions in a straightforward manner.

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::putOrAdd):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::internalAbort):
        (WebCore::IDBTransaction::commit):
        (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::deleteObjectStore):
        (WebCore::IDBTransaction::deleteIndex):
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/client/TransactionOperation.h:
        (WebCore::IDBClient::TransactionOperation::doComplete):
        (WebCore::IDBClient::createTransactionOperation): Deleted.

2019-01-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Remove incorrect downcast<Container>
        https://bugs.webkit.org/show_bug.cgi?id=193964

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeMarginBefore):

2019-01-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Do not ignore next sibling box while laying out BFC.
        https://bugs.webkit.org/show_bug.cgi?id=193954

        Reviewed by Antti Koivisto.

        When a block box has no child (<img style="display: block">), we should not ignore the next sibling (move the container check to the function to keep layout logic simple)
        Also inFlowNonReplacedWidthAndMargin() is called through inFlowReplacedWidthAndMargin() to compute margins.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        (WebCore::Layout::BlockFormattingContext::placeInFlowPositionedChildren const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):

2019-01-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Remove quirk from MarginCollapse::marginsCollapseThrough
        https://bugs.webkit.org/show_bug.cgi?id=193948

        Reviewed by Antti Koivisto.

        This is now implemented in BlockFormattingContext::Quirks::stretchedInFlowHeight().

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginsCollapseThrough):

2019-01-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Anonymous block container's margin before does not collapse with previous inflow sibling margin after.
        https://bugs.webkit.org/show_bug.cgi?id=193952

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithPreviousSiblingMarginAfter):

2019-01-29  Frederic Wang  <fwang@igalia.com>

        Allow scrolling tree nodes to exist in a detached state
        https://bugs.webkit.org/show_bug.cgi?id=193754

        Unreviewed build warning fix.

        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::unparentChildrenAndDestroyNode): Remove
        unused variable.

2019-01-28  Ryosuke Niwa  <rniwa@webkit.org>

        User agent string override for navigator.userAgent should be site specific quirks
        https://bugs.webkit.org/show_bug.cgi?id=193950

        Reviewed by Brent Fulgham.

        In order to make it possible to toggle the UA string override just for navigator.userAgent via Web Inspector,
        we need to put this override behind the site specific quirks. Because WebInspector overrides Page's setting
        without updating WKPreferences, there is no way for WKWebView client's to know whether the site specific quirks
        had been disabled or not.

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setCustomJavaScriptUserAgentAsSiteSpecificQuirks):
        (WebCore::DocumentLoader::customJavaScriptUserAgentAsSiteSpecificQuirks const):
        (WebCore::DocumentLoader::setCustomJavaScriptUserAgent): Deleted.
        (WebCore::DocumentLoader::customJavaScriptUserAgent const): Deleted.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::userAgentForJavaScript const):

2019-01-28  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide a way to edit page WebRTC settings on a remote target
        https://bugs.webkit.org/show_bug.cgi?id=193863
        <rdar://problem/47572764>

        Reviewed by Joseph Pecoraro.

        Test: inspector/page/overrideSetting-ICECandidateFilteringEnabled.html
              inspector/page/overrideSetting-MockCaptureDevicesEnabled.html

        * inspector/agents/InspectorPageAgent.cpp:

        * page/Settings.yaml:
        * page/SettingsBase.h:
        * page/SettingsBase.cpp:
        (SettingsBase::iceCandidateFilteringEnabledChanged): Added.
        (SettingsBase::mockCaptureDevicesEnabledChanged): Added.
        * Scripts/GenerateSettings.rb:
        * Scripts/SettingsTemplates/Settings.cpp.erb:
        Add page-level settings for WebRTC preferences.

        * Modules/mediastream/UserMediaController.cpp:
        (WebCore::UserMediaController::canCallGetUserMedia):

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setMediaCaptureRequiresSecureConnection):

        * testing/Internals.h:
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::setMockMediaCaptureDevicesEnabled):
        (WebCore::Internals::setMediaCaptureRequiresSecureConnection): Added.

        * page/DeprecatedGlobalSettings.h:
        * page/DeprecatedGlobalSettings.cpp:
        (WebCore::DeprecatedGlobalSettings::mockCaptureDevicesEnabled): Deleted.
        (WebCore::DeprecatedGlobalSettings::setMockCaptureDevicesEnabled): Deleted.
        (WebCore::DeprecatedGlobalSettings::mediaCaptureRequiresSecureConnection): Deleted.
        (WebCore::DeprecatedGlobalSettings::setMediaCaptureRequiresSecureConnection): Deleted.

2019-01-28  Jer Noble  <jer.noble@apple.com>

        webkitcurrentplaybacktargetiswirelesschanged and webkitCurrentPlaybackIsWireless are non-deterministic.
        https://bugs.webkit.org/show_bug.cgi?id=193923
        <rdar://problem/45956595>

        Reviewed by Eric Carlson.

        The value of webkitCurrentPlaybackTargetIsWireless can change in between when the event is scheduled
        and when it's actually dispatched. To make this more deterministic, use a GenericTaskQueue to enqueue
        setting m_isPlayingToWirelessTarget and dispatch the changed event in the same run-loop.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::clearMediaPlayer):
        (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged):
        (WebCore::HTMLMediaElement::setIsPlayingToWirelessTarget):
        (WebCore::HTMLMediaElement::dispatchEvent):
        * html/HTMLMediaElement.h:

2019-01-28  Ross Kirsling  <ross.kirsling@sony.com>

        Remove unnecessary `using namespace WTF`s (or at least restrict their scope).
        https://bugs.webkit.org/show_bug.cgi?id=193941

        Reviewed by Alex Christensen.

        * css/CSSBasicShapes.cpp:
        * css/CSSPrimitiveValue.cpp:
        * css/parser/CSSParser.cpp:
        * css/parser/CSSParserSelector.cpp:
        * css/parser/CSSPropertyParser.cpp:
        * dom/Document.cpp:
        * dom/EventListenerMap.cpp:
        * dom/EventTarget.cpp:
        * editing/Editor.cpp:
        * html/HTMLElement.cpp:
        * html/HTMLFontElement.cpp:
        * html/parser/HTMLTokenizer.cpp:
        * html/track/TrackBase.cpp:
        * loader/FTPDirectoryParser.cpp:
        * loader/TextResourceDecoder.cpp:
        * loader/cache/CachedResource.cpp:
        * page/ContextMenuController.cpp:
        * page/Navigator.cpp:
        * platform/Length.cpp:
        * platform/cocoa/KeyEventCocoa.mm:
        * platform/graphics/FontCascade.cpp:
        * platform/graphics/WidthIterator.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        * platform/ios/KeyEventIOS.mm:
        * platform/mac/KeyEventMac.mm:
        * platform/network/HTTPParsers.cpp:
        * platform/text/TextCodecUTF8.cpp:
        * platform/text/TextEncodingRegistry.cpp:
        * platform/win/KeyEventWin.cpp:
        * rendering/BidiRun.cpp:
        * rendering/FloatingObjects.cpp:
        * rendering/RenderBlock.cpp:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderText.cpp:

2019-01-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] WebCore/platform/Process.h is conflicting with process.h
        https://bugs.webkit.org/show_bug.cgi?id=193944

        Reviewed by Ross Kirsling.

        Windows has process.h. Rename Process.h to ProcessIdentifier.h.

        No new tests because there is no behavior change.

        * Sources.txt:
        * UnifiedSources-input.xcfilelist:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/MessagePortIdentifier.h:
        * dom/messageports/MessagePortChannel.h:
        * dom/messageports/MessagePortChannelProvider.h:
        * dom/messageports/MessagePortChannelRegistry.h:
        * history/BackForwardItemIdentifier.h:
        * page/GlobalWindowIdentifier.h:
        * platform/ProcessIdentifier.cpp: Renamed from Source/WebCore/platform/Process.cpp.
        (WebCore::Process::setIdentifier):
        (WebCore::Process::identifier):
        * platform/ProcessIdentifier.h: Renamed from Source/WebCore/platform/Process.h.

2019-01-28  Antoine Quint  <graouts@apple.com>

        Implement capture for Pointer Events on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193917
        <rdar://problem/47605689>

        Reviewed by Dean Jackson.

        We add a new PointerCaptureController object which gets notified upon dispatch of pointer events
        to implement implicit pointer capture, dispatch the gotpointercapture and lostpointercaptiure events,
        and implement the Element APIs for pointer capture: hasPointerCapture(), setPointerCapture() and
        releasePointerCapture().

        Tests: pointerevents/ios/pointer-events-implicit-capture-has-pointer-capture-in-pointer-down.html
               pointerevents/ios/pointer-events-implicit-capture-release-exception.html
               pointerevents/ios/pointer-events-implicit-capture-release.html
               pointerevents/ios/pointer-events-implicit-capture.html
               pointerevents/ios/pointer-events-set-pointer-capture-exceptions.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Element.cpp:
        (WebCore::Element::setPointerCapture):
        (WebCore::Element::releasePointerCapture):
        (WebCore::Element::hasPointerCapture):
        * dom/Element.h:
        * dom/Element.idl:
        * dom/EventNames.h:
        * dom/PointerEvent.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::pointerCaptureController const):
        * page/PointerCaptureController.cpp: Added.
        (WebCore::PointerCaptureController::PointerCaptureController):
        (WebCore::PointerCaptureController::setPointerCapture):
        (WebCore::PointerCaptureController::releasePointerCapture):
        (WebCore::PointerCaptureController::hasPointerCapture):
        (WebCore::PointerCaptureController::pointerLockWasApplied):
        (WebCore::PointerCaptureController::touchEndedOrWasCancelledForIdentifier):
        (WebCore::PointerCaptureController::pointerEventWillBeDispatched):
        (WebCore::PointerCaptureController::pointerEventWasDispatched):
        (WebCore::PointerCaptureController::processPendingPointerCapture):
        * page/PointerCaptureController.h: Added.
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::requestPointerLock):
        * page/PointerLockController.h:

2019-01-28  Andy Estes  <aestes@apple.com>

        [watchOS] Enable Parental Controls content filtering
        https://bugs.webkit.org/show_bug.cgi?id=193939
        <rdar://problem/46641912>

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

2019-01-28  Dean Jackson  <dino@apple.com>

        Produce "pen" Pointer Events if using a stylus (e.g. Apple Pencil)
        https://bugs.webkit.org/show_bug.cgi?id=193945
        <rdar://problem/47618922>

        Reviewed by Antoine Quint.

        Calculate the pressure, tiltX and tiltY values for incoming
        Pointer Events, which have values when the PlatformTouchEvent
        originated from a stylus.

        Test: pointerevents/ios/pointer-events-dispatch-on-stylus.html

        * dom/PointerEvent.h: Default to "mouse".
        * dom/ios/PointerEventIOS.cpp: Calculate the values.

2019-01-28  Timothy Hatcher  <timothy@apple.com>

        Make it easier for non-Apple ports to enable dark mode CSS support.
        https://bugs.webkit.org/show_bug.cgi?id=193882

        Reviewed by Megan Gardner.

        * page/FrameView.cpp:
        (WebCore::FrameView::updateBackgroundRecursively): Limit use of system
        background color to the Mac platform.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::purgeCaches): Purge m_darkColorCache.
        (WebCore::RenderTheme::platformColorsDidChange): Reset m_darkColorCache.
        (WebCore::RenderTheme::colorCache const): Added m_darkColorCache.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::colorCache const): Deleted.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::purgeCaches): Removed m_darkColorCache.
        (WebCore::RenderThemeMac::platformColorsDidChange): Deleted.
        (WebCore::RenderThemeMac::colorCache const): Deleted.

2019-01-28  Simon Fraser  <simon.fraser@apple.com>

        svg/text/select-text-inside-non-static-position.html crashes under ScrollingStateTree::unparentChildrenAndDestroyNode()
        https://bugs.webkit.org/show_bug.cgi?id=193930

        Reviewed by Tim Horton.

        ScrollingStateTree::unparentChildrenAndDestroyNode() should make a copy of the 'children' vector
        before iterating, since iteration mutates the array.

        Tested by ASan tests.

        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::takeChildren):
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::unparentChildrenAndDestroyNode):

2019-01-28  Simon Fraser  <simon.fraser@apple.com>

        css3/filters/blur-filter-page-scroll-self.html crashes under WebCore::ScrollingStateNode::ScrollingStateNode
        https://bugs.webkit.org/show_bug.cgi?id=193925

        Reviewed by Tim Horton.

        Some css3/filters/ tests disable accelerated compositing (which is crazy). Make these
        tests not crash by ensuring that unparentNode() and unparentChildrenAndDestroyNode() clears the root
        node if it's the node being unparented or destroyed.

        Tested by existing tests.

        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::unparentNode):
        (WebCore::ScrollingStateTree::unparentChildrenAndDestroyNode):

2019-01-28  Daniel Bates  <dabates@apple.com>

        [iOS] Make Window virtual key code computation match Mac
        https://bugs.webkit.org/show_bug.cgi?id=193452

        Reviewed by Ryosuke Niwa.

        Use the same approach for computing the Windows virtual key code on iOS as we do on Mac for
        web compatibility. On Mac, we prefer to compute the  Windows virtual key code from the input
        strings of the key event and use the key event's keycode as a last resort.

        Test: fast/events/ios/key-events-meta-alt-combinations.html

        * platform/ios/PlatformEventFactoryIOS.h:
        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::isKeypadEvent): Added.
        (WebCore::windowsKeyCodeForKeyEvent): Added.
        (WebCore::PlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder): Modified to call
        WebCore::windowsKeyCodeForKeyEvent() to compute the Windows virtual key code.

2019-01-28  Antoine Quint  <graouts@apple.com>

        Limit user-agent interactions based on the touch-action property on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193447

        Unreviewed build fix.

        * dom/Element.cpp:
        (WebCore::parentCrossingFrameBoundaries):

2019-01-28  Eric Carlson  <eric.carlson@apple.com>

        AVStreamSession isn't always available, make a HAVE compile flag for it
        https://bugs.webkit.org/show_bug.cgi?id=193889
        <rdar://problem/47452863>

        Reviewed by Jer Noble.

        No new tests, no functional change.

        * page/Settings.yaml:
        * page/SettingsBase.cpp:
        (WebCore::SettingsBase::platformDefaultMediaSourceEnabled):
        * page/SettingsBase.h:
        * page/cocoa/SettingsBaseCocoa.mm:
        (WebCore::SettingsBase::platformDefaultMediaSourceEnabled):
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm:
        (WebCore::CDMPrivateMediaSourceAVFObjC::createSession):
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::durationChanged): Fix logging.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::outputObscuredDueToInsufficientExternalProtectionChanged):

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        
        Use a HashMap to associate CMSampleBuffer with SourceBufferPrivateAVFObjC.

        (-[WebAVSampleBufferErrorListener observeValueForKeyPath:ofObject:change:context:]): isEqualTo
        -> isEqualToString.
        (WebCore::sourceBufferMap):
        (WebCore::nextMapID):
        (WebCore::bufferWasConsumedCallback):
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::willProvideContentKeyRequestInitializationDataForTrackID):
        (WebCore::SourceBufferPrivateAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID):
        (WebCore::SourceBufferPrivateAVFObjC::append):
        (WebCore::SourceBufferPrivateAVFObjC::destroyParser):
        (WebCore::SourceBufferPrivateAVFObjC::layerDidReceiveError):
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):
        (WebCore::SourceBufferPrivateAVFObjC::bufferWasConsumed):
        (-[WebBufferConsumedContext initWithParent:]): Deleted.
        (-[WebBufferConsumedContext parent]): Deleted.

2019-01-28  Rob Buis  <rbuis@igalia.com>

        Update MIME type parser
        https://bugs.webkit.org/show_bug.cgi?id=180526

        Reviewed by Frédéric Wang.

        I overlooked step 11.9.3 [1], for Mimesniff we should not
        bail out on missing subtype, but keep trying. Note
        that Rfc2045 does require bailing out, as before.

        Test: ParsedContentType unittest

        [1] https://mimesniff.spec.whatwg.org/#parse-a-mime-type

        * platform/network/ParsedContentType.cpp:
        (WebCore::parseToken):
        (WebCore::parseContentType):

2019-01-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed follow-up to r240557, restore a call to makeString
        https://bugs.webkit.org/show_bug.cgi?id=192742
        <rdar://problem/46757369>

        It works if we add this #include that was missing. I got confused by the error messages and
        missed that there were two similarly-named headers.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo):

2019-01-28  Oriol Brufau  <obrufau@igalia.com>

        [css-logical] Reject unitless length quirk in 'inset' shorthand
        https://bugs.webkit.org/show_bug.cgi?id=193773

        Reviewed by Manuel Rego Casasnovas.

        Even though its longhands ('top', 'right', 'bottom', 'left') accept the
        unitless length quirk, the 'inset' shorthand is a new CSS property and
        should reject it. This was resolved by the CSS WG in
        https://github.com/w3c/csswg-drafts/issues/3525#issuecomment-456902648

        Tests: imported/w3c/web-platform-tests/quirks/unitless-length/excluded-properties-001.html
               imported/w3c/web-platform-tests/quirks/unitless-length/excluded-properties-002.html
               imported/w3c/web-platform-tests/quirks/unitless-length/excluded-properties-003.html
               imported/w3c/web-platform-tests/quirks/unitless-length/limited-quirks.html
               imported/w3c/web-platform-tests/quirks/unitless-length/no-quirks.html
               imported/w3c/web-platform-tests/quirks/unitless-length/quirks.html

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):

2019-01-28  Zalan Bujtas  <zalan@apple.com>

        [LFC][MarginCollapsing][Quirks] Quirk margin values get propagated through margin collapsing
        https://bugs.webkit.org/show_bug.cgi?id=193896

        Reviewed by Antti Koivisto.

        This patch implements quirk margin value collapsing. There are a few "quirk" rules when it comes to margin collapsing.

        1. Collapsed quirk margin values are ignored on quirk containers

            <body>
              <p> p elements have 1em vertical (top/bottom) quirk margin
            </body>

            In quirk mode, <p> and <body> (quirk container) collapses their vertical margins but <p>'s quirk values(1qem -> 16px) are ignored.
            Used vertical margin values on the <body> are top: 8px bottom: 8px.

        2. Quirk margin values are turned into non-quirk values when collapsed with non-zero, non-quirk margins.

            <body>
              <div style="margin-top: 1px">
                <p> p elements have 1em vertical (top/bottom) quirk margin
              </div>
            </body>

            When <p>'s vertical margin collapses with the parent <div>,
            - the collapsed before value becomes 16px (max(1qem, 1px)) and this collapsed value is now considered as a non-quirk value
            - the collapsed after value stays 1qem quirk value.

            When <div> collapses with <body>
            - the collapsed before value becomes 16px (max(16px, 8px))
            - the <div>'s quirk after value gets ignored and the collapsed after value stays 8px.
            Used vertical margin values on the <body> are top: 16px (1em) bottom: 8px.

        * layout/MarginTypes.h:
        (WebCore::Layout::PositiveAndNegativeVerticalMargin::Values::isNonZero const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::shouldIgnoreCollapsedQuirkMargin):
        (WebCore::Layout::hasMarginBeforeQuirkValue): Deleted.
        (WebCore::Layout::BlockFormattingContext::Quirks::shouldIgnoreMarginBefore): Deleted.
        (WebCore::Layout::BlockFormattingContext::Quirks::shouldIgnoreMarginAfter): Deleted.
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithPreviousSiblingMarginAfter):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithFirstInFlowChildMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithLastInFlowChildMarginAfter):
        (WebCore::Layout::computedPositiveAndNegativeMargin):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeMarginAfter):

2019-01-28  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Remove redundant vertical positioning in BlockFormattingContext::computeFloatingPosition
        https://bugs.webkit.org/show_bug.cgi?id=193872

        Reviewed by Antti Koivisto.

        This is taken care of by verticalPositionWithMargin() in BlockFormattingContext::computeHeightAndMargin(). 

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeFloatingPosition const):

2019-01-28  cathie chen  <cathiechen@igalia.com>

        Add missing #include in ScrollingTreeFrameScrollingNode.cpp
        https://bugs.webkit.org/show_bug.cgi?id=193905

        Reviewed by Frédéric Wang.

        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp: Add
        #include "ScrollingStateFrameScrollingNode.h"

2019-01-28  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][Quirk] Ignore collapsed(through) margin after when stretching body height.
        https://bugs.webkit.org/show_bug.cgi?id=193894

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedInFlowHeight):

2019-01-28  Antoine Quint  <graouts@apple.com>

        Limit user-agent interactions based on the touch-action property on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193447
        <rdar://problem/47283874>

        Reviewed by Antti Koivisto and Simon Fraser.

        We now compile a list of elements with a non-auto touch-action property that is updated whenever an element has its style changed
        or is removed from its document. When the content of that list changes, we inform the scrolling coordinator such that it can compile
        a list of TouchActionData structures which hold the touch-action value, the ID of the nearest scroll node and the Region containing
        the bounds of each of those elements to send it up to the UI process along with touch regions. Computing the list of allowed touch
        actions for a given element accounts for not only the value specified directly on that element's style, but also in its hierarchy,
        crossing any frame boundary towards the top-level document's root node.

        Tests: pointerevents/ios/touch-action-none-in-overflow-scrolling-touch.html
               pointerevents/ios/touch-action-none-on-iframe.html
               pointerevents/ios/touch-action-none-on-parent.html
               pointerevents/ios/touch-action-none.html
               pointerevents/ios/touch-action-pan-x-pan-y.html
               pointerevents/ios/touch-action-pan-x.html
               pointerevents/ios/touch-action-pan-y.html
               pointerevents/ios/touch-action-pinch-zoom-allows-zooming.html
               pointerevents/ios/touch-action-pinch-zoom-prevents-scrolling.html

        * WebCore.xcodeproj/project.pbxproj: Update how certain headers are exposed such that they can be used from WebKit.
        * dom/Document.cpp:
        (WebCore::Document::invalidateRenderingDependentRegions):
        (WebCore::Document::nodeWillBeRemoved): Ensure a node that is being removed from this document is no longer listed in its
        list of elements with a non-auto touch-action property.
        (WebCore::Document::absoluteEventRegionForNode):
        (WebCore::Document::absoluteRegionForEventTargets):
        (WebCore::Document::updateTouchActionElements): Create a list of elements with a non-auto touch-action property if one doesn't
        exist yet and update it to add the given element if it contains a non-auto touch-action, or remove it if it doesn't. If the contents
        of that list changed as a result, the scrolling coordinator is informed.
        * dom/Document.h:
        (WebCore::Document:: const):
        * dom/Element.cpp:
        (WebCore::parentCrossingFrameBoundaries):
        (WebCore::Element::computedTouchActions const): Provide the list of allowed touch actions accounting for the "touch-action" property
        specified on this element and all of its hierarchy, crossing frame boundary.
        (WebCore::Element::nearestScrollingNodeIDUsingTouchOverflowScrolling const): Provide the ScrollingNodeID, if any, for the nearest scrolling node
        for that element. This will allow the UI process to identify which scroll view's behavior to customize to reflect the element's allowed
        touch actions.
        * dom/Element.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::absoluteEventTrackingRegionsForFrame const): Compute the region for all elements with a non-auto touch-action property
        throughout the provided frame and all of its subframes.
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollableAreaParameters::operator== const): Deleted.
        * page/scrolling/ScrollingCoordinatorTypes.h: Added.
        (WebCore::ScrollableAreaParameters::operator== const):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::touchActionDataAtPoint const): Query the list of TouchActionData objects for a match based on the provided point. Right
        now the logic is pretty crude, stopping at the first TouchActionData for which the region contains the provided point, but future patches will
        account for overlap and nesting.
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeNode.h:
        * platform/EventTrackingRegions.cpp:
        (WebCore::operator==):
        * platform/EventTrackingRegions.h:
        (WebCore::operator!=):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveElement): Update the list of elements with a non-auto touch-action property when an element's style changes.

2019-01-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix WPE/GTK debug builds after r240557
        https://bugs.webkit.org/show_bug.cgi?id=192742
        <rdar://problem/46757369>

        Also fix an improper format string that was recently added in a different commit.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo):
        (WebCore::RenderLayerCompositor::reattachSubframeScrollLayers):

2018-12-15  Darin Adler  <darin@apple.com>

        Replace many uses of String::format with more type-safe alternatives
        https://bugs.webkit.org/show_bug.cgi?id=192742

        Reviewed by Mark Lam.

        A while back, String::format was more efficient than string concatenation,
        but that is no longer true, and we should prefer String::number, makeString,
        or concatenation with the "+" operator to String::format for new code.

        This is not as good for programmers who are fond of printf formatting
        style, and in some cases it's a little harder to read the strings
        interspersed with variables rather than a format string, but it's better
        in a few ways:

        - more efficient (I didn't measure the difference, but it's definitely
          slower to use String::Format which calls vsnprintf twice than to use
          the WTF code)
        - works in a type-safe way without a need to use a format specifier such
          as "%" PRIu64 or "%tu" making it much easier to avoid problems due to
          subtle differences between platforms
        - allows us to use StringView in some cases to sidestep the need to
          allocate temporary WTF::String objects
        - does not require converting each WTF::String to a C string, allowing
          us to remove many cases of ".utf8().data()" and similar expressions,
          eliminating the allocation of temporary WTF::CString objects

        This patch covers a batch of easiest-to-convert call sites.
        Later patches will allow us to deprecate or remove String::format.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::addRecord): Use makeString.
        * Modules/indexeddb/shared/IDBCursorInfo.cpp:
        (WebCore::IDBCursorInfo::loggingString const): Ditto.
        * Modules/indexeddb/shared/IDBGetAllRecordsData.cpp:
        (WebCore::IDBGetAllRecordsData::loggingString const): Ditto.
        * Modules/indexeddb/shared/IDBGetRecordData.cpp:
        (WebCore::IDBGetRecordData::loggingString const): Ditto.
        * Modules/indexeddb/shared/IDBIndexInfo.cpp:
        (WebCore::IDBIndexInfo::loggingString const): Ditto.
        (WebCore::IDBIndexInfo::condensedLoggingString const): Ditto.
        * Modules/indexeddb/shared/IDBIterateCursorData.cpp:
        (WebCore::IDBIterateCursorData::loggingString const): Ditto.
        * Modules/indexeddb/shared/IDBObjectStoreInfo.cpp:
        (WebCore::IDBObjectStoreInfo::condensedLoggingString const): Ditto.
        * Modules/indexeddb/shared/IDBResourceIdentifier.cpp:
        (WebCore::IDBResourceIdentifier::loggingString const): Ditto.
        * Modules/webdatabase/Database.cpp:
        (WebCore::formatErrorMessage): Ditto.
        * Modules/webdatabase/SQLError.h:
        (WebCore::SQLError::create): Ditto.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): Use makeString.

        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        * bindings/scripts/test/JS/JSMapLike.cpp:
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        * bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        Updated expected results.
:
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseHexColor): Use String::number
        and makeString.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setLength): Use makeString.
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::imageUpdated): Ditto.
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init): Ditto.
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::setDockingUnavailable): Ditto.
        (WebCore::InspectorFrontendClientLocal::setAttachedWindow): Ditto.
        (WebCore::InspectorFrontendClientLocal::setDebuggingEnabled): Ditto.
        (WebCore::InspectorFrontendClientLocal::setTimelineProfilingEnabled): Ditto.
        (WebCore::InspectorFrontendClientLocal::showMainResourceForFrame): Ditto.
        * inspector/agents/InspectorCSSAgent.cpp: Ditto.
        * inspector/agents/InspectorIndexedDBAgent.cpp: Ditto.
        * page/MemoryRelease.cpp:
        (WebCore::logMemoryStatisticsAtTimeOfDeath): Ditto.

        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::formatByteNumber): Use String::number.
        (WebCore::ResourceUsageOverlay::platformDraw): Use string concatenation.

        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::logFootprintComparison): Use makeString.
        * platform/animation/TimingFunction.cpp:
        (WebCore::TimingFunction::cssText const): Ditto.

        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::AVTrackPrivateAVFObjCImpl::id const): Use AtomicString::number.
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h:
        (WebCore::MediaSampleAVFObjC::MediaSampleAVFObjC): Ditto.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setContentsToSolidColor): Use makeString.
        (WebCore::GraphicsLayerCA::updateContentsImage): Ditto.
        (WebCore::GraphicsLayerCA::updateContentsRects): Ditto.
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): Ditto.
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::drawText): Ditto.

        * platform/mock/mediasource/MockSourceBufferPrivate.cpp: Use String::number.

        * platform/network/ParsedContentRange.cpp:
        (WebCore::ParsedContentRange::headerValue const): Use makeString.

        * platform/network/cf/NetworkStorageSessionCFNet.cpp: Removed some unnecessary
        compiler conditionals and reorganized the start/stop of namespaces.
        (WebCore::NetworkStorageSession::switchToNewTestingSession): Use makeString.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::unauthorizedSQLFunction): Use makeString.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo): Ditto.
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::ensureValidRecordsTable): Ditto.
        (WebCore::RegistrationDatabase::importRecords): Ditto.

2019-01-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove a couple of PLATFORM defines intended for watchOS
        https://bugs.webkit.org/show_bug.cgi?id=193888

        Reviewed by Alexey Proskuryakov.

        Remove the use of !PLATFORM(WATCH), since this is true on every platform.

        * editing/cocoa/DictionaryLookup.mm:

2019-01-27  Jiewen Tan  <jiewen_tan@apple.com>

        Use a load optimizer for some sites
        https://bugs.webkit.org/show_bug.cgi?id=193881
        <rdar://problem/46325455>

        Reviewed by Brent Fulgham.

        Expose FormData::flatten to be used by the load optimizer.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/FormData.h:

2019-01-26  Simon Fraser  <simon.fraser@apple.com>

        Have composited RenderIFrame layers make FrameHosting scrolling tree nodes to parent the iframe's scrolling node
        https://bugs.webkit.org/show_bug.cgi?id=193879

        Reviewed by Antti Koivisto.

        Currently we parent iframe scrolling tree nodes by finding the closest ancestor layer with a scrolling tree node.
        This results in scrolling tree nodes being connected across iframe boundaries in some arbitrary ancestor. This
        makes updating scrolling tree geometry very error-prone, since changes in the parent document will need to trigger
        updates of the scrolling tree node in an iframe.
        
        To address this, I already added a new "FrameHosting" scrolling node type. This patch actually instantiates these
        nodes, which are owned by the RenderIFrame's composited layer. Connecting across frame boundaries is theforefore
        simply a case of getting the FrameHosting node from the ownerElement's renderer; this is very similar to how we
        connect GraphicsLayers together.
        
        RenderLayerBacking gains another scrolling role for FrameHosting and ScrollingNodeID.

        Tested by existing tests.

        * page/FrameView.h:
        * rendering/RenderLayer.cpp:
        (WebCore::outputPaintOrderTreeRecursive):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::RenderLayerBacking::detachFromScrollingCoordinator):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::frameContentsRenderView):
        (WebCore::RenderLayerCompositor::frameContentsCompositor):
        (WebCore::RenderLayerCompositor::parentFrameContentLayers):
        (WebCore::RenderLayerCompositor::isLayerForIFrameWithScrollCoordinatedContents const):
        (WebCore::RenderLayerCompositor::detachRootLayer):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedStatus):
        (WebCore::RenderLayerCompositor::removeFromScrollCoordinatedLayers):
        (WebCore::scrollCoordinatedAncestorInParentOfFrame):
        (WebCore::RenderLayerCompositor::reattachSubframeScrollLayers):
        (WebCore::RenderLayerCompositor::attachScrollingNode):
        (WebCore::RenderLayerCompositor::updateScrollCoordinationForThisFrame):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):
        * rendering/RenderLayerCompositor.h:
        * testing/Internals.cpp:
        (WebCore::Internals::scrollingStateTreeAsText const):

2019-01-27  Chris Fleizach  <cfleizach@apple.com>

        AX: Introduce a static accessibility tree
        https://bugs.webkit.org/show_bug.cgi?id=193348
        <rdar://problem/47203295>

        Reviewed by Ryosuke Niwa.

        In order to improve performance when requesting the accessibility hierarchy, we introduce the idea of a "static accessibility tree" which 
        could be accessed on a different thread by assistive technologies.
        That is accomplished by storing all the data needed to answer accessibility attribute queries in a static object that mirrors the 
        "live" AccessibilityObjects (which interact with both DOM and Render trees).
        These static objects are generally created after layout is done and final tasks are being performed. They are then stored in the static tree 
        representation and able to be read from anywhere.
        Tactically this is done with AXIsolatedTreeNodes inside of an AXIsolatedTree. The TreeNodes implement an AccessibilityObjectInterface shared 
        with AccessibilityObject.
        This allows the wrappers to access either one depending on conditions and platforms without significant code duplication or re-organization.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::createIsolatedAccessibilityTree):
        (WebCore::AXObjectCache::generateStaticAccessibilityTreeIfNeeded):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h: Added.
        * accessibility/isolatedtree: Added.
        * accessibility/isolatedtree/AXIsolatedTree.cpp: Added.
        (WebCore::AXIsolatedTree::treeCache):
        (WebCore::AXIsolatedTree::AXIsolatedTree):
        (WebCore::AXIsolatedTree::create):
        (WebCore::AXIsolatedTree::treeForID):
        (WebCore::AXIsolatedTree::treeForPageID):
        (WebCore::AXIsolatedTree::nodeForID const):
        (WebCore::AXIsolatedTree::rootNode):
        (WebCore::AXIsolatedTree::removeNode):
        (WebCore::AXIsolatedTree::appendNodeChanges):
        (WebCore::AXIsolatedTree::applyPendingChanges):
        * accessibility/isolatedtree/AXIsolatedTree.h: Added.
        (WebCore::AXIsolatedTree::treeIdentifier const):
        * accessibility/isolatedtree/AXIsolatedTreeNode.cpp: Added.
            To note: we don't mark the attribute map const because even though attributes don't change after initial creation,
            we may copy an existing node and replace specific values.
        (WebCore::AXIsolatedTreeNode::AXIsolatedTreeNode):
        (WebCore::AXIsolatedTreeNode::create):
        (WebCore::AXIsolatedTreeNode::initializeAttributeData):
        (WebCore::AXIsolatedTreeNode::setProperty):
        (WebCore::AXIsolatedTreeNode::doubleAttributeValue const):
        (WebCore::AXIsolatedTreeNode::unsignedAttributeValue const):
        (WebCore::AXIsolatedTreeNode::boolAttributeValue const):
        (WebCore::AXIsolatedTreeNode::stringAttributeValue const):
        (WebCore::AXIsolatedTreeNode::intAttributeValue const):
        * accessibility/isolatedtree/AXIsolatedTreeNode.h: Added.
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::associateIsolatedTreeNode):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase initWithAccessibilityObject:]):
        (-[WebAccessibilityObjectWrapperBase isolatedTreeNode]):
        (-[WebAccessibilityObjectWrapperBase detach]):
        (-[WebAccessibilityObjectWrapperBase updateObjectBackingStore]):
        (-[WebAccessibilityObjectWrapperBase axBackingObject]):
        (-[WebAccessibilityObjectWrapperBase baseAccessibilityDescription]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper role]):
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper roleDescription]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * dom/Document.cpp:
        (WebCore::Document::pageID const):
        * dom/Document.h:

2019-01-26  Simon Fraser  <simon.fraser@apple.com>

        Allow scrolling tree nodes to exist in a detached state
        https://bugs.webkit.org/show_bug.cgi?id=193754

        Reviewed by Zalan Bujtas.

        One of the (questionable?) design decisions of the scrolling tree is that the tree implementation
        is hidden behind the ScrollingCoordinator interface. That interface only allowed nodes to exist
        in a connected state; attachToStateTree() required a non-zero parent for any node that was not
        the root.

        This makes it impossible to coordinate the hookup of the scrolling tree across frame boundaries;
        the scrolling tree has to have been fully constructed in ancestor frames before subframe nodes
        can be attached. This is a significant difference from compositing, where a subframe can create
        GraphicsLayers which don't have to be parented right away, and actually get parented later via
        a compositing update in the parent frame.

        We want to be able to hook up the scrolling tree via the same code paths as GraphicsLayer
        connection (anything else is too confusing). So we need to be able to instantiate scrolling
        tree nodes in a disconnected state, and attach them later.

        To achieve this, add the notion of "unparented" nodes to ScrollingCoordinator and the ScrollingStateTree.
        Allow clients to create unparented nodes, which can be attached later. ScrollingCoordinator stores
        the roots of unparented subtrees in an owning HashMap. Nodes in unparented trees are still referenced
        by m_stateNodeMap, so it's possible to find them and set state on them.

        Clean up the ScrollingCoordinator interface to remove "state tree" terminology; the state vs. scrolling tree
        is really an implementation detail.

        This also removes the special-casing of ScrollingNodeType::Subframe nodes which ScrollingStateTree stored
        in m_orphanedSubframeNodes; now the unparenting is controlled by the client.

        Currently no code creates unparented nodes so there is no behavior change.

        * dom/Document.cpp:
        (WebCore::Document::setPageCacheState):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::createNode):
        (WebCore::AsyncScrollingCoordinator::insertNode):
        (WebCore::AsyncScrollingCoordinator::unparentNode):
        (WebCore::AsyncScrollingCoordinator::unparentChildrenAndDestroyNode):
        (WebCore::AsyncScrollingCoordinator::detachAndDestroySubtree):
        (WebCore::AsyncScrollingCoordinator::clearAllNodes):
        (WebCore::AsyncScrollingCoordinator::parentOfNode const):
        (WebCore::AsyncScrollingCoordinator::ensureRootStateNodeForFrameView):
        (WebCore::AsyncScrollingCoordinator::attachToStateTree): Deleted.
        (WebCore::AsyncScrollingCoordinator::detachFromStateTree): Deleted.
        (WebCore::AsyncScrollingCoordinator::clearStateTree): Deleted.
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::handleWheelEvent):
        (WebCore::ScrollingCoordinator::createNode):
        (WebCore::ScrollingCoordinator::insertNode):
        (WebCore::ScrollingCoordinator::unparentNode):
        (WebCore::ScrollingCoordinator::unparentChildrenAndDestroyNode):
        (WebCore::ScrollingCoordinator::detachAndDestroySubtree):
        (WebCore::ScrollingCoordinator::clearAllNodes):
        (WebCore::ScrollingCoordinator::parentOfNode const):
        (WebCore::ScrollingCoordinator::childrenOfNode const):
        (WebCore::ScrollingCoordinator::attachToStateTree): Deleted.
        (WebCore::ScrollingCoordinator::detachFromStateTree): Deleted.
        (WebCore::ScrollingCoordinator::clearStateTree): Deleted.
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::removeFromParent):
        (WebCore::ScrollingStateNode::removeChild):
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::ScrollingStateTree):
        (WebCore::ScrollingStateTree::createUnparentedNode):
        (WebCore::ScrollingStateTree::insertNode):
        (WebCore::ScrollingStateTree::unparentNode):
        (WebCore::ScrollingStateTree::unparentChildrenAndDestroyNode):
        (WebCore::ScrollingStateTree::detachAndDestroySubtree):
        (WebCore::ScrollingStateTree::clear):
        (WebCore::ScrollingStateTree::commit):
        (WebCore::ScrollingStateTree::removeNodeAndAllDescendants):
        (WebCore::ScrollingStateTree::recursiveNodeWillBeRemoved):
        (showScrollingStateTree):
        (WebCore::ScrollingStateTree::attachNode): Deleted.
        (WebCore::ScrollingStateTree::detachNode): Deleted.
        * page/scrolling/ScrollingStateTree.h:
        (WebCore::ScrollingStateTree::nodeCount const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::detachFromScrollingCoordinator):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::reattachSubframeScrollLayers):
        (WebCore::RenderLayerCompositor::attachScrollingNode):

2019-01-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide a way to edit the user agent of a remote target
        https://bugs.webkit.org/show_bug.cgi?id=193862
        <rdar://problem/47359292>

        Reviewed by Joseph Pecoraro.

        Test: inspector/page/overrideUserAgent.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::userAgent const):
        (WebCore::FrameLoader::userAgentForJavaScript const):

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::applyUserAgentOverride): Added.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::applyUserAgentOverrideImpl): Added.

        * inspector/agents/InspectorPageAgent.h:
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::overrideUserAgent): Added.
        (WebCore::InspectorPageAgent::applyUserAgentOverride): Added.

2019-01-26  Zalan Bujtas  <zalan@apple.com>

        [LFC] The initial values for top/bottom in contentHeightForFormattingContextRoot should not be 0.
        https://bugs.webkit.org/show_bug.cgi?id=193867

        Reviewed by Antti Koivisto.

        The initial content top/bottom value is the border top + padding top.

        This is only a problem when the box has float children only. While computing the height using the bottom-most float,
        we call "top = std::min(floatTop, top)". With 0 initial top value, this returns an incorrect result when the box
        has (top)border/padding.

        Test: fast/block/block-only/abs-pos-with-border-padding-and-float-child.html

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::contentHeightForFormattingContextRoot):

2019-01-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Ignore last inflow child's collapsed through margin after when computing containing block's height.
        https://bugs.webkit.org/show_bug.cgi?id=193865

        Reviewed by Antti Koivisto.

        Height computation ->
        // 10.6.3 Block-level non-replaced elements in normal flow when 'overflow' computes to 'visible'
        // ...the bottom edge of the bottom (possibly collapsed) margin of its last in-flow child, if the child's bottom
        // margin does not collapse with the element's bottom margin

        <div style="border: 1px solid green">
          <div style="margin-top: 100px;"></div>
        </div>

        When the child vertical margins collapse through (margin-top = margin-bottom = 100px), the bottom edge of the bottom margin is
        the same as the bottom edge of the top margin which is alredy taken into use while positioning so technically the bottom margin value should be ignored. 

        Test: fast/block/margin-collapse/collapsed-through-child-simple.html

        * layout/MarginTypes.h:
        (WebCore::Layout::UsedVerticalMargin::isCollapsedThrough const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::hasCollapsedThroughMargin const):

2019-01-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] marginAfterCollapsesWithParentMarginAfter/marginAfterCollapsesWithLastInFlowChildMarginAfter should check for border/padding after values.
        https://bugs.webkit.org/show_bug.cgi?id=193864

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithParentMarginAfter):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithLastInFlowChildMarginAfter):

2019-01-26  Zalan Bujtas  <zalan@apple.com>

        [LFC] Box::nextInFlowOrFloatingSibling() should always return sibling floats as well.
        https://bugs.webkit.org/show_bug.cgi?id=193855

        Reviewed by Antti Koivisto.

        Use iterative algorithm to find next/previous siblings.

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::nextInFlowOrFloatingSibling const):

2019-01-25  Ryosuke Niwa  <rniwa@webkit.org>

        Need a mechanism to override navigator.userAgent
        https://bugs.webkit.org/show_bug.cgi?id=193762
        <rdar://problem/47504939>

        Reviewed by Brent Fulgham.

        Added the ability to specify user agent string just for navigator.userAgent via DocumentLoader.

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setCustomJavaScriptUserAgent):
        (WebCore::DocumentLoader::customJavaScriptUserAgent const):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::userAgentForJavaScript const):
        * loader/FrameLoader.h:
        * page/Navigator.cpp:
        (WebCore::Navigator::userAgent const):

2019-01-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide a way to edit page settings on a remote target
        https://bugs.webkit.org/show_bug.cgi?id=193813
        <rdar://problem/47359510>

        Reviewed by Joseph Pecoraro.

        Test: inspector/page/overrideSetting.html

        * page/Settings.yaml:
        * Scripts/GenerateSettings.rb:
        * Scripts/SettingsTemplates/Settings.cpp.erb:
        * Scripts/SettingsTemplates/Settings.h.erb:
        Add support for an `inspectorOverride` boolean value for each setting that will take
        precedence over the actual `Setting`'s value when set.

        * inspector/agents/InspectorPageAgent.h:
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::overrideSetting): Added.

        * inspector/InspectorFrontendHost.idl:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::isRemote const): Added.
        * inspector/InspectorFrontendClient.h:
        (WebCore::InspectorFrontendClient::isRemote const): Added.
        * inspector/InspectorFrontendClientLocal.h:
        (WebCore::InspectorFrontendClientLocal::isRemote const): Added.

2019-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Document::updateMainArticleElementAfterLayout() should be a no-op when no client depends on knowing the main article element
        https://bugs.webkit.org/show_bug.cgi?id=193843

        Reviewed by Zalan Bujtas.

        * dom/Document.cpp:
        (WebCore::Document::updateMainArticleElementAfterLayout):

        This function currently does a bit of wasted work after every layout, on clients that don't listen to the
        "significant rendered text" layout milestone and therefore don't need to guess the main article element. Simply
        don't bother keeping the main article element up to date in this scenario by bailing from
        FrameView::updateHasReachedSignificantRenderedTextThreshold if the client doesn't care about the significant
        rendered text milestone.

        * page/FrameView.cpp:
        (WebCore::FrameView::updateHasReachedSignificantRenderedTextThreshold):

2019-01-25  Jer Noble  <jer.noble@apple.com>

        <video> elements not in the DOM should be allowed to AirPlay
        https://bugs.webkit.org/show_bug.cgi?id=193837
        <rdar://42559491>

        Reviewed by Eric Carlson.

        Test: media/airplay-allows-buffering.html

        Some websites will switch between <video> elements backed by MSE to one backed by
        a media file in order to implement an AirPlay control. But when a <video> element is
        removed from the DOM and paused, further buffering is blocked. For some ports (namely
        Cocoa ones), this keeps AirPlay from engaging. Relax this buffering restriction for
        elements who have been asked to play wirelessly, but whose wireless playback has not
        started yet.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::dataBufferingPermitted const):
        (WebCore::MediaElementSession::setShouldPlayToPlaybackTarget):

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update Xcode projects with "Check .xcfilelists" build phase
        https://bugs.webkit.org/show_bug.cgi?id=193790
        <rdar://problem/47201374>

        Reviewed by Alex Christensen.

        Support for XCBuild includes specifying inputs and outputs to various
        Run Script build phases. These inputs and outputs are specified as
        .xcfilelist files. Once created, these .xcfilelist files need to be
        kept up-to-date. In order to check that they are up-to-date or not,
        add an Xcode build step that invokes an external script that performs
        the checking. If the .xcfilelists are found to be out-of-date, update
        them, halt the build, and instruct the developer to restart the build
        with up-to-date files.

        At this time, the checking and regenerating is performed only if the
        WK_ENABLE_CHECK_XCFILELISTS environment variable is set to 1. People
        who want to use this facility can set this variable and test out the
        checking/regenerating. Once it seems like there are no egregious
        issues that upset a developer's workflow, we'll unconditionally enable
        this facility.

        No new tests since there should be no observable behavior difference.

        * Scripts/check-xcfilelists.sh: Added.
        * WebCore.xcodeproj/project.pbxproj:

2019-01-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Exclude Debugger Threads from CPU Usage values in Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=193796
        <rdar://problem/47532910>

        Reviewed by Devin Rousso.

        * page/ResourceUsageData.h:
        * inspector/agents/InspectorCPUProfilerAgent.cpp:
        (WebCore::InspectorCPUProfilerAgent::collectSample):
        Show the CPU usage without debugger threads in the Web Inspector's timeline.

        * page/ResourceUsageThread.h:
        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::ResourceUsageThread::platformSaveStateBeforeStarting):
        For OS(DARWIN) ports, when starting to observe resource usage,
        we grab the mach_port_t of SamplingProfiler on the main thread
        in a thread safe way. For our purposes (Web Inspector timelines),
        this will be good enough to identify the SamplingProfiler thread
        during timeline recording. The SamplingProfiler thread won't change
        during a timeline recording and recording start/stops will never
        miss the SamplingProfiler changing.

        (WebCore::filterThreads):
        (WebCore::threadSendRights):
        (WebCore::threadSendRightsExcludingDebuggerThreads):
        (WebCore::cpuUsage):
        (WebCore::ResourceUsageThread::platformCollectCPUData):
        Calculate CPU usage twice, the second time excluding some threads.

        * page/linux/ResourceUsageThreadLinux.cpp:
        (WebCore::ResourceUsageThread::platformSaveStateBeforeStarting):
        (WebCore::ResourceUsageThread::platformCollectCPUData):
        Stubs for linux ports.

2019-01-25  Zalan Bujtas  <zalan@apple.com>

        Remove FrameView::m_significantRenderedTextMilestonePending
        https://bugs.webkit.org/show_bug.cgi?id=193842

        Reviewed by Wenson Hsieh.

        Currently we keep processing the incoming text content until after the "SignificantRenderedTextMilestone" has been reached.
        We can actually stop doing it right when the text content is above the threshold (regardless of whether all the conditions are met for the milestone).
        This patch also ensures that we don't update Document::m_mainArticleElement once the threshold is reached.

        * page/FrameView.cpp:
        (WebCore::FrameView::resetLayoutMilestones):
        (WebCore::FrameView::incrementVisuallyNonEmptyCharacterCount):
        (WebCore::FrameView::hasReachedSignificantRenderedTextThreashold):
        (WebCore::FrameView::qualifiesAsSignificantRenderedText const):
        (WebCore::FrameView::fireLayoutRelatedMilestonesIfNeeded):
        (WebCore::FrameView::updateSignificantRenderedTextMilestoneIfNeeded): Deleted.
        * page/FrameView.h:

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update Xcode projects with "Apply Configuration to XCFileLists" build target
        https://bugs.webkit.org/show_bug.cgi?id=193781
        <rdar://problem/47201153>

        Reviewed by Alex Christensen.

        Part of generating the .xcfilelists used as part of adopting XCBuild
        includes running `make DerivedSources.make` from a standalone script.
        It’s important for this invocation to have the same environment as
        when the actual build invokes `make DerivedSources.make`. If the
        environments are different, then the two invocations will provide
        different results. In order to get the same environment in the
        standalone script, have the script launch xcodebuild targeting the
        "Apply Configuration to XCFileLists" build target, which will then
        re-invoke our standalone script. The script is now running again, this
        time in an environment with all workspace, project, target, xcconfig
        and other environment variables established.

        The "Apply Configuration to XCFileLists" build target accomplishes
        this task via a small embedded shell script that consists only of:

            eval "${WK_SUBLAUNCH_SCRIPT_PARAMETERS[@]}"

        The process that invokes "Apply Configuration to XCFileLists" first
        sets WK_SUBLAUNCH_SCRIPT_PARAMETERS to an array of commands to be
        evaluated and exports it into the shell environment. When xcodebuild
        is invoked, it inherits the value of this variable and can `eval` the
        contents of that variable. Our external standalone script can then set
        WK_SUBLAUNCH_SCRIPT_PARAMETERS to the path to itself, along with a set
        of command-line parameters needed to restart itself in the appropriate
        state.

        No new tests since there should be no observable behavior difference.

        * WebCore.xcodeproj/project.pbxproj:

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update WebKitAdditions.xcconfig with correct order of variable definitions
        https://bugs.webkit.org/show_bug.cgi?id=193793
        <rdar://problem/47532439>

        Reviewed by Alex Christensen.

        XCBuild changes the way xcconfig variables are evaluated. In short,
        all config file assignments are now considered in part of the
        evaluation. When using the new build system and an .xcconfig file
        contains multiple assignments of the same build setting:

        - Later assignments using $(inherited) will inherit from earlier
          assignments in the xcconfig file.
        - Later assignments not using $(inherited) will take precedence over
          earlier assignments. An assignment to a more general setting will
          mask an earlier assignment to a less general setting. For example,
          an assignment without a condition ('FOO = bar') will completely mask
          an earlier assignment with a condition ('FOO[sdk=macos*] = quux').

        This affects some of our .xcconfig files, in that sometimes platform-
        or sdk-specific definitions appear before the general definitions.
        Under the new evaluations rules, the general definitions alway take
        effect because they always overwrite the more-specific definitions. The
        solution is to swap the order, so that the general definitions are
        established first, and then conditionally overwritten by the
        more-specific definitions.

        No new tests since there should be no observable behavior difference.

        * Configurations/Base.xcconfig:
        * Configurations/Version.xcconfig:

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update existing .xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=193791
        <rdar://problem/47201706>

        Reviewed by Alex Christensen.

        Many .xcfilelist files were added in r238824 in order to support
        XCBuild. Update these with recent changes to the set of build files
        and with the current generate-xcfilelist script.

        No new tests since there should be no observable behavior difference.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * UnifiedSources-input.xcfilelist:
        * UnifiedSources-output.xcfilelist:

2019-01-25  Brent Fulgham  <bfulgham@apple.com>

        Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess.
        https://bugs.webkit.org/show_bug.cgi?id=193297
        <rdar://problem/47158841>

        Reviewed by Alex Christensen.

        Trigger logging to the UIProcess when the ResourceLoadObserver is used in the NetworkProcess.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect): Notify NetworkProcess a connection was made to a resource.
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::setLogWebSocketLoadingNotificationCallback): Added.
        (WebCore::ResourceLoadObserver::setLogSubresourceLoadingNotificationCallback): Added.
        (WebCore::ResourceLoadObserver::setLogSubresourceRedirectNotificationCallback): Added.
        (WebCore::ResourceLoadObserver::logSubresourceLoading): Notify NetworkProcess of the load.
        (WebCore::ResourceLoadObserver::logWebSocketLoading): Ditto.
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution): Ditto.

2019-01-25  Zalan Bujtas  <zalan@apple.com>

        Remove FrameView::m_firstVisuallyNonEmptyLayoutCallbackPending
        https://bugs.webkit.org/show_bug.cgi?id=193835

        Reviewed by Simon Fraser.

        Currently updateIsVisuallyNonEmpty() is called from fireLayoutRelatedMilestonesIfNeeded() and from the incrementVisually*() functions.
        By calling it from incrementVisually*() and setting the m_isVisuallyNonEmpty flag to true early does not have any impact on when the milestone is fired.
        The milestone firing, as part of the post-layout tasks is triggered by a subsequent layout.
        However having multiple callers of updateIsVisuallyNonEmpty() requires an extra boolen (m_firstVisuallyNonEmptyLayoutCallbackPending) to maintain.
        Also calling updateIsVisuallyNonEmpty() repeatedly could be costly (with the current threshold of 200 characters, I don't think it is though).

        This patch removes m_firstVisuallyNonEmptyLayoutCallbackPending and moves the logic from updateIsVisuallyNonEmpty() to fireLayoutRelatedMilestonesIfNeeded().

        * page/FrameView.cpp:
        (WebCore::FrameView::resetLayoutMilestones):
        (WebCore::FrameView::loadProgressingStatusChanged):
        (WebCore::FrameView::incrementVisuallyNonEmptyCharacterCount):
        (WebCore::FrameView::fireLayoutRelatedMilestonesIfNeeded):
        (WebCore::FrameView::updateIsVisuallyNonEmpty): Deleted.
        * page/FrameView.h:
        (WebCore::FrameView::incrementVisuallyNonEmptyPixelCount):

2019-01-25  David Kilzer  <ddkilzer@apple.com>

        Move soft-linking of Lookup.framework out of LookupSPI.h
        <https://webkit.org/b/193815>

        Reviewed by Tim Horton.

        * editing/cocoa/DictionaryLookup.mm:
        - Remove unused header.

        * editing/mac/DictionaryLookupLegacy.mm:
        (WebCore::tokenRange):
        (WebCore::showPopupOrCreateAnimationController):
        (WebCore::DictionaryLookup::hidePopup):
        - Move soft-linking to LookupSoftLink.{h,mm}.

        * platform/ios/ValidationBubbleIOS.mm:
        (WebCore::ValidationBubble::show):
        - Update for changes to UIKitSoftLink.{h,mm} now that
          UIAccessibilityAnnouncementNotification is using
          SOFT_LINK_CONSTANT*().

2019-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Rename some WebKit-internal functions and variables that reference "data interaction"
        https://bugs.webkit.org/show_bug.cgi?id=193829

        Reviewed by Tim Horton.

        No change in behavior.

        * page/EventHandler.h:
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::tryToBeginDragAtPoint):
        (WebCore::EventHandler::tryToBeginDataInteractionAtPoint): Deleted.
        * platform/ios/WebItemProviderPasteboard.mm:
        (linkTemporaryItemProviderFilesToDropStagingDirectory):

2019-01-25  Jon Davis  <jond@apple.com>

        Updated feature status for several features 
        https://bugs.webkit.org/show_bug.cgi?id=193794

        Reviewed by Joseph Pecoraro.
        
        Updated feature status for the following: CSS Font Display,
        CSS Text Decoration Level 4, SVG in OpenType Fonts, Web SQL,
        File and Directory Entries API, MediaStream Recording API,
        Readable Streams, Subresource Integrity, Visual Viewport API,
        and Web Audio.

        * features.json:

2019-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Need a way for JavaScript (or bundle) code to participate in undo
        https://bugs.webkit.org/show_bug.cgi?id=190009
        <rdar://problem/44807048>

        Reviewed by Ryosuke Niwa.

        Finish hooking up `UndoManager::addItems()` to CustomUndoStep.

        Tests: editing/undo-manager/undo-manager-add-item-exceptions.html
               editing/undo-manager/undo-manager-add-item.html
               editing/undo-manager/undo-manager-delete-stale-undo-items.html
               editing/undo-manager/undo-manager-item-labels.html
               editing/undo-manager/undo-manager-undo-redo-after-garbage-collection.html

        * editing/CompositeEditCommand.h:
        * editing/CustomUndoStep.cpp:
        (WebCore::CustomUndoStep::didRemoveFromUndoManager):

        Add a method to invalidate CustomUndoStep. This clears out the pointer to the undo item, and also invalidates
        the UndoItem, removing it from its UndoManager.

        * editing/CustomUndoStep.h:
        * editing/Editor.cpp:
        (WebCore::Editor::registerCustomUndoStep):

        Add a helper method to register a CustomUndoStep as a platform undoable step.

        * editing/Editor.h:
        * editing/UndoStep.h:
        * page/UndoItem.h:
        (WebCore::UndoItem::undoManager const):
        * page/UndoManager.cpp:
        (WebCore::UndoManager::addItem):

        Create a CustomUndoStep with the given UndoItem, and register it with the platform undo manager.

        * page/UndoManager.h:
        * page/UndoManager.idl:

        Mark addItem() as capable of throwing exceptions.

2019-01-25  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Add "clear" to static position computation.
        https://bugs.webkit.org/show_bug.cgi?id=193824

        Reviewed by Antti Koivisto.

        When clear property is set and floats are present, we have to estimate and set the box's vertical position during
        static positioning to be able to properly layout its subtree.

        <div style="float: left; width: 100px; height: 100px;"></div>
        <div style="clear: left;">
          <div style="float: left; width: 100px; height: 100px;"></div>
        </div>

        In the above example since the second float's parent clears the first float, the second float is positioned below
        the first float. If we didn't push down (clear) the box, the float child would get placed next to the first float.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::BlockFormattingContext::computeStaticPosition const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPosition const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPositionForFloatClear const):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        (WebCore::Layout::BlockFormattingContext::verticalPositionWithMargin const):
        (WebCore::Layout::BlockFormattingContext::computeVerticalPositionForFloatClear const): Deleted.
        (WebCore::Layout::BlockFormattingContext::adjustedVerticalPositionAfterMarginCollapsing const): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::estimatedMarginBefore):
        * layout/displaytree/DisplayBox.h:

2019-01-25  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Move positive/negative margin value updating to a dedicated function
        https://bugs.webkit.org/show_bug.cgi?id=193812

        Reviewed by Antti Koivisto.

        Move update logic to BlockFormattingContext::MarginCollapse::updatePositiveNegativeMarginValues().

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::updatePositiveNegativeMarginValues):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedVerticalValues):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

2019-01-25  Antoine Quint  <graouts@apple.com>

        Use ENABLE_POINTER_EVENTS for the touch-action property
        https://bugs.webkit.org/show_bug.cgi?id=193819

        Reviewed by Antti Koivisto.

        Since we've added an ENABLE_POINTER_EVENTS we should be using it for anything related to the implementation of the
        Pointer Events specification of which the touch-action property is a part.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSPrimitiveValueMappings.h:
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/StyleBuilderConverter.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        * dom/Element.cpp:
        (WebCore::Element::allowsDoubleTapGesture const):
        * platform/TouchAction.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h:

2019-01-24  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Refactor MarginCollapse::updateCollapsedMarginAfter
        https://bugs.webkit.org/show_bug.cgi?id=193807

        Reviewed by Simon Fraser.

        Rename updateCollapsedMarginAfter to updateMarginAfterForPreviousSibling and make the margin updating logic more explicit.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::updateMarginAfterForPreviousSibling):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::updateCollapsedMarginAfter): Deleted.

2019-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CPU Usage Timeline
        https://bugs.webkit.org/show_bug.cgi?id=193730
        <rdar://problem/46797201>

        Reviewed by Devin Rousso.

        Test: inspector/cpu-profiler/tracking.html

        * Sources.txt:
        * UnifiedSources-input.xcfilelist:
        * WebCore.xcodeproj/project.pbxproj:
        New files.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::createLazyAgents):
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::reset):
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::inspectorCPUProfilerAgent const):
        (WebCore::InstrumentingAgents::setInspectorCPUProfilerAgent):
        Create and track the CPUProfilerAgent.

        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::toggleInstruments):
        (WebCore::InspectorTimelineAgent::toggleCPUInstrument):
        Handle backend auto-start of the CPU instrument / timeline.

        * inspector/agents/InspectorCPUProfilerAgent.h:
        * inspector/agents/InspectorCPUProfilerAgent.cpp: Added.
        (WebCore::InspectorCPUProfilerAgent::InspectorCPUProfilerAgent):
        (WebCore::InspectorCPUProfilerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCPUProfilerAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorCPUProfilerAgent::startTracking):
        (WebCore::InspectorCPUProfilerAgent::stopTracking):
        (WebCore::InspectorCPUProfilerAgent::collectSample):
        CPUProfilerAgent uses the ResourceUsageThread to get CPU data.

        * inspector/agents/InspectorTimelineAgent.h:
        * inspector/agents/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::startTracking):
        (WebCore::InspectorMemoryAgent::collectSample):
        Update the MemoryAgent to collect only Memory data and use a more accurate sample timestamp.

        * page/ResourceUsageData.h:
        * page/ResourceUsageThread.cpp:
        (WebCore::ResourceUsageThread::addObserver):
        (WebCore::ResourceUsageThread::removeObserver):
        (WebCore::ResourceUsageThread::notifyObservers):
        (WebCore::ResourceUsageThread::recomputeCollectionMode):
        (WebCore::ResourceUsageThread::threadBody):
        * page/ResourceUsageThread.h:
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::ResourceUsageOverlay::platformInitialize):
        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::ResourceUsageThread::platformCollectCPUData):
        (WebCore::ResourceUsageThread::platformCollectMemoryData):
        (WebCore::ResourceUsageThread::platformThreadBody): Deleted.
        * page/linux/ResourceUsageOverlayLinux.cpp:
        (WebCore::ResourceUsageOverlay::platformInitialize):
        * page/linux/ResourceUsageThreadLinux.cpp:
        (WebCore::ResourceUsageThread::platformCollectCPUData):
        (WebCore::ResourceUsageThread::platformCollectMemoryData):
        (WebCore::ResourceUsageThread::platformThreadBody):
        Give each observer their own collection mode. The ResourceUsageThread
        will then collect data that is the union of all of the active observers.
        This allows collecting CPU and Memory data separately, reducing the cost
        of each when gathered individually.

2019-01-24  Charles Vazac  <cvazac@akamai.com>

        Implement PerformanceObserver.supportedEntryTypes
        https://bugs.webkit.org/show_bug.cgi?id=193428

        PerformanceObserver.supportedEntryTypes should return an array of
        entryTypes that can be observed per specification
        https://w3c.github.io/performance-timeline/#supportedentrytypes-attribute

        Reviewed by Joseph Pecoraro.

        This is covered by web-platform-tests
        LayoutTests/imported/w3c/web-platform-tests/resource-timing/supported_resource_type.*.html.

        * page/PerformanceObserver.cpp:
        (WebCore::PerformanceObserver::supportedEntryTypes):
        * page/PerformanceObserver.h:
        * page/PerformanceObserver.idl:

2019-01-24  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r240446.

        Casued 5 API failures

        Reverted changeset:

        "Activate the WebResourceLoadStatisticsStore in the
        NetworkProcess and deactivate it in the UIProcess."
        https://bugs.webkit.org/show_bug.cgi?id=193297
        https://trac.webkit.org/changeset/240446

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

        [iOS] Unable to make a selection in jsfiddle.net using arrow keys when requesting desktop site
        https://bugs.webkit.org/show_bug.cgi?id=193758
        <rdar://problem/43614978>

        Reviewed by Tim Horton.

        CodeMirror's script adds a repeating timer that periodically normalizes the logical selection in the editor
        (this is distinct from the actual DOM selection, which is inside a hidden textarea element). This script defines
        a helper method to select all the text inside of a text form control, called `selectInput`, which normally
        invokes `node.select()`. However, in the case of iOS, the script works around broken `select()` behavior by
        setting `selectionStart` and `selectionEnd` to encompass all the content in the form control. When requesting
        the desktop version of the site, CodeMirror no longer attempts to apply its iOS workaround.

        This iOS-specific behavior was introduced to fix <rdar://problem/4901923>. However, the original bug no longer
        reproduces even without this quirk. To fix CodeMirror, we make two adjustments:

        1.  Roll out this ancient demo hack, in favor of standardized behavior.
        2.  Note that `select()` is also used when focusing an input. However, when focusing an input element on iOS, we
            want to match the platform (i.e. UITextField behavior) and move focus to the end of the text field. To
            achieve this, we introduce a new helper on HTMLInputElement that is called when setting the default
            selection of a text input after focus; on iOS, this helper method moves the selection to the end of the
            input, but everywhere else, it selects all the text in the input element.

        This causes 6 existing layout tests to begin passing on iOS.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateFocusAppearance):
        (WebCore::HTMLInputElement::setDefaultSelectionAfterFocus):
        * html/HTMLInputElement.h:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::select):

2019-01-24  Jer Noble  <jer.noble@apple.com>

        Fix leak of AVSampleBufferRenderSynchronizer boundaryObserver object.
        https://bugs.webkit.org/show_bug.cgi?id=193778

        Reviewed by Jon Lee.

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

2019-01-24  Zalan Bujtas  <zalan@apple.com>

        DidFirstVisuallyNonEmptyLayout milestone should always fire at some point.
        https://bugs.webkit.org/show_bug.cgi?id=193741
        <rdar://problem/47135030>

        Reviewed by Antti Koivisto and Simon Fraser.

        fireLayoutRelatedMilestonesIfNeeded() is part of the post-layout tasks. In certain cases when
            1. the received data is not "contentful" yet
            2. and we are expecting some more (loading is not complete yet)
            3. but no layout is initiated anymore
        nothing triggers the milestone firing.

        This patch ensures that we fire the DidFirstVisuallyNonEmptyLayout when the frame load is complete unless we already did.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::loadProgressingStatusChanged):

2019-01-24  Brent Fulgham  <bfulgham@apple.com>

        Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess.
        https://bugs.webkit.org/show_bug.cgi?id=193297
        <rdar://problem/47158841>

        Reviewed by Alex Christensen.

        Trigger logging to the UIProcess when the ResourceLoadObserver is used in the NetworkProcess.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect): Notify NetworkProcess a connection was made to a resource.
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::setLogWebSocketLoadingNotificationCallback): Added.
        (WebCore::ResourceLoadObserver::setLogSubresourceLoadingNotificationCallback): Added.
        (WebCore::ResourceLoadObserver::setLogSubresourceRedirectNotificationCallback): Added.
        (WebCore::ResourceLoadObserver::logSubresourceLoading): Notify NetworkProcess of the load.
        (WebCore::ResourceLoadObserver::logWebSocketLoading): Ditto.
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution): Ditto.

2019-01-24  John Wilander  <wilander@apple.com>

        Add Ad Click Attribution as an internal/experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=193685
        <rdar://problem/47450399>

        Reviewed by Brent Fulgham.

        Test: http/tests/adClickAttribution/anchor-tag-attributes-reflect.html

        * html/HTMLAnchorElement.h:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAttributeNames.in:
            Addeed two new experimental attributes:
            - adcampaignid: Ad campaign ID.
            - addestination: Ad link destination site.
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::adClickAttributionEnabled const):
        (WebCore::RuntimeEnabledFeatures::setAdClickAttributionEnabled):
        * page/Settings.yaml:

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

        Use MonotonicTime in WorkerRunLoop
        https://bugs.webkit.org/show_bug.cgi?id=193417

        Reviewed by Saam Barati.

        Condition is based on MonotonicTime so MessageQueue should also be based on MonotonicTime.
        Ditto for WorkerRunLoop.
        No easy way to test the change which should not be easily observable.

        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::runInMode):

2019-01-24  Ross Kirsling  <ross.kirsling@sony.com>

        Move FileSystem to WTF
        https://bugs.webkit.org/show_bug.cgi?id=193602

        Reviewed by Yusuke Suzuki.

        * Modules/encryptedmedia/CDM.cpp:
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.cpp:
        * Modules/entriesapi/DOMFileSystem.cpp:
        * Modules/entriesapi/FileSystemEntry.cpp:
        * Modules/indexeddb/IDBDatabaseIdentifier.cpp:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        * Modules/indexeddb/server/SQLiteIDBTransaction.cpp:
        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        * Modules/webdatabase/DatabaseTracker.cpp:
        * Modules/webdatabase/OriginLock.cpp:
        * Modules/webdatabase/OriginLock.h:
        * Modules/webdatabase/cocoa/DatabaseManagerCocoa.mm:
        * PlatformMac.cmake:
        * PlatformPlayStation.cmake:
        * PlatformWin.cmake:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/GCController.cpp:
        * dom/DataTransferItem.cpp:
        * editing/cocoa/WebContentReaderCocoa.mm:
        * fileapi/File.cpp:
        * fileapi/FileCocoa.mm:
        * html/FileInputType.cpp:
        * html/FileListCreator.cpp:
        * loader/appcache/ApplicationCacheHost.cpp:
        * loader/appcache/ApplicationCacheStorage.cpp:
        * page/Page.cpp:
        * page/SecurityOrigin.cpp:
        * page/SecurityOriginData.cpp:
        * platform/FileHandle.h:
        * platform/FileStream.cpp:
        * platform/FileStream.h:
        * platform/SharedBuffer.h:
        * platform/SourcesGLib.txt:
        * platform/cocoa/FileMonitorCocoa.mm:
        * platform/glib/FileMonitorGLib.cpp:
        * platform/glib/SharedBufferGlib.cpp:
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/ios/QuickLook.mm:
        * platform/ios/WebItemProviderPasteboard.mm:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        * platform/network/BlobDataFileReference.cpp:
        * platform/network/BlobRegistryImpl.cpp:
        * platform/network/BlobResourceHandle.cpp:
        * platform/network/FormData.cpp:
        * platform/network/cf/FormDataStreamCFNet.cpp:
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        * platform/network/curl/CookieJarDB.cpp:
        * platform/network/curl/CurlCacheEntry.h:
        * platform/network/curl/CurlCacheManager.cpp:
        * platform/network/curl/CurlFormDataStream.h:
        * platform/network/curl/CurlRequest.h:
        * platform/network/curl/NetworkStorageSessionCurl.cpp:
        * platform/network/curl/ResourceHandleCurl.cpp:
        * platform/network/mac/BlobDataFileReferenceMac.mm:
        * platform/network/soup/ResourceHandleSoup.cpp:
        * platform/network/soup/SoupNetworkSession.cpp:
        * platform/posix/SharedBufferPOSIX.cpp:
        * platform/sql/SQLiteFileSystem.cpp:
        * platform/text/hyphen/HyphenationLibHyphen.cpp:
        * platform/win/SearchPopupMenuDB.cpp:
        * rendering/RenderTheme.cpp:
        * rendering/RenderThemeGtk.cpp:
        * rendering/RenderThemeWin.cpp:
        * workers/service/server/RegistrationDatabase.cpp:

2019-01-24  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] MarginCollapse::collapsedVerticalValues should not return computed non-collapsed values.
        https://bugs.webkit.org/show_bug.cgi?id=193768

        Reviewed by Antti Koivisto.

        When it comes to the actual used values it does not really matter, only from correctness point of view.
        (This patch also moves some checks to their correct place.)

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithPreviousSiblingMarginAfter):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithFirstInFlowChildMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithLastInFlowChildMarginAfter):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeMarginAfter):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedVerticalValues):

2019-01-23  Simon Fraser  <simon.fraser@apple.com>

        Add "frame hosting" nodes to the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=193753

        Reviewed by Antti Koivisto.

        When the scrolling tree crosses frame boundaries, mutations in the parent frame currently
        require the iframe's scrolling node to get reparented in a new ancestor, which requires
        a layer tree walk of the parent frame. This is error-prone, and not very future-proof.

        Fix this by introducing "frame hosting" scrolling tree nodes. These are mostly inert
        nodes that are owned by the RenderIFrame's layer backing in the parent frame, and exist
        to provide a consistent parent node for the subframe's scrolling node.

        This patch adds the node types, but does not instantiate them yet.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::operator<<):
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingStateFrameHostingNode.cpp: Added.
        (WebCore::ScrollingStateFrameHostingNode::create):
        (WebCore::ScrollingStateFrameHostingNode::ScrollingStateFrameHostingNode):
        (WebCore::ScrollingStateFrameHostingNode::clone):
        (WebCore::ScrollingStateFrameHostingNode::dumpProperties const):
        * page/scrolling/ScrollingStateFrameHostingNode.h: Added.
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::isFrameHostingNode const):
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::createNode):
        * page/scrolling/ScrollingTreeFrameHostingNode.cpp: Added.
        (WebCore::ScrollingTreeFrameHostingNode::create):
        (WebCore::ScrollingTreeFrameHostingNode::ScrollingTreeFrameHostingNode):
        (WebCore::ScrollingTreeFrameHostingNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameHostingNode::updateLayersAfterAncestorChange):
        (WebCore::ScrollingTreeFrameHostingNode::dumpProperties const):
        * page/scrolling/ScrollingTreeFrameHostingNode.h: Added.
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::isFrameHostingNode const):
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::createScrollingTreeNode):
        * page/scrolling/mac/ScrollingTreeMac.cpp:
        (ScrollingTreeMac::createScrollingTreeNode):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::~RenderLayerBacking):
        (WebCore::RenderLayerBacking::detachFromScrollingCoordinator):
        (WebCore::operator<<):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::scrollCoordinationRoleForNodeType):
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayerWithRole):
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayer):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):
        * rendering/RenderLayerCompositor.h:

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

        [iOS] Enable media element volume on iPad
        https://bugs.webkit.org/show_bug.cgi?id=193745
        <rdar://problem/47452297>

        Reviewed by Jer Noble.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setVolume):
        (WebCore::HTMLMediaElement::mediaPlayerVolumeChanged):
        (WebCore::HTMLMediaElement::updateVolume):

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVolume):

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

        [GTK][WPE] Support JPEG 2000 images
        https://bugs.webkit.org/show_bug.cgi?id=186272

        Reviewed by Žan Doberšek.

        Add JPEG2000ImageDecoder to support JPEG2000 images using OpenJPEG. For now only SRGB and SYCC color spaces are
        supported.

        * platform/ImageDecoders.cmake:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::supportedImageMIMETypes):
        * platform/image-decoders/ScalableImageDecoder.cpp:
        (WebCore::ScalableImageDecoder::create):
        * platform/image-decoders/jpeg2000/JPEG2000ImageDecoder.cpp: Added.
        (WebCore::syccToRGB):
        (WebCore::sycc444ToRGB):
        (WebCore::sycc422ToRGB):
        (WebCore::sycc420ToRGB):
        (WebCore::JPEG2000ImageDecoder::JPEG2000ImageDecoder):
        (WebCore::JPEG2000ImageDecoder::frameBufferAtIndex):
        (WebCore::JPEG2000ImageDecoder::decode):
        * platform/image-decoders/jpeg2000/JPEG2000ImageDecoder.h: Added.

2019-01-23  Simon Fraser  <simon.fraser@apple.com>

        Change some RenderLayerCompositor functions to use references
        https://bugs.webkit.org/show_bug.cgi?id=193760

        Reviewed by Zalan Bujtas.

        RenderWidget* -> RenderWidget&

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterWidgetResize):
        (WebCore::RenderLayerBacking::updateConfiguration):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBackingAndHierarchy):
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::frameContentsCompositor):
        (WebCore::RenderLayerCompositor::parentFrameContentLayers):
        * rendering/RenderLayerCompositor.h:

2019-01-23  Benjamin Poulain  <benjamin@webkit.org>

        <rdar://problem/27686430> Revert workaround AVPlayer.setMuted bug on macOS
        https://bugs.webkit.org/show_bug.cgi?id=193742

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        The original bug was fixed, see radar: rdar://problem/27686430

2019-01-23  Sihui Liu  <sihui_liu@apple.com>

        Clean up IndexedDB files between tests
        https://bugs.webkit.org/show_bug.cgi?id=192796
        <rdar://problem/46824999>

        Reviewed by Geoffrey Garen.

        We should clean up the IndexedDB files between tests to make sure each IDB test is independent of others.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::didDeleteBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::transactionCompleted):

2019-01-23  Oriol Brufau  <obrufau@igalia.com>

        Add CSS Logical spec to features.json
        https://bugs.webkit.org/show_bug.cgi?id=193717

        Reviewed by Manuel Rego Casasnovas.

        * features.json:

2019-01-22  Conrad Shultz  <conrad_shultz@apple.com>

        Clean up USE(WEB_THREAD)
        https://bugs.webkit.org/show_bug.cgi?id=193698

        Rubber-stamped by Tim Horton.

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::userCaptionPreferencesChangedNotificationCallback):
        * platform/cf/MainThreadSharedTimerCF.cpp:
        (WebCore::applicationDidBecomeActive):
        * platform/cocoa/ContentFilterUnblockHandlerCocoa.mm:
        (WebCore::dispatchToMainThread):
        * platform/graphics/cocoa/TextTrackRepresentationCocoa.mm:
        (-[WebCoreTextTrackRepresentationCocoaHelper observeValueForKeyPath:ofObject:change:context:]):
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::layoutTiles):
        (WebCore::LegacyTileCache::setTilingMode):
        * platform/ios/WebCoreMotionManager.mm:
        (-[WebCoreMotionManager sendAccelerometerData:]):
        (-[WebCoreMotionManager sendMotionData:withHeading:]):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::requestUpdateInlineRect):
        (VideoFullscreenControllerContext::requestVideoContentLayer):
        (VideoFullscreenControllerContext::returnVideoContentLayer):
        (VideoFullscreenControllerContext::didSetupFullscreen):
        (VideoFullscreenControllerContext::willExitFullscreen):
        (VideoFullscreenControllerContext::didExitFullscreen):
        (VideoFullscreenControllerContext::didCleanupFullscreen):
        (VideoFullscreenControllerContext::fullscreenMayReturnToInline):
        (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::selectAudioMediaOption):
        (VideoFullscreenControllerContext::selectLegibleMediaOption):
        (VideoFullscreenControllerContext::duration const):
        (VideoFullscreenControllerContext::currentTime const):
        (VideoFullscreenControllerContext::bufferedTime const):
        (VideoFullscreenControllerContext::isPlaying const):
        (VideoFullscreenControllerContext::playbackRate const):
        (VideoFullscreenControllerContext::seekableRanges const):
        (VideoFullscreenControllerContext::seekableTimeRangesLastModifiedTime const):
        (VideoFullscreenControllerContext::liveUpdateInterval const):
        (VideoFullscreenControllerContext::canPlayFastReverse const):
        (VideoFullscreenControllerContext::audioMediaSelectionOptions const):
        (VideoFullscreenControllerContext::audioMediaSelectedIndex const):
        (VideoFullscreenControllerContext::legibleMediaSelectionOptions const):
        (VideoFullscreenControllerContext::legibleMediaSelectedIndex const):
        (VideoFullscreenControllerContext::externalPlaybackEnabled const):
        (VideoFullscreenControllerContext::externalPlaybackTargetType const):
        (VideoFullscreenControllerContext::externalPlaybackLocalizedDeviceName const):
        (VideoFullscreenControllerContext::wirelessVideoPlaybackDisabled const):
        (VideoFullscreenControllerContext::setUpFullscreen):
        (VideoFullscreenControllerContext::exitFullscreen):
        (VideoFullscreenControllerContext::requestHideAndExitFullscreen):
        (-[WebVideoFullscreenController enterFullscreen:mode:]):
        (-[WebVideoFullscreenController exitFullscreen]):
        (-[WebVideoFullscreenController requestHideAndExitFullscreen]):
        * platform/ios/wak/WAKWindow.mm:
        (-[WAKWindow setVisible:]):
        (-[WAKWindow setScreenScale:]):
        (-[WAKWindow sendEvent:]):
        (-[WAKWindow sendMouseMoveEvent:contentChange:]):
        * platform/network/ios/NetworkStateNotifierIOS.mm:
        (WebCore::NetworkStateNotifier::startObserving):
        * rendering/RenderThemeIOS.mm:
        (WebCore::contentSizeCategoryDidChange):

2019-01-23  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r240292): Attempt to fix WinCairo build

        * platform/network/curl/CurlResourceHandleDelegate.cpp:
        (WebCore::handleCookieHeaders): Remove argument to
        NetworkingContext::storageSession().

2019-01-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce UndoStep::label() and adopt it in WebKitLegacy and WebKit
        https://bugs.webkit.org/show_bug.cgi?id=193706
        <rdar://problem/44807048>

        Reviewed by Ryosuke Niwa.

        Refactors some existing logic when registering undoable actions, such that we propagate the undoable action's
        label string instead of the EditAction to the client layer. This will help make handling of CustomUndoStep's
        undo/redo label simpler, as the client layer won't need to worry about managing an EditAction and undo/redo
        label simultaneously. There should be no change in behavior.

        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::label const):
        * editing/CompositeEditCommand.h:
        * editing/CustomUndoStep.cpp:
        (WebCore::CustomUndoStep::label const):
        * editing/CustomUndoStep.h:
        * editing/EditAction.cpp:
        (WebCore::undoRedoLabel):
        (WebCore::nameForUndoRedo): Deleted.
        * editing/EditAction.h:

        Rename nameForUndoRedo to undoRedoLabel, and remove the WEBCORE_EXPORT since it's no longer needed in WebKit or
        WebKitLegacy.

        * editing/UndoStep.h:

        Add UndoStep::label(). While EditCommandComposition implements this by mapping its EditAction to a
        localized string, CustomUndoStep implements this by returning the undoable action label provided by script.

2019-01-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] Clean up NetworkStorageSession
        https://bugs.webkit.org/show_bug.cgi?id=193707

        Reviewed by Carlos Garcia Campos.

        A NetworkStorageSession now always has a SoupNetworkSession, so we can remove a lot of
        complexity that is no longer needed. getOrCreateSoupNetworkSession can go away because we
        know the session has always already been created. The soupNetworkSession getter can now
        return a reference rather than a pointer, because it will never be NULL except after it has
        been cleared with clearSoupNetworkSession (renamed), and that should only happen immediately
        before process termination after nothing else is using it. Cookie jar syncing can also go
        away; the NetworkStorageSession can now rely on the SoupNetworkSession to exist and just
        use its cookie jar.

        * platform/network/NetworkStorageSession.h:
        (WebCore::NetworkStorageSession::soupNetworkSession const): Deleted.
        * platform/network/soup/DNSResolveQueueSoup.cpp:
        (WebCore::DNSResolveQueueSoup::updateIsUsingProxy):
        (WebCore::DNSResolveQueueSoup::platformResolve):
        (WebCore::DNSResolveQueueSoup::resolve):
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::NetworkStorageSession):
        (WebCore::NetworkStorageSession::~NetworkStorageSession):
        (WebCore::NetworkStorageSession::soupNetworkSession const):
        (WebCore::NetworkStorageSession::clearSoupNetworkSession):
        (WebCore::NetworkStorageSession::cookieStorage const):
        (WebCore::NetworkStorageSession::setCookieStorage):
        (WebCore::NetworkStorageSession::getOrCreateSoupNetworkSession const): Deleted.
        (WebCore::NetworkStorageSession::clearSoupNetworkSessionAndCookieStorage): Deleted.
        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        (WebCore::SocketStreamHandleImpl::create):

2019-01-23  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] computeStaticPosition should include estimated computation as well.
        https://bugs.webkit.org/show_bug.cgi?id=193719

        Reviewed by Antti Koivisto.

        Consolidate all static position (non-estimated, estimated) computation in BlockFormattingContext::computeStaticPosition.
        It requires to compute width/horizontal margin first, since vertical top estimation needs valid horizontal widths (margin-top: 5% is computed using
        the containing block's width).
        This is also in preparation for moving 'clear' positioning to computeStaticPosition.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::BlockFormattingContext::computeStaticPosition const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPosition const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPositionForAncestors const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPositionForFormattingRoot const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPositionForFloatClear const):
        (WebCore::Layout::BlockFormattingContext::computeVerticalPositionForFloatClear const):
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        (WebCore::Layout::BlockFormattingContext::adjustedVerticalPositionAfterMarginCollapsing const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginBefore const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginBeforeForAncestors const): Deleted.
        (WebCore::Layout::BlockFormattingContext::precomputeVerticalPositionForFormattingRootIfNeeded const): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithFirstInFlowChildMarginBefore):

2019-01-22  Simon Fraser  <simon.fraser@apple.com>

        Compositing updates need to reparent scrolling tree nodes with a changed ancestor
        https://bugs.webkit.org/show_bug.cgi?id=193699

        Reviewed by Frédéric Wang.

        Now that compositing updates are incremental and may not do a full layer walk,
        we need to ensure that when a scrolling tree node is removed, we traverse to all
        descendant layers whose scrolling tree nodes refer to the removed node as their parent.

        To achieve this, add a RenderLayer dirty bit for "NeedsScrollingTreeUpdate" which
        ensures that the updateBackingAndHierarchy part of the compositing update traverses
        layers with the bit set.

        Adjust the compositing logging to make the legend easier to read.

        Tests: scrollingcoordinator/reparent-across-compositing-layers.html
               scrollingcoordinator/reparent-with-layer-removal.html

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::childrenOfNode const):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::childrenOfNode const):
        * rendering/RenderLayer.cpp:
        (WebCore::outputPaintOrderTreeLegend):
        (WebCore::outputPaintOrderTreeRecursive):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBackingAndHierarchy):
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayer):

2019-01-23  Oriol Brufau  <obrufau@igalia.com>

        [css-logical] Implement flow-relative inset properties
        https://bugs.webkit.org/show_bug.cgi?id=189441

        Reviewed by Dean Jackson.

        Implement 'inset', 'inset-block', 'inset-block-start', 'inset-block-end',
        'inset-inline', 'inset-inline-start' and 'inset-inline-end' CSS properties
        behind the CSSLogicalEnabled runtime flag.

        Tests: imported/w3c/web-platform-tests/css/css-logical/logical-box-inset.html
               webexposed/css-properties-behind-flags.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::isLayoutDependent):
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSProperties.json:
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::resolveDirectionAwareProperty):
        (WebCore::CSSProperty::isDirectionAwareProperty):
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue const):
        (WebCore::StyleProperties::asText const):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::isSimpleLengthPropertyID):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::CSSPropertyParser::parseShorthand):

2019-01-23  Oriol Brufau  <obrufau@igalia.com>

        [css-grid] Properly handle static positions of abspos inside grid items
        https://bugs.webkit.org/show_bug.cgi?id=193657

        Reviewed by Javier Fernandez.

        Rename findChildLogicalPosition to setLogicalPositionForChild and let it set the position.
        Add setLogicalOffsetForChild like setLogicalPositionForChild but just for one offset,
        and only if it's needed (not for abspos descentants in their static position).
        Add logicalOffsetForChild that finds the value to be set by the functions above.
        Rename existing logicalOffsetForChild to logicalOffsetForOutOfFlowChild.

        Tests: imported/w3c/web-platform-tests/css/css-grid/abspos/orthogonal-positioned-grid-descendants-001.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/orthogonal-positioned-grid-descendants-002.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/orthogonal-positioned-grid-descendants-003.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/orthogonal-positioned-grid-descendants-004.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/orthogonal-positioned-grid-descendants-005.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/orthogonal-positioned-grid-descendants-006.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/orthogonal-positioned-grid-descendants-007.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/orthogonal-positioned-grid-descendants-008.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/orthogonal-positioned-grid-descendants-009.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/orthogonal-positioned-grid-descendants-010.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/orthogonal-positioned-grid-descendants-011.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/orthogonal-positioned-grid-descendants-012.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/orthogonal-positioned-grid-descendants-013.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/orthogonal-positioned-grid-descendants-014.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/orthogonal-positioned-grid-descendants-015.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/orthogonal-positioned-grid-descendants-016.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/positioned-grid-descendants-001.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/positioned-grid-descendants-002.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/positioned-grid-descendants-003.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/positioned-grid-descendants-004.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/positioned-grid-descendants-005.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/positioned-grid-descendants-006.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/positioned-grid-descendants-007.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/positioned-grid-descendants-008.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/positioned-grid-descendants-009.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/positioned-grid-descendants-010.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/positioned-grid-descendants-011.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/positioned-grid-descendants-012.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/positioned-grid-descendants-013.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/positioned-grid-descendants-014.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/positioned-grid-descendants-015.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/positioned-grid-descendants-016.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::layoutPositionedObject):
        (WebCore::RenderGrid::logicalOffsetForOutOfFlowChild const):
        (WebCore::RenderGrid::gridAreaPositionForOutOfFlowChild const):
        (WebCore::RenderGrid::setLogicalPositionForChild const):
        (WebCore::RenderGrid::setLogicalOffsetForChild const):
        (WebCore::RenderGrid::logicalOffsetForChild const):
        * rendering/RenderGrid.h:

2019-01-23  Rob Buis  <rbuis@igalia.com>

        Update MIME type parser
        https://bugs.webkit.org/show_bug.cgi?id=180526

        Reviewed by Frédéric Wang.

        Add an enum to allow two modes of MIME type parsing, one mode
        to keep supporting RFC2045 as before, and one mode to support
        the updated MIME parser from mimesniff [1]. Mimesniff support
        brings the following changes:
        - allows parameter names without matching =value.
        - skips whitespace after subtype, parameter value and before
          parameter name.
        - lower cases MIME type and parameter name.
        - parameter names parsed before are discarded.

        The old mode is still used by CDM.cpp and MIMEHeader.cpp.

        [1] https://mimesniff.spec.whatwg.org/

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::getSupportedCapabilitiesForAudioVideoType):
        * platform/network/MIMEHeader.cpp:
        (WebCore::MIMEHeader::parseHeader):
        * platform/network/ParsedContentType.cpp:
        (WebCore::DummyParsedContentType::setContentType const):
        (WebCore::DummyParsedContentType::setContentTypeParameter const):
        (WebCore::isQuotedStringTokenCharacter):
        (WebCore::isTokenCharacter):
        (WebCore::parseToken):
        (WebCore::containsNonTokenCharacters):
        (WebCore::parseQuotedString):
        (WebCore::isNotForwardSlash):
        (WebCore::isNotSemicolon):
        (WebCore::isNotSemicolonOrEqualSign):
        (WebCore::parseContentType):
        (WebCore::isValidContentType):
        (WebCore::ParsedContentType::ParsedContentType):
        (WebCore::ParsedContentType::setContentType):
        (WebCore::isNonTokenCharacter):
        (WebCore::isNonQuotedStringTokenCharacter):
        (WebCore::ParsedContentType::setContentTypeParameter):
        * platform/network/ParsedContentType.h:

        Test: web-platform-tests/xhr/overridemimetype-blob.html

2019-01-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce CustomUndoStep.h and CustomUndoStep.cpp
        https://bugs.webkit.org/show_bug.cgi?id=193704
        <rdar://problem/44807048>

        Reviewed by Ryosuke Niwa.

        This patch is more work in progress towards supporting `UndoManager.addItem()`. Here, we introduce a helper
        class, CustomUndoStep, that holds a weak reference to a script-defined UndoItem. See below for more details.

        No change in behavior.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/CustomUndoStep.cpp:
        (WebCore::CustomUndoStep::CustomUndoStep):

        Subclass UndoStep.

        (WebCore::CustomUndoStep::unapply):
        (WebCore::CustomUndoStep::reapply):

        If possible, invoke the UndoItem's undo and redo handlers.

        (WebCore::CustomUndoStep::isValid const):
        * editing/CustomUndoStep.h:
        * editing/EditingStyle.cpp:
        * editing/InsertEditableImageCommand.cpp:
        (WebCore::InsertEditableImageCommand::doApply):

        Unified build fixes.

        * page/UndoItem.h:

2019-01-22  Simon Fraser  <simon.fraser@apple.com>

        Adding a child to a ScrollingStateNode needs to trigger a tree state commit
        https://bugs.webkit.org/show_bug.cgi?id=193682

        Reviewed by Zalan Bujtas.

        Scrolling tree mutations that re-arrange nodes (e.g. node reordering when z-index changes)
        need to trigger scrolling tree updates, and currently do not.

        Fix by adding a "ChildNodes" dirty bit to ScrollingStateNode. There isn't any code that consults
        this flag when committing the scrolling tree because we always eagerly traverse children, but
        we could use it to optimize later. The important part is that we use it to trigger a tree update.
        
        Can't test via z-reordering until webkit.org/b/192529 is fixed.

        Tests: scrollingcoordinator/gain-scrolling-node-parent.html
               scrollingcoordinator/lose-scrolling-node-parent.html

        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::appendChild):
        (WebCore::ScrollingStateNode::insertChild):
        (WebCore::ScrollingStateNode::removeChildAtIndex):
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::attachNode):

2019-01-22  Devin Rousso  <drousso@apple.com>

        Web Inspector: InspectorInstrumentation::willEvaluateScript should include column number
        https://bugs.webkit.org/show_bug.cgi?id=116191
        <rdar://problem/13905910>

        Reviewed by Joseph Pecoraro.

        Test inspector/timeline/line-column.html

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::evaluateModule):

        * bindings/js/JSExecStateInstrumentation.h:
        (WebCore::JSExecState::instrumentFunctionInternal):

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willCallFunction):
        (WebCore::InspectorInstrumentation::willEvaluateScript):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willCallFunctionImpl):
        (WebCore::InspectorInstrumentation::willEvaluateScriptImpl):

        * inspector/agents/InspectorTimelineAgent.h:
        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willCallFunction):
        (WebCore::InspectorTimelineAgent::willEvaluateScript):

        * inspector/TimelineRecordFactory.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createFunctionCallData):
        (WebCore::TimelineRecordFactory::createEvaluateScriptData):

        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::startColumn const): Added.

2019-01-22  Devin Rousso  <drousso@apple.com>

        Web Inspector: expose Audit and Recording versions to the frontend
        https://bugs.webkit.org/show_bug.cgi?id=193262
        <rdar://problem/47130684>

        Reviewed by Joseph Pecoraro.

        Tests: inspector/audit/version.html
               inspector/recording/version.html

        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame):

2019-01-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add some bindings-related bookkeeping to UndoManager and UndoItem
        https://bugs.webkit.org/show_bug.cgi?id=193111
        <rdar://problem/44807048>

        Reviewed by Ryosuke Niwa.

        This patch is work in progress towards supporting `UndoManager.addItem()`. Here, we add helper methods to
        UndoItem and UndoManager which later patches will exercise, as well as introduce some custom bindings to
        properly handle the case where UndoItems are given anonymous JavaScript functions (see below for more details).

        No new tests, because there is no script-observable change in behavior yet. When `addItems()` is hooked up, I
        will write a test to verify that the undo and redo JavaScript functions survive garbage collection.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSUndoItemCustom.cpp:
        (WebCore::JSUndoItem::visitAdditionalChildren):

        Have each JSUndoItem visit its undo and redo callback functions to ensure that the JavaScript wrapper objects
        for these functions are not garbage collected underneath the item.

        (WebCore::JSUndoItemOwner::isReachableFromOpaqueRoots):

        Consider the undo item wrapper reachable from opaque roots if it is associated with its UndoManager's Document.
        This ensures that if script isn't holding on to a reference to the wrapper (for instance, by calling
        `UndoManager.addItem(new UndoItem({ ... }))`), we still protect the corresponding JSUndoItem as long as the
        UndoManager's Document is alive. In the case where the undo item is not associated with a document, either (1)
        script is keeping a reference to it, in which case it will be trivially reachable, or (2) script won't be able
        to observe the destruction of the wrapper anyways (e.g. calling `new UndoItem({ ... })` by itself).

        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):

        Invalidate all undo items when the document is about to go away.

        * page/UndoItem.cpp:
        (WebCore::UndoItem::setUndoManager):
        (WebCore::UndoItem::invalidate):
        (WebCore::UndoItem::isValid const):

        Add a few helpers, to be used in a future patch. We consider an UndoItem valid if it has been added to an
        UndoManager, and is thus associated with a document.

        (WebCore::UndoItem::document const):
        * page/UndoItem.h:
        * page/UndoItem.idl:
        * page/UndoManager.cpp:
        (WebCore::UndoManager::UndoManager):
        (WebCore::UndoManager::addItem):

        Have an UndoManager keep its UndoItems alive. These UndoItems remain in this set until either the document will
        be destroyed, or the corresponding undo action is no longer needed because the platform undo stack has changed
        (this latter behavior is yet to be implemented).

        (WebCore::UndoManager::removeItem):
        (WebCore::UndoManager::removeAllItems):
        * page/UndoManager.h:
        (WebCore::UndoManager::UndoManager): Deleted.
        * page/scrolling/ScrollingTreeScrollingNode.cpp:

        Unified build fix.

2019-01-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][WebKitTestRunner] Null dereference of GraphicsContext::m_data in GraphicsContext::releaseWindowsContext
        https://bugs.webkit.org/show_bug.cgi?id=193664

        Reviewed by Brent Fulgham.

        WinCairo WebKitTestRunner always crash on openning test cases of
        HTMLMeterElement.

        If GraphicsContext::getWindowsContext retruned null HDC,
        LocalWindowsContext shouldn't release the null HDC.

        Covered by existing tests.

        * platform/graphics/win/LocalWindowsContext.h:
        (WebCore::LocalWindowsContext::~LocalWindowsContext):
        Release m_hdc only if it isn't null.

2019-01-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix -Wsign-compare warning
        https://bugs.webkit.org/show_bug.cgi?id=188697
        <rdar://problem/46105624>

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::asText const):

2019-01-22  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: provide a way to get related Accessibility properties for a given node
        https://bugs.webkit.org/show_bug.cgi?id=193227
        <rdar://problem/46787862>

        Reviewed by Joseph Pecoraro.

        Test: inspector/audit/run-accessibility.html

        * inspector/InspectorAuditAccessibilityObject.idl:
        * inspector/InspectorAuditAccessibilityObject.h:
        * inspector/InspectorAuditAccessibilityObject.cpp:
        (WebCore::InspectorAuditAccessibilityObject::getComputedProperties): Added.

2019-01-22  Simon Fraser  <simon.fraser@apple.com>

        Remove an iOS quirk where iframe renderers are identified as "RenderPartObject" in layout test results
        https://bugs.webkit.org/show_bug.cgi?id=193692

        Reviewed by Zalan Bujtas.

        Remove the iOS-specific renderName() implementation.

        * rendering/RenderIFrame.h:

2019-01-22  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Dynamic changes in the style attributes of an SVGElement do no affect the <use> instances
        https://bugs.webkit.org/show_bug.cgi?id=193647

        Reviewed by Simon Fraser.

        Changing a style attribute of an SVGELement needs to call invalidateInstances().

        Tests: svg/custom/svg-use-style-dynamic-change-invalidate.svg

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::attributeChanged):

2019-01-22  Alex Christensen  <achristensen@webkit.org>

        Fix more builds.

        * platform/network/curl/CurlResourceHandleDelegate.cpp:
        (WebCore::handleCookieHeaders):
        (WebCore::CurlResourceHandleDelegate::curlDidReceiveResponse):

2019-01-22  Alex Christensen  <achristensen@webkit.org>

        Fix some builds after r240292
        https://bugs.webkit.org/show_bug.cgi?id=193580

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::createCurlRequest):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::getCredential):

2019-01-22  Alex Christensen  <achristensen@webkit.org>

        Move NetworkStorageSession ownership to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=193580

        Reviewed by Geoff Garen.

        NetworkStorageSessions used to be owned by a process-global map living in WebCore.
        This patch moves the ownership to the WebKit/WebKitLegacy layer.
        In WebKitLegacy they are still owned by a process-global map for compatibility.
        In WebKit they are owned by a map owned by the NetworkProcess object.
        There were three non-NetworkProcess uses of NetworkStorageSessions which have been dealt with thusly:
        1. The WebProcess used to clear credentials from a NetworkStorageSession.  Since this was the only use
        of a NetworkStorageSession in the WebProcess we can conclude there were no credentials to clear,
        so this code was removed with no change in behavior.
        2. The WebProcess used NetworkStorageSessions to get persistent credentials.  This was turned
        into a static method that does the same thing.  We should audit these calls and decide if we really want them.
        3. The UIProcess used NetworkStorageSessions in APIHTTPCookieStore to interact with the default cookie
        storage on Cocoa platforms.  This has been replaced by functions that do the same thing directly.

        * platform/network/CredentialStorage.h:
        * platform/network/NetworkStorageSession.cpp:
        (WebCore::NetworkStorageSession::processMayUseCookieAPI):
        (WebCore::NetworkStorageSession::globalSessionMap): Deleted.
        (WebCore::NetworkStorageSession::storageSession): Deleted.
        (WebCore::NetworkStorageSession::destroySession): Deleted.
        (WebCore::NetworkStorageSession::forEach): Deleted.
        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::createCFStorageSessionForIdentifier):
        (WebCore::createCFStorageSessionForIdentifier): Deleted.
        (WebCore::defaultNetworkStorageSession): Deleted.
        (WebCore::NetworkStorageSession::switchToNewTestingSession): Deleted.
        (WebCore::NetworkStorageSession::defaultStorageSession): Deleted.
        (WebCore::NetworkStorageSession::ensureSession): Deleted.
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::getStoredCONNECTProxyCredentials):
        * platform/network/cocoa/CookieStorageObserver.h:
        * platform/network/curl/NetworkStorageSessionCurl.cpp:
        (WebCore::defaultSession): Deleted.
        (WebCore::NetworkStorageSession::defaultStorageSession): Deleted.
        (WebCore::NetworkStorageSession::ensureSession): Deleted.
        (WebCore::NetworkStorageSession::switchToNewTestingSession): Deleted.
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::clearSoupNetworkSessionAndCookieStorage):
        (WebCore::defaultSession): Deleted.
        (WebCore::NetworkStorageSession::defaultStorageSession): Deleted.
        (WebCore::NetworkStorageSession::ensureSession): Deleted.
        (WebCore::NetworkStorageSession::switchToNewTestingSession): Deleted.

2019-01-22  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: provide a way to get related Accessibility nodes for a given node
        https://bugs.webkit.org/show_bug.cgi?id=193225
        <rdar://problem/46799956>

        Reviewed by Joseph Pecoraro.

        Test: inspector/audit/run-accessibility.html

        * inspector/InspectorAuditAccessibilityObject.idl:
        * inspector/InspectorAuditAccessibilityObject.h:
        * inspector/InspectorAuditAccessibilityObject.cpp:
        (WebCore::InspectorAuditAccessibilityObject::getActiveDescendant): Added.
        (WebCore::addChildren): Added.
        (WebCore::InspectorAuditAccessibilityObject::getChildNodes): Added.
        (WebCore::InspectorAuditAccessibilityObject::getControlledNodes): Added.
        (WebCore::InspectorAuditAccessibilityObject::getFlowedNodes): Added.
        (WebCore::InspectorAuditAccessibilityObject::getMouseEventNode): Added.
        (WebCore::InspectorAuditAccessibilityObject::getOwnedNodes): Added.
        (WebCore::InspectorAuditAccessibilityObject::getParentNode): Added.
        (WebCore::InspectorAuditAccessibilityObject::getSelectedChildNodes): Added.

2019-01-22  David Kilzer  <ddkilzer@apple.com>

        Switch remaining QuickLook soft-linking in WebCore, WebKit over to QuickLookSoftLink.{cpp,h}
        <https://webkit.org/b/193654>
        <rdar://problem/47430290>

        Reviewed by Alex Christensen.

        - Moves QuickLookSoftLink.{h,mm} to PAL.
        - Adds soft-link to 3 classes to consolidate QuickLook.framework
          soft-linking.
        - Updates existing source to work with above changes.

        * SourcesCocoa.txt:
        * UnifiedSources-input.xcfilelist:
        * WebCore.xcodeproj/project.pbxproj:
        - Remove QuickLookSoftLink.{h,mm} due to move to PAL.

        * platform/ios/QuickLook.mm:
        (WebCore::QLPreviewGetSupportedMIMETypesSet):
        (WebCore::registerQLPreviewConverterIfNeeded):
        - Update for QuickLookSoftLink.{h,mm} move to PAL.

        * platform/network/ios/PreviewConverter.mm:
        (WebCore::optionsWithPassword):
        (WebCore::PreviewConverter::PreviewConverter):
        - Switch to using QuickLookSoftLink.{h,mm} in PAL.

        * platform/network/ios/WebCoreURLResponseIOS.mm:
        (WebCore::adjustMIMETypeIfNecessary):
        - Update for QuickLookSoftLink.{h,mm} move to PAL.

2019-01-22  Simon Fraser  <simon.fraser@apple.com>

        Fix the position of layers nested inside of composited overflow-scroll
        https://bugs.webkit.org/show_bug.cgi?id=193642

        Reviewed by Antti Koivisto and Sam Weinig.

        Remove an iOS #ifdef so that layers inside composited overflow gets the correct
        positions on macOS too.

        Test: compositing/geometry/fixed-inside-overflow-scroll.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::computeParentGraphicsLayerRect const):

2019-01-22  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Build fix for Ubuntu LTS 16.04
        https://bugs.webkit.org/show_bug.cgi?id=193672

        Unreviewed build fix.

        * html/canvas/CanvasStyle.h: Add default copy constructor for
        CMYKAColor struct.

2019-01-22  David Kilzer  <ddkilzer@apple.com>

        Leak of NSMutableArray (128 bytes) in com.apple.WebKit.WebContent running WebKit layout tests
        <https://webkit.org/b/193673>
        <rdar://problem/47448241>

        Reviewed by Dean Jackson.

        * platform/graphics/gpu/cocoa/GPUBindGroupLayoutMetal.mm:
        (WebCore::appendArgumentToArray): Use adoptNS() to fix the leak.

2019-01-22  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Decouple clearance computation and margin collapsing reset.
        https://bugs.webkit.org/show_bug.cgi?id=193670

        Reviewed by Antti Koivisto.

        Move margin collapsing reset logic from FloatingContext to BlockFormattingContext. It's the BlockFormattingContext's job to do.
        This is also in preparation for adding clear to static position.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::mapTopToAncestor):
        (WebCore::Layout::FormattingContext::mapTopLeftToAncestor): Deleted.
        * layout/FormattingContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeVerticalPositionForFloatClear const):
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        * layout/floats/FloatingContext.h:

2019-01-22  Frederic Wang  <fwang@igalia.com>

        Minor refactoring of the scrolling code
        https://bugs.webkit.org/show_bug.cgi?id=192398

        Unreviewed build fix.

        * page/scrolling/ScrollingTreeScrollingNode.cpp: Add missing header.

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

        [css-logical] Implement flow-relative margin, padding and border shorthands
        https://bugs.webkit.org/show_bug.cgi?id=188697

        Reviewed by Simon Fraser and Antti Koivisto.

        Tests: imported/w3c/web-platform-tests/css/css-logical/logical-box-border-color.html
               imported/w3c/web-platform-tests/css/css-logical/logical-box-border-shorthands.html
               imported/w3c/web-platform-tests/css/css-logical/logical-box-border-style.html
               imported/w3c/web-platform-tests/css/css-logical/logical-box-border-width.html
               imported/w3c/web-platform-tests/css/css-logical/logical-box-margin.html
               imported/w3c/web-platform-tests/css/css-logical/logical-box-padding.html
               webexposed/css-properties-behind-flags.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        Allow the new properties to serialize their computed value.

        (WebCore::ComputedStyleExtractor::getCSSPropertyValuesFor2SidesShorthand):
        (WebCore::ComputedStyleExtractor::getCSSPropertyValuesFor4SidesShorthand):
        * css/CSSComputedStyleDeclaration.h:
        Rename getCSSPropertyValuesForSidesShorthand to getCSSPropertyValuesFor4SidesShorthand,
        and add analogous getCSSPropertyValuesFor2SidesShorthand for serializing 2-sided
        shorthands.

        * css/CSSProperties.json:
        Add the new properties behind the CSSLogicalEnabled runtime flag.

        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::supportedPropertyNames const):
        Prevent CSS properties disabled behind a runtime flag from being exposed in
        style declarations.

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue const):
        Allow the new properties to serialize their specified value.

        (WebCore::StyleProperties::get2Values const):
        Add get2Values, analogous to get4Values, for serializing 2-sided shorthands.

        (WebCore::StyleProperties::borderPropertyValue const):
        Allow borderPropertyValue to serialize arbitrary multi-sided border shorthands
        corresponding to width, style and color.

        (WebCore::MutableStyleProperties::setProperty):
        Prevent CSS properties disabled behind a runtime flag from being set a value.

        (WebCore::StyleProperties::asText const):
        Allow the new properties to be serialized in cssText.
        Prevent CSS shorthands disabled behind a runtime flag from appearing in cssText,
        and serialize the longhands instead. Note that there could be another shorthand
        available which is enabled, but a proper solution would require bug 190496.

        * css/StyleProperties.h:
        Update declarations of borderPropertyValue and get2Values.

        * css/makeprop.pl:
        (addProperty):
        Add isEnabledCSSProperty function for checking that a CSS property is not
        disabled behind a runtime flag.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::cssPropertyID):
        Prevent CSS properties disabled behind a runtime flag from being exposed in
        computed styles.

        (WebCore::CSSPropertyParser::addProperty):
        Prevent CSS properties disabled behind a runtime flag from being set a value.

        (WebCore::CSSPropertyParser::consumeBorder):
        Change consumeBorder to provide the caller with the parsed values instead of
        setting properties. Then the caller can decide to which properties the values
        should be set, and whether border-image should be reset or not.

        (WebCore::CSSPropertyParser::consume2ValueShorthand):
        (WebCore::CSSPropertyParser::consume4ValueShorthand):
        Rename consume4Values to consume4ValueShorthand, and add analogous
        consume2ValueShorthand for parsing shorthands with two longhands.

        (WebCore::CSSPropertyParser::parseShorthand):
        Allow the new properties to be parsed.

        * css/parser/CSSPropertyParser.h:
        Update declarations of consumeBorder, consume2ValueShorthand and
        consume4ValueShorthand.

        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        Prevent CSS properties disabled behind a runtime flag from being exposed in
        the CSS inspector tool.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setCSSLogicalEnabled):
        (WebCore::RuntimeEnabledFeatures::cssLogicalEnabled const):
        Add the CSSLogicalEnabled runtime flag.

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

        [iOS] Handle hit testing for subframes
        https://bugs.webkit.org/show_bug.cgi?id=192303

        Reviewed by Frédéric Wang.

        Don't set delegatesScrolling bit for subframes on iOS. It is meant for top level application
        controlled scrolling. This fixes coordinate conversions for subframes and makes events work.

        Test by Frederic Wang.

        Test: fast/scrolling/ios/hit-testing-iframe.html

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::managesScrollbars const):

        Add a function that tells if the scrollview should deal with scrollbars at all
        This is always false on iOS and not connected to delegatesScrolling bit.

        (WebCore::ScrollView::updateScrollbars):
        * platform/ScrollView.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::shouldCompositeOverflowControls const):

2019-01-21  Brent Fulgham  <bfulgham@apple.com>

        Implement message handlers for NetworkProcess-based ResourceLoadStatistics
        https://bugs.webkit.org/show_bug.cgi?id=193556
        <rdar://problem/47368501>

        Reviewed by Alex Christensen.

        This patch adds a new observer callback used to message the NetworkProcess when
        user interaction events are received. This is needed when the ResourceLoadStatistics
        data is not being managed by the UIProcess.

        Tested by existing ResourceLoadStatistics and storageAccess tests.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::setLogUserInteractionNotificationCallback):
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        * loader/ResourceLoadObserver.h:
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::setCookiesFromDOM):

2019-01-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Take float top position into account when computing containing block height.
        https://bugs.webkit.org/show_bug.cgi?id=193655

        Reviewed by Antti Koivisto.

        When computing the containing block height, we take the first in-flow child's top position and use it as the base position.
        However when the first in-flow child clears a previous sibling, its vertical position is not necessarily the correct base for
        computing the containing block's height. Let's take the relevant floats into account as well.

        Test: fast/block/float/float-first-child-and-clear-sibling.html

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::contentHeightForFormattingContextRoot):
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::top const):
        * layout/floats/FloatingState.h:

2019-01-21  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r240237): Revert changes to WebCore Xcode project

        * WebCore.xcodeproj/project.pbxproj: Revert changes that were
        fixed in r240135.  Darin's patch must have been made prior to
        r240135.

2019-01-21  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r240201): Add a POINTER_EVENTS feature flag
        https://bugs.webkit.org/show_bug.cgi?id=193577
        <rdar://problem/47408511>

        * dom/ios/PointerEventIOS.cpp: Add ENABLE(POINTER_EVENTS) macro
        to fix tvOS & watchOS builds.

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

        Use references rather than pointers for register/unregister functions, and more
        https://bugs.webkit.org/show_bug.cgi?id=175028

        Reviewed by Daniel Bates.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::begin): Pass a reference.
        (WebCore::ApplePaySession::completePayment): Ditto.
        (WebCore::ApplePaySession::didReachFinalState): Ditto.
        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::retrieveRecords): Ditto.
        (WebCore::DOMCache::batchDeleteOperation): Ditto.
        (WebCore::DOMCache::batchPutOperation): Ditto.
        * Modules/cache/DOMCacheStorage.cpp:
        (WebCore::DOMCacheStorage::match): Ditto.
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::loadBlob): Ditto.
        (WebCore::FetchBodyOwner::finishBlobLoading): Ditto.
        * Modules/fetch/FetchBodySource.cpp:
        (WebCore::FetchBodySource::setActive): Ditto.
        (WebCore::FetchBodySource::setInactive): Ditto.
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::BodyLoader): Ditto.
        (WebCore::FetchResponse::BodyLoader::~BodyLoader): Ditto.
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::addedToRegistry): Ditto.
        (WebCore::MediaSource::removedFromRegistry): Ditto.
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::~MediaStream): Ditto.
        (WebCore::MediaStream::startProducingData): Ditto.
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack): Ditto.
        (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto.
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::create): Ditto.
        (WebCore::RTCDataChannel::close): Ditto.
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::create): Use auto.
        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::show): Pass a reference.
        (WebCore::Notification::finalize): Ditto.
        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        (WebCore::AudioBasicInspectorNode::updatePullStatus): Ditto.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::constructCommon): Ditto.
        (WebCore::AudioContext::lazyInitialize): Ditto.
        (WebCore::AudioContext::clear): Ditto.
        (WebCore::AudioContext::uninitialize): Ditto.
        (WebCore::AudioContext::markForDeletion): Take a reference.
        (WebCore::AudioContext::addAutomaticPullNode): Ditto.
        (WebCore::AudioContext::removeAutomaticPullNode): Ditto.
        (WebCore::AudioContext::willBeginPlayback): Pass a reference.
        (WebCore::AudioContext::willPausePlayback): Ditto.
        * Modules/webaudio/AudioContext.h: Update above functions to take
        references rather than pointers.

        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::finishDeref): Pass a reference.
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect): Ditto.
        (WebCore::WebSocket::stop): Ditto.
        (WebCore::WebSocket::didClose): Ditto.

        * WebCore.xcodeproj/project.pbxproj: Allowed Xcode to update this file.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::moduleLoaderResolve): Update since
        moduleLoader is now a reference.
        (WebCore::JSDOMWindowBase::moduleLoaderFetch): Ditto.
        (WebCore::JSDOMWindowBase::moduleLoaderEvaluate): Ditto.
        (WebCore::JSDOMWindowBase::moduleLoaderImportModule): Ditto.
        (WebCore::JSDOMWindowBase::moduleLoaderCreateImportMetaProperties): Ditto.

        * dom/ActiveDOMObject.h:
        (WebCore::ActiveDOMObject::setPendingActivity): Take a reference.
        (WebCore::ActiveDOMObject::unsetPendingActivity): Ditto.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::setData): Pass a reference.
        (WebCore::CharacterData::insertData): Ditto.
        (WebCore::CharacterData::deleteData): Ditto.
        (WebCore::CharacterData::replaceData): Ditto.

        * dom/Document.cpp:
        (WebCore::Document::getElementByAccessKey): Pass a reference.
        (WebCore::Document::buildAccessKeyMap): Take a reference.
        (WebCore::Document::registerForVisibilityStateChangedCallbacks): Ditto.
        (WebCore::Document::unregisterForVisibilityStateChangedCallbacks): Ditto.
        (WebCore::Document::addAudioProducer): Ditto.
        (WebCore::Document::removeAudioProducer): Ditto.
        (WebCore::Document::hoveredElementDidDetach): Ditto.
        (WebCore::Document::elementInActiveChainDidDetach): Ditto.
        (WebCore::Document::attachNodeIterator): Ditto.
        (WebCore::Document::detachNodeIterator): Ditto.
        (WebCore::Document::moveNodeIteratorsToNewDocumentSlowCase): Pass
        a reference.
        (WebCore::Document::nodeChildrenWillBeRemoved): Ditto.
        (WebCore::Document::nodeWillBeRemoved): Ditto.
        (WebCore::Document::textInserted): Take a reference.
        (WebCore::Document::textRemoved): Ditto.
        (WebCore::Document::textNodesMerged): Ditto.
        (WebCore::Document::textNodeSplit): Ditto.
        (WebCore::Document::takeDOMWindowFrom): Ditto.
        (WebCore::Document::registerForDocumentSuspensionCallbacks): Ditto.
        (WebCore::Document::unregisterForDocumentSuspensionCallbacks): Ditto.
        (WebCore::Document::registerForMediaVolumeCallbacks): Ditto.
        (WebCore::Document::unregisterForMediaVolumeCallbacks): Ditto.
        (WebCore::Document::registerForPrivateBrowsingStateChangedCallbacks): Ditto.
        (WebCore::Document::unregisterForPrivateBrowsingStateChangedCallbacks): Ditto.
        (WebCore::Document::registerForCaptionPreferencesChangedCallbacks): Ditto.
        (WebCore::Document::unregisterForCaptionPreferencesChangedCallbacks): Ditto.
        (WebCore::Document::registerForPageScaleFactorChangedCallbacks): Ditto.
        (WebCore::Document::unregisterForPageScaleFactorChangedCallbacks): Ditto.
        (WebCore::Document::finishedParsing): Use a reference.
        (WebCore::Document::attachRange): Take a reference.
        (WebCore::Document::detachRange): Ditto.
        (WebCore::Document::suspendScheduledTasks): Use a reference.
        (WebCore::Document::resumeScheduledTasks): Ditto.
        (WebCore::Document::addMediaCanStartListener): Take a reference.
        (WebCore::Document::removeMediaCanStartListener): Ditto.
        (WebCore::Document::deviceMotionController const): Return a reference.
        (WebCore::Document::deviceOrientationController const): Ditto.
        (WebCore::Document::simulateDeviceOrientationChange): Use a reference.
        (WebCore::Document::fullScreenIsAllowedForElement const): Take a reference.
        (WebCore::Document::requestFullScreenForElement): Pass a reference.
        (WebCore::Document::webkitExitFullscreen): Ditto.
        (WebCore::Document::webkitWillEnterFullScreen): Renamed to remove the
        "ForElement" from the function name. Take a reference rather than a pointer.
        (WebCore::Document::webkitDidEnterFullScreen): Renamed to remove the
        "ForElement" from the function name and removed the unused element argument.
        (WebCore::Document::webkitWillExitFullScreen): Ditto.
        (WebCore::Document::webkitDidExitFullScreen): Ditto.
        (WebCore::Document::pushFullscreenElementStack): Take a reference.
        (WebCore::Document::addDocumentToFullScreenChangeEventQueue): Ditto.
        (WebCore::DocumentParserYieldToken::DocumentParserYieldToken): Use a reference.
        (WebCore::DocumentParserYieldToken::~DocumentParserYieldToken): Ditto.
        (WebCore::Document::updateHoverActiveState): Updated name of isInActiveChain.

        * dom/Document.h: Updated argument types as described above. Changed a couple
        of inline functions to return references.

        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker): Take a reference.
        (WebCore::DocumentMarkerController::addMarkerToNode): Ditto.
        (WebCore::DocumentMarkerController::addTextMatchMarker): Ditto.
        (WebCore::DocumentMarkerController::addDictationPhraseWithAlternativesMarker): Ditto.
        (WebCore::DocumentMarkerController::addDictationResultMarker): Ditto.
        (WebCore::DocumentMarkerController::addDraggedContentMarker): Ditto.
        (WebCore::DocumentMarkerController::removeMarkers): Ditto.
        (WebCore::DocumentMarkerController::copyMarkers): Ditto.
        (WebCore::DocumentMarkerController::shiftMarkers): Ditto.
        (WebCore::DocumentMarkerController::setMarkersActive): DItto.
        * dom/DocumentMarkerController.h: Updated argument types as described above.

        * dom/Element.cpp:
        (WebCore::Element::~Element): Pass a reference.
        (WebCore::Element::isUserActionElementInActiveChain const): Updated name of
        isInActiveChain.
        (WebCore::Element::hasEquivalentAttributes const): Take a reference.
        (WebCore::Element::removedFromAncestor): Pass a reference.
        (WebCore::Element::clearHoverAndActiveStatusBeforeDetachingRenderer):
        Pass a reference and updated name of isInActiveChain.

        * dom/Element.h: Renamed inActiveChain to isInActiveChain, updated argument
        types to be references, and removed unneeded friend declaration and made
        SynchronizationOfLazyAttribute private.

        * dom/Node.cpp:
        (WebCore::Node::normalize): Pass a reference.
        (WebCore::Node::isEqualNode const): Ditto.
        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::NodeIterator): Ditto.
        (WebCore::NodeIterator::~NodeIterator): Ditto.

        * dom/RadioButtonGroups.cpp:
        (WebCore::RadioButtonGroup::add): Take a reference.
        (WebCore::RadioButtonGroup::updateCheckedState): Ditto.
        (WebCore::RadioButtonGroup::remove): Ditto.
        (WebCore::RadioButtonGroup::contains const): Ditto.
        (WebCore::RadioButtonGroups::addButton): Ditto.
        (WebCore::RadioButtonGroups::updateCheckedState): Ditto.
        (WebCore::RadioButtonGroups::hasCheckedButton const): Ditto.
        (WebCore::RadioButtonGroups::isInRequiredGroup const): Ditto.
        (WebCore::RadioButtonGroups::removeButton): Ditto.
        * dom/RadioButtonGroups.h: Updated argument types.

        * dom/Range.cpp:
        (WebCore::Range::Range): Pass a reference.
        (WebCore::Range::~Range): Ditto.
        (WebCore::Range::setDocument): Ditto.
        (WebCore::Range::createContextualFragment): Ditto.
        (WebCore::boundaryTextInserted): Ditto.
        (WebCore::Range::textInserted): Ditto.
        (WebCore::boundaryTextRemoved): Ditto.
        (WebCore::Range::textRemoved): Ditto.
        (WebCore::boundaryTextNodesSplit): Ditto.
        (WebCore::Range::textNodeSplit): Ditto.
        * dom/Range.h: Take references instead of pointers.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::prepareScript): Use reference.

        * dom/Text.cpp:
        (WebCore::Text::splitText): Pass reference.

        * dom/UserActionElementSet.h: Renamed inActiveChain to isInActiveChain to
        match the naming scheme of the other similar functions, like isActive.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::applyAlternativeTextToRange):
        Pass a reference.
        (WebCore::AlternativeTextController::respondToUnappliedSpellCorrection): Ditto.
        (WebCore::AlternativeTextController::handleAlternativeTextUIResult): Ditto.
        (WebCore::AlternativeTextController::respondToUnappliedEditing): Ditto.
        (WebCore::AlternativeTextController::markReversed): Ditto.
        (WebCore::AlternativeTextController::markCorrection): Ditto.
        (WebCore::AlternativeTextController::recordSpellcheckerResponseForModifiedCorrection): Ditto.
        (WebCore::AlternativeTextController::markPrecedingWhitespaceForDeletedAutocorrectionAfterCommand): Ditto.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers): Ditto.
        * editing/DictationCommand.cpp: Ditto.
        * editing/Editing.cpp:
        (WebCore::areIdenticalElements): Ditto.
        * editing/Editor.cpp:
        (WebCore::Editor::ignoreSpelling): Ditto.
        (WebCore::Editor::learnSpelling): Ditto.
        (WebCore::Editor::advanceToNextMisspelling): Ditto.
        (WebCore::Editor::clearMisspellingsAndBadGrammar): Ditto.
        (WebCore::Editor::markMisspellingsAfterTypingToWord): Ditto.
        (WebCore::Editor::markAndReplaceFor): Ditto.
        (WebCore::Editor::changeBackToReplacedString): Ditto.
        (WebCore::Editor::updateMarkersForWordsAffectedByEditing): Ditto.
        (WebCore::Editor::countMatchesForText): Ditto.
        (WebCore::Editor::scanRangeForTelephoneNumbers): Ditto.
        (WebCore::Editor::editorUIUpdateTimerFired): Ditto.
        (WebCore::Editor::handleAcceptedCandidate): Ditto.

        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::doApply): Pass a reference.
        * editing/InsertTextCommand.h: Take a reference.

        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::didCheckSucceed): Pass a reference.
        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::doApply): Ditto.
        (WebCore::SplitTextNodeCommand::doUnapply): Ditto.
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingHelper::findFirstMisspelling): Pass a reference.
        (WebCore::TextCheckingHelper::findFirstGrammarDetail const): Ditto.
        * editing/ios/DictationCommandIOS.cpp:
        (WebCore::DictationCommandIOS::doApply): Ditto.
        Also added a comment about a possible missing null check; behavior should
        be no different than before, but using a reference helps make clear there
        was never any null check.
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setDictationPhrasesAsChildOfElement): Ditto.
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::readInternal): Ditto.
        (WebCore::FileReader::abort): Ditto.
        (WebCore::FileReader::didFinishLoading): Ditto.
        (WebCore::FileReader::didFail): Ditto.

        * html/HTMLAppletElement.cpp: Removed unneeded include of HTMLDocument.h.
        There's very little left that is truly specific to HTMLDocument vs. Document.

        * html/HTMLDocument.h:
        (WebCore::HTMLDocument::create): Take a reference.
        (WebCore::HTMLDocument::createSynthesizedDocument): Ditto.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::~HTMLFormElement): Pass a reference.
        (WebCore::HTMLFormElement::parseAttribute): Ditto.
        (WebCore::HTMLFormElement::didMoveToNewDocument): Ditto.

        * html/HTMLIFrameElement.cpp: Removed unneeded include of HTMLDocument.h.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement): Pass a reference.
        (WebCore::HTMLInputElement::setChecked): Ditto.
        (WebCore::HTMLInputElement::registerForSuspensionCallbackIfNeeded): Ditto.
        (WebCore::HTMLInputElement::unregisterForSuspensionCallbackIfNeeded): Ditto.
        (WebCore::HTMLInputElement::didMoveToNewDocument): Ditto.
        (WebCore::HTMLInputElement::isInRequiredRadioButtonGroup): Ditto.
        (WebCore::HTMLInputElement::addToRadioButtonGroup): Ditto.
        (WebCore::HTMLInputElement::removeFromRadioButtonGroup): Ditto.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::registerWithDocument): Ditto.
        (WebCore::HTMLMediaElement::unregisterWithDocument): Ditto.
        (WebCore::HTMLMediaElement::selectMediaResource): Ditto.
        (WebCore::HTMLMediaElement::addTextTrack): Ditto.
        (WebCore::HTMLMediaElement::clearMediaPlayer): Ditto.
        (WebCore::HTMLMediaElement::resume): Ditto.
        (WebCore::HTMLMediaElement::setMediaControlsDependOnPageScaleFactor): Ditto.

        * html/HTMLNameCollection.cpp: Removed unneeded include of HTMLDocument.h.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::~HTMLPlugInImageElement): Pass a reference.
        (WebCore::HTMLPlugInImageElement::createElementRenderer): Ditto.
        (WebCore::HTMLPlugInImageElement::didMoveToNewDocument): Ditto.

        * html/HTMLSourceElement.cpp: Removed unneeded include of HTMLDocument.h.
        * html/HTMLTemplateElement.cpp: Ditto.

        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::matchesIndeterminatePseudoClass const):
        Pass a reference.
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin): Ditto.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener): Ditto.
        (WebCore::DOMWindow::removeEventListener): Ditto.
        (WebCore::DOMWindow::removeAllEventListeners): Ditto.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::didStartDrag): Use a reference.

        * page/EventSource.cpp:
        (WebCore::EventSource::create): Pass reference.
        (WebCore::EventSource::networkRequestEnded): Ditto.
        (WebCore::EventSource::close): Ditto.
        (WebCore::EventSource::abortConnectionAttempt): Ditto.

        * page/Frame.cpp: Removed unneeded include of HTMLDocument.h.
        * page/FrameView.cpp: Ditto.
        (WebCore::FrameView::qualifiesAsVisuallyNonEmpty const): Use reference.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine): Pass reference.

        * page/animation/CSSAnimationController.cpp:
        (WebCore::CSSAnimationControllerPrivate::addToAnimationsWaitingForStyle): Take reference.
        (WebCore::CSSAnimationControllerPrivate::removeFromAnimationsWaitingForStyle): Ditto.
        (WebCore::CSSAnimationControllerPrivate::addToAnimationsWaitingForStartTimeResponse): Ditto.
        (WebCore::CSSAnimationControllerPrivate::removeFromAnimationsWaitingForStartTimeResponse): Ditto.
        (WebCore::CSSAnimationControllerPrivate::animationWillBeRemoved): Ditto.
        * page/animation/CSSAnimationControllerPrivate.h: Ditto.

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::clearElement): Pass reference.
        (WebCore::CompositeAnimation::updateTransitions): Ditto.
        (WebCore::CompositeAnimation::updateKeyframeAnimations): Ditto.
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::initWithSimpleHTMLDocument): Ditto.

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::layerContentsFormat): Add ALLOW_DEPRECATED_DECLARATIONS_BEGIN/END so
        I can continue to compile with latest headers.

        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::buildReferenceFilter): Pass reference, small coding style
        tweaks as well.

        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::removeFromCacheAndInvalidateDependencies): Pass reference.
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::registerResource): Ditto.
        * rendering/svg/SVGResources.cpp:
        (WebCore::registerPendingResource): Ditto.
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::resourceDestroyed): Ditto.

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addTimeContainer): Take reference.
        (WebCore::SVGDocumentExtensions::removeTimeContainer): Ditto.
        (WebCore::SVGDocumentExtensions::addResource): Ditto.
        (WebCore::SVGDocumentExtensions::addPendingResource): Ditto.
        (WebCore::SVGDocumentExtensions::isElementWithPendingResources const): Ditto.
        (WebCore::SVGDocumentExtensions::isPendingResource const): Ditto.
        (WebCore::SVGDocumentExtensions::clearHasPendingResourcesIfPossible): Ditto.
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources): Ditto.
        (WebCore::SVGDocumentExtensions::setOfElementsReferencingTarget): Ditto.
        (WebCore::SVGDocumentExtensions::addElementReferencingTarget): Ditto.
        (WebCore::SVGDocumentExtensions::removeAllTargetReferencesForElement): Ditto.
        (WebCore::SVGDocumentExtensions::clearTargetDependencies): Ditto.
        (WebCore::SVGDocumentExtensions::removeAllElementReferencesForTarget): Ditto.
        (WebCore::SVGDocumentExtensions::registerSVGFontFaceElement): Ditto.
        (WebCore::SVGDocumentExtensions::unregisterSVGFontFaceElement): Ditto.
        * svg/SVGDocumentExtensions.h: Ditto.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::~SVGElement): Pass reference.
        (WebCore::SVGElement::removedFromAncestor): Ditto.
        (WebCore::SVGElement::buildPendingResourcesIfNeeded): Ditto.
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::clearResourceReferences): Ditto.
        (WebCore::SVGFEImageElement::buildPendingResource): Ditto.
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::insertedIntoAncestor): Ditto.
        (WebCore::SVGFontFaceElement::removedFromAncestor): Ditto.
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::buildPendingResource): Ditto.
        (WebCore::SVGMPathElement::clearResourceReferences): Ditto.
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::invalidateMPathDependencies): Ditto.
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement): Ditto.
        (WebCore::SVGSVGElement::~SVGSVGElement): Ditto.
        (WebCore::SVGSVGElement::didMoveToNewDocument): Ditto.
        (WebCore::SVGSVGElement::insertedIntoAncestor): Ditto.
        (WebCore::SVGSVGElement::removedFromAncestor): Ditto.
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::detachTarget): Ditto.
        (WebCore::SVGTRefElement::buildPendingResource): Ditto.
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::clearResourceReferences): Ditto.
        (WebCore::SVGTextPathElement::buildPendingResource): Ditto.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::updateShadowTree): Ditto.
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::clearResourceReferences): Ditto.
        (WebCore::SVGSMILElement::buildPendingResource): Ditto.
        * testing/Internals.cpp:
        (WebCore::Internals::addTextMatchMarker): Ditto.
        (WebCore::Internals::webkitWillEnterFullScreenForElement): Ditto.
        (WebCore::Internals::webkitDidEnterFullScreenForElement): Ditto.
        (WebCore::Internals::webkitWillExitFullScreenForElement): Ditto.
        (WebCore::Internals::webkitDidExitFullScreenForElement): Ditto.
        * workers/Worker.cpp:
        (WebCore::Worker::create): Ditto.
        (WebCore::Worker::notifyFinished): Ditto.
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::scheduleJob): Ditto.
        (WebCore::ServiceWorkerContainer::jobDidFinish): Ditto.
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::prepareToSend): Ditto.
        (WebCore::XMLHttpRequest::createRequest): Ditto.
        (WebCore::XMLHttpRequest::internalAbort): Ditto.
        (WebCore::XMLHttpRequest::networkErrorTimerFired): Ditto.
        (WebCore::XMLHttpRequest::didFail): Ditto.
        (WebCore::XMLHttpRequest::didFinishLoading): Ditto.

        * xml/XPathStep.cpp: Removed unneeded include of HTMLDocument.h.
        (WebCore::XPath::nodeMatchesBasicTest): Changed code to call isHTMLDocument
        rather than is<HTMLDocument> since this is not a type check for a downcast,
        but rather a behavioral difference that does not depend on any of the data
        stored in an HTMLDocument or the use of a distinct C++ class for it.

        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource): Pass a reference.

2019-01-21  David Kilzer  <ddkilzer@apple.com>

        Switch remaining VideoToolbox soft-linking in WebCore over to VideoToolboxSoftLink.{cpp,h}
        <https://webkit.org/b/193645>
        <rdar://problem/47421574>

        Reviewed by Alex Christensen.

        * platform/cocoa/VideoToolboxSoftLink.cpp:
        * platform/cocoa/VideoToolboxSoftLink.h:
        - Move soft-linking of VTPixelBufferConformer* functions from
          PixelBufferConformerCV.cpp to here.
        * platform/graphics/cv/PixelBufferConformerCV.cpp:
        - Remove local soft-linking of VideoToolbox.framework and switch
          to VideoToolboxSoftLink.h.

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

        Move delegatesScrolling() tests to lower level conversion function in ScrollView
        https://bugs.webkit.org/show_bug.cgi?id=193649

        Reviewed by Frédéric Wang.

        This reduces places where these tests are needed and helps avoid mistakes.

        * dom/Document.cpp:
        (WebCore::computeIntersectionState):
        * page/FrameView.cpp:
        (WebCore::FrameView::convertFromRendererToContainingView const):
        (WebCore::FrameView::convertFromContainingViewToRenderer const):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::viewToContents const):
        (WebCore::ScrollView::contentsToView const):
        (WebCore::ScrollView::contentsToContainingViewContents const):
        (WebCore::ScrollView::rootViewToContents const):
        (WebCore::ScrollView::contentsToRootView const):
        (WebCore::ScrollView::windowToContents const):
        (WebCore::ScrollView::contentsToWindow const):

2019-01-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r239915): about 130 test failures on WPE
        https://bugs.webkit.org/show_bug.cgi?id=193395

        Reviewed by Žan Doberšek.

        Since r239915 we are only overriding the characters with Default_Ignorable unicode property when the font
        doesn't support the code point. If the font happens to provide a glyph for the character, it's later ignored by
        harfbuzz when shaping, but the simple text code path doesn't ignore them unless there isn't a glyph.

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal): Always ignore characters with Default_Ignorable unicode property.
        (WebCore::characterMustDrawSomething): Moved to CharacterProperties.h and renamed as isDefaultIgnorableCodePoint().
        * platform/graphics/freetype/GlyphPageTreeNodeFreeType.cpp:
        (WebCore::GlyphPage::fill): Use isDefaultIgnorableCodePoint().
        * platform/text/CharacterProperties.h:
        (WebCore::isDefaultIgnorableCodePoint): Return whether the character has Default_Ignorable unicode property.

2019-01-20  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Implement Metal code generation
        https://bugs.webkit.org/show_bug.cgi?id=193531

        Reviewed by Dean Jackson.

        This implements the majority of the metal code generation piece. There are still a few pieces missing,
        that I'll add in follow up patches. There's still enough complexity here that this is worth reviewing
        on its own, though.

        This patch includes a few pieces:
        - Metal typedefs for every WHLSL type. This analysis is actually pretty interesting, because complex
              types depend on their inner types, and the inner types need to be emitted first. Therefore,
              this patch implements a topological sort when emitting types. Also, WHLSL types need to be de-
              duped because array references are implemented in MSL as structs, and if you have two structs
              in MSL with the same contents, those two structs are not equal and cannot be assigned to each
              other. So, this patch creates a trie to de-dup all the UnnamedTypes, and implements a
              dependency graph which includes both nodes in the trie as well as NamedTypes which don't appear
              in the trie.
        - WHLSL enumeration code generation
        - A name mangler, which ensures that no text from the source program is contained within the result
              program
        - Full support for expressions. An expression like "y = *x + 7;" would be converted to something like
              Type1 variable1 = *x;
              Type2 variable2 = 7;
              Type3 variable3 = variable1 + variable2;
              y = variable3;
        - Mostly complete support for control flow. This is tricky because of how we transform WHLSL
              expressions into C++ statements. Therefore, things like "for ( ; *x + 7; )" is difficult to
              compile, because we can't put the "*x + 7" generated statements into the for loop itself.
              Instead, we have to emit this code inside the loop, in all the places that would implicitly run
              it. This patch doesn't fully handle this, see below. (If MSL supported lambdas, we could put
              the statements into a lambda and do something like "for ( ; theLambda(); )" but MSL doesn't
              support lambdas.)

        Missing pieces:
        - Entry point pack / unpack code
        - Support for "continue" (See above regarding control flow)
        - Knowing whether or not a switch case should end with break or fallthrough
        - Trapping
        - Zero filling variables
        - Code generation for compiler-generated native functions (this patch supports native functions in the
              standard library), texture functions, and HLSL's half <-> int functions.

        No new tests because it isn't hooked up yet. As soon as we can do entry point packing and unpacking,
        I'll start porting the test suite.

        * Modules/webgpu/WHLSL/AST/WHLSLBuiltInSemantic.h:
        (WebCore::WHLSL::AST::BuiltInSemantic::targetIndex):
        * Modules/webgpu/WHLSL/AST/WHLSLExpression.h:
        (WebCore::WHLSL::AST::Expression::resolvedType):
        (WebCore::WHLSL::AST::Expression::type): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLFunctionDeclaration.h:
        (WebCore::WHLSL::AST::FunctionDeclaration::name):
        * Modules/webgpu/WHLSL/AST/WHLSLStructureDefinition.h:
        (WebCore::WHLSL::AST::StructureDefinition::find):
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp: Added.
        (WebCore::WHLSL::Metal::EntryPointScaffolding::EntryPointScaffolding):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::helperTypes):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::signature):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::unpack):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::pack):
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.h.
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp: Added.
        (WebCore::WHLSL::Metal::FunctionDeclarationWriter::FunctionDeclarationWriter):
        (WebCore::WHLSL::Metal::FunctionDeclarationWriter::toString):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::FunctionDefinitionWriter):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::toString):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::constantExpressionString):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::generateNextVariableName):
        (WebCore::WHLSL::Metal::metalFunctions):
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.h.
        * Modules/webgpu/WHLSL/Metal/WHLSLMetalCodeGenerator.cpp: Copied from Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLStructureDefinition.h.
        (WebCore::WHLSL::Metal::generateMetalCode):
        * Modules/webgpu/WHLSL/Metal/WHLSLMetalCodeGenerator.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.h.
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp: Added.
        (WebCore::WHLSL::Metal::getNativeName):
        (WebCore::WHLSL::Metal::mapFunctionName):
        (WebCore::WHLSL::Metal::convertAddressSpace):
        (WebCore::WHLSL::Metal::writeNativeFunction):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.h.
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp: Added.
        (WebCore::WHLSL::Metal::BaseTypeNameNode::BaseTypeNameNode):
        (WebCore::WHLSL::Metal::BaseTypeNameNode::isArrayTypeNameNode const):
        (WebCore::WHLSL::Metal::BaseTypeNameNode::isArrayReferenceTypeNameNode const):
        (WebCore::WHLSL::Metal::BaseTypeNameNode::isPointerTypeNameNode const):
        (WebCore::WHLSL::Metal::BaseTypeNameNode::isReferenceTypeNameNode const):
        (WebCore::WHLSL::Metal::BaseTypeNameNode::children):
        (WebCore::WHLSL::Metal::BaseTypeNameNode::append):
        (WebCore::WHLSL::Metal::BaseTypeNameNode::parent):
        (WebCore::WHLSL::Metal::BaseTypeNameNode::mangledName const):
        (WebCore::WHLSL::Metal::ArrayTypeNameNode::ArrayTypeNameNode):
        (WebCore::WHLSL::Metal::ArrayTypeNameNode::numElements const):
        (WebCore::WHLSL::Metal::ArrayReferenceTypeNameNode::ArrayReferenceTypeNameNode):
        (WebCore::WHLSL::Metal::ArrayReferenceTypeNameNode::addressSpace const):
        (WebCore::WHLSL::Metal::PointerTypeNameNode::PointerTypeNameNode):
        (WebCore::WHLSL::Metal::PointerTypeNameNode::addressSpace const):
        (WebCore::WHLSL::Metal::ReferenceTypeNameNode::ReferenceTypeNameNode):
        (WebCore::WHLSL::Metal::ReferenceTypeNameNode::namedType):
        (WebCore::WHLSL::Metal::TypeNamer::TypeNamer):
        (WebCore::WHLSL::Metal::TypeNamer::visit):
        (WebCore::WHLSL::Metal::findInVector):
        (WebCore::WHLSL::Metal::find):
        (WebCore::WHLSL::Metal::TypeNamer::mangledNameForType):
        (WebCore::WHLSL::Metal::TypeNamer::createNameNode):
        (WebCore::WHLSL::Metal::TypeNamer::insert):
        (WebCore::WHLSL::Metal::MetalTypeDeclarationWriter::MetalTypeDeclarationWriter):
        (WebCore::WHLSL::Metal::MetalTypeDeclarationWriter::toString):
        (WebCore::WHLSL::Metal::MetalTypeDeclarationWriter::visit):
        (WebCore::WHLSL::Metal::TypeNamer::metalTypeDeclarations):
        (WebCore::WHLSL::Metal::toString):
        (WebCore::WHLSL::Metal::TypeNamer::emitUnnamedTypeDefinition):
        (WebCore::WHLSL::Metal::TypeNamer::emitNamedTypeDefinition):
        (WebCore::WHLSL::Metal::TypeNamer::metalTypeDefinitions):
        (WebCore::WHLSL::Metal::TypeNamer::mangledNameForEnumerationMember):
        (WebCore::WHLSL::Metal::TypeNamer::mangledNameForStructureElement):
        (WebCore::WHLSL::Metal::TypeNamer::metalTypes):
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.h: Added.
        (WebCore::WHLSL::Metal::TypeNamer::generateNextTypeName):
        (WebCore::WHLSL::Metal::TypeNamer::generateNextStructureElementName):
        (WebCore::WHLSL::Metal::TypeNamer::generateNextEnumerationMemberName):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::checkSemantics):
        (WebCore::WHLSL::Checker::visit):
        * Modules/webgpu/WHLSL/WHLSLGatherEntryPointItems.cpp:
        (WebCore::WHLSL::Gatherer::visit):
        * Modules/webgpu/WHLSL/WHLSLGatherEntryPointItems.h:
        (WebCore::WHLSL::EntryPointItem::EntryPointItem):
        * Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLStatementBehaviorChecker.cpp: Added.
        (WebCore::WHLSL::StatementBehaviorChecker::takeFunctionBehavior):
        (WebCore::WHLSL::checkStatementBehavior):
        * Modules/webgpu/WHLSL/WHLSLStatementBehaviorChecker.h: Renamed from Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.h.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-01-20  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Add the statement behavior checker
        https://bugs.webkit.org/show_bug.cgi?id=193487

        Reviewed by Dean Jackson.

        This is a translation of https://github.com/gpuweb/WHLSL/blob/master/Spec/source/index.rst#typing-statements
        into C++. It is meant to replace the ReturnChecker and UnreachableCodeChecker in the reference implementation.

        No new tests because it isn't hooked up yet. Not enough of the compiler exists to have any meaningful sort
        of test. When enough of the compiler is present, I'll port the reference implementation's test suite.

        * Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp: Removed. StatementBehaviorChecker does everything that LoopChecker
        does.
        * Modules/webgpu/WHLSL/WHLSLStatementBehaviorChecker.cpp: Added.
        (WebCore::WHLSL::StatementBehaviorChecker::takeFunctionBehavior):
        (WebCore::WHLSL::checkStatementBehavior):
        * Modules/webgpu/WHLSL/WHLSLStatementBehaviorChecker.h: Renamed from Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.h.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-01-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r240174): Wrong preprocessor guards in RenderImage::paintAreaElementFocusRing
        https://bugs.webkit.org/show_bug.cgi?id=193630

        Reviewed by Daniel Bates.

        r240174 inadvertently disabled this function on non-Apple platforms.

        This fixes layout test fast/images/image-map-outline-in-positioned-container.html.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintAreaElementFocusRing):

2019-01-20  chris fleizach  <cfleizach@apple.com>

        AX: Support returning relative frames for accessibility
        https://bugs.webkit.org/show_bug.cgi?id=193414
        <rdar://problem/47268501>

        Reviewed by Zalan Bujtas.

        Create a way for assistive technologies to retrieve a frame in page space that can be transformed to its final screen space by having the AT message the UI process separately.

        Consolidate rect/point conversion methods for macOS and iOS.
        This is only needed on WebKit2, where we have to reach back across to the hosting process to get the final frame, so we can skip this test on WK1.

        Tests: accessibility/mac/relative-frame.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityConvertPointToViewSpace:]):
        (-[WebAccessibilityObjectWrapper _accessibilityRelativeFrame]):
        (-[WebAccessibilityObjectWrapper accessibilityVisibleContentRect]):
        (-[WebAccessibilityObjectWrapper accessibilityActivationPoint]):
        (-[WebAccessibilityObjectWrapper accessibilityFrame]):
        (-[WebAccessibilityObjectWrapper frameForTextMarkers:]):
        (-[WebAccessibilityObjectWrapper rectsForSelectionRects:]):
        (-[WebAccessibilityObjectWrapper convertPointToScreenSpace:]): Deleted.
        (-[WebAccessibilityObjectWrapper convertRectToScreenSpace:]): Deleted.
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (convertPathToScreenSpaceFunction):
        (-[WebAccessibilityObjectWrapperBase convertRectToSpace:space:]):
        (-[WebAccessibilityObjectWrapperBase convertPointToScreenSpace:]): Deleted.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper IGNORE_WARNINGS_END]):
        (-[WebAccessibilityObjectWrapper position]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper convertPointToScreenSpace:]): Deleted.

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

        On RenderBox, make client sizing be derived from padding box sizing
        https://bugs.webkit.org/show_bug.cgi?id=193621

        Reviewed by Daniel Bates.

        I never liked how clientWidth/Height, an IE-originated term, was used as the basis
        for various RenderBox geometry functions.

        Fix by adding some functions which return the dimensions of the padding box (which
        is the inside of the border and any scrollbar), and define clientWidth/Height in
        terms of them.

        Also add paddingBoxRectIncludingScrollbar() function that is used by compositing code.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clientWidth const):
        (WebCore::RenderBox::clientHeight const):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::borderBoxRect const):
        (WebCore::RenderBox::computedCSSContentBoxRect const):
        (WebCore::RenderBox::contentWidth const):
        (WebCore::RenderBox::contentHeight const):
        (WebCore::RenderBox::paddingBoxWidth const):
        (WebCore::RenderBox::paddingBoxHeight const):
        (WebCore::RenderBox::paddingBoxRect const):
        (WebCore::RenderBox::paddingBoxRectIncludingScrollbar const):
        (WebCore::RenderBox::hasHorizontalOverflow const):
        (WebCore::RenderBox::hasVerticalOverflow const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::computeParentGraphicsLayerRect const):
        (WebCore::RenderLayerBacking::updateGeometry):

2019-01-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r238275.

        Regressed css3/shapes/shape-outside/shape-image/shape-
        image-025.html

        Reverted changeset:

        "ScalableImageDecoder: don't forcefully decode image data when
        querying frame completeness, duration"
        https://bugs.webkit.org/show_bug.cgi?id=191354
        https://trac.webkit.org/changeset/238275

2019-01-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] <body>'s overflow property value is propagated to viewport
        https://bugs.webkit.org/show_bug.cgi?id=193617

        Reviewed by Antti Koivisto.

        When the root element is an HTML "HTML" element or an XHTML "html" element, and that element has an HTML "BODY" element
        or an XHTML "body" element as a child, user agents must instead apply the 'overflow' property from the first such child element to the viewport,
        if the value on the root element is 'visible'. The 'visible' value when used for the viewport must be interpreted as 'auto'.
        The element from which the value is propagated must have a used value for 'overflow' of 'visible'.

        This also has impact on layout since <body style="overflow: hidden"> would establish a block formatting context.

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isOverflowVisible const):

2019-01-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r240209.

        Broke GTK/WPE injected bundle

        Reverted changeset:

        "AX: Support returning relative frames for accessibility"
        https://bugs.webkit.org/show_bug.cgi?id=193414
        https://trac.webkit.org/changeset/240209

2019-01-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Avoid importing directly from subumbrella frameworks
        https://bugs.webkit.org/show_bug.cgi?id=186016
        <rdar://problem/40591038>

        Reviewed by Sam Weinig.

        * Configurations/WebCore.xcconfig: Removed -iframework options from OTHER_CFLAGS and
          OTHER_CPLUSPLUSFLAGS.
        * editing/mac/DictionaryLookupLegacy.mm: Import Quartz.h instead of a PDFKit header.
        * platform/mac/PlatformEventFactoryMac.mm: Import Carbon.h instead of HIToolbox headers.
        * platform/text/mac/TextEncodingRegistryMac.mm: Import Carbon.h instead of CarbonCore.h.

2019-01-20  chris fleizach  <cfleizach@apple.com>

        AX: Support returning relative frames for accessibility
        https://bugs.webkit.org/show_bug.cgi?id=193414
        <rdar://problem/47268501>

        Reviewed by Zalan Bujtas.

        Create a way for assistive technologies to retrieve a frame in page space that can be transformed to its final screen space by having the AT message the UI process separately.

        Consolidate rect/point conversion methods for macOS and iOS.
        This is only needed on WebKit2, where we have to reach back across to the hosting process to get the final frame, so we can skip this test on WK1.

        Tests: accessibility/mac/relative-frame.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityConvertPointToViewSpace:]):
        (-[WebAccessibilityObjectWrapper _accessibilityRelativeFrame]):
        (-[WebAccessibilityObjectWrapper accessibilityVisibleContentRect]):
        (-[WebAccessibilityObjectWrapper accessibilityActivationPoint]):
        (-[WebAccessibilityObjectWrapper accessibilityFrame]):
        (-[WebAccessibilityObjectWrapper frameForTextMarkers:]):
        (-[WebAccessibilityObjectWrapper rectsForSelectionRects:]):
        (-[WebAccessibilityObjectWrapper convertPointToScreenSpace:]): Deleted.
        (-[WebAccessibilityObjectWrapper convertRectToScreenSpace:]): Deleted.
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (convertPathToScreenSpaceFunction):
        (-[WebAccessibilityObjectWrapperBase convertRectToSpace:space:]):
        (-[WebAccessibilityObjectWrapperBase convertPointToScreenSpace:]): Deleted.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper IGNORE_WARNINGS_END]):
        (-[WebAccessibilityObjectWrapper position]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper convertPointToScreenSpace:]): Deleted.

2019-01-20  Antoine Quint  <graouts@apple.com>

        Add a POINTER_EVENTS feature flag
        https://bugs.webkit.org/show_bug.cgi?id=193577
        <rdar://problem/47408511>

        Unreviewed. Also enable Pointer Events for iosmac.

        * Configurations/FeatureDefines.xcconfig:

2019-01-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Ensure that floats in FloatingContext::m_floats are always horizontally ordered.
        https://bugs.webkit.org/show_bug.cgi?id=193613

        Reviewed by Antti Koivisto.

        Float items in m_floats list should stay in horizontal position order (left/right edge).

        When adding a new float item to floating state list, we have to ensure that it is definitely the left(right)-most item.
        Normally it is, but negative horizontal margins can push the float box beyond another float box.

        <div style="float: left; height: 10px; width: 10px;"></div>
        <div style="float: left; height: 10px; width: 10px; margin-left: -80px;"></div>

        The second float's right edge beyond the first float' left edge. THe second float is not the right(inner)-most float anymore.

        Test: fast/block/float/floats-with-negative-horizontal-margin.html

        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::areFloatsHorizontallySorted):
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::positionForFloatAvoiding const):
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::append):

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

        getUserMedia with a deviceId exact constraint with an empty string value should succeed
        https://bugs.webkit.org/show_bug.cgi?id=193541
        <rdar://problem/47357218>

        Reviewed by Eric Carlson.

        If there is a deviceId constraint, remove any empty string from ideal/exact string list.
        This will make the device selection be solely based on other constraints.
        An improvement might be for 'exact' constraint to pick the default device.
        There is currently no such notion of a default device.
        Picking the best fitting device seems a good tradeoff.
        Covered by updated test.

        * platform/mediastream/MediaConstraints.cpp:
        (WebCore::MediaTrackConstraintSetMap::set):
        * platform/mediastream/MediaConstraints.h:
        (WebCore::StringConstraint::removeEmptyStringConstraint):

2019-01-19  Eric Liang  <ericliang@apple.com>

        AXSelected attribute on RadioButton should not be settable.
        https://bugs.webkit.org/show_bug.cgi?id=193371

        Reviewed by Chris Fleizach.

        Test: accessibility/set-selected-editable.html

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

2019-01-19  Antoine Quint  <graouts@apple.com>

        Add a POINTER_EVENTS feature flag
        https://bugs.webkit.org/show_bug.cgi?id=193577

        Reviewed by Dean Jackson.

        Only expose the PointerEvent interface if the POINTER_EVENTS feature is enabled.

        * Configurations/FeatureDefines.xcconfig:
        * dom/EventNames.in:
        * dom/PointerEvent.cpp:
        * dom/PointerEvent.h:
        * dom/PointerEvent.idl:

2019-01-18  Ryosuke Niwa  <rniwa@webkit.org>

        iOS: Updating input mode should update the software keyboard
        https://bugs.webkit.org/show_bug.cgi?id=193565
        <rdar://problem/47376334>

        Reviewed by Wenson Hsieh.

        Let the chrome client know that the focused element's inputmode had changed.

        Test: fast/forms/ios/inputmode-none-removed.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseAttribute):
        * page/ChromeClient.h:

2019-01-18  Brian Burg  <bburg@apple.com>

        Automation.computeElementLayout should return visual viewport-aware coordinates
        https://bugs.webkit.org/show_bug.cgi?id=193598
        <rdar://problem/35325644>

        Reviewed by Simon Fraser.

        * page/FrameView.h: export symbol to be usable from WebKit.
        * page/FrameView.cpp:
        (WebCore::FrameView::clientToLayoutViewportRect const): Added.
        Do the same thing as clientToLayoutViewportPoint with a rect instead.


2019-01-18  Eric Carlson  <eric.carlson@apple.com>

        Revert r238815, it broke WK1 video fullscreen on Mac
        https://bugs.webkit.org/show_bug.cgi?id=193586
        <rdar://problem/47358941>

        Reviewed by Jer Noble.

        * PlatformMac.cmake:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::supportsFullscreen const):

2019-01-18  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: don't keep the injected sub-objects alive between runs
        https://bugs.webkit.org/show_bug.cgi?id=193594
        <rdar://problem/47398091>

        Reviewed by Joseph Pecoraro.

        Rather than save the `InspectorAuditAccessibilityObject` and `InspectorAuditDOMObject`
        between individual `Audit.setup` invocations, we should only keep them alive so long as the
        injected `WebInspectorAudit` object is alive (e.g. from `Audit.setup` to `Audit.teardown`).

        This change fixes inspector/audit/run-accessibility.html.

        * inspector/agents/page/PageAuditAgent.h:
        * inspector/agents/page/PageAuditAgent.cpp:
        (WebCore::PageAuditAgent::populateAuditObject):

2019-01-18  Daniel Bates  <dabates@apple.com>

        Another attempt to fix the iOS build following <https://trac.webkit.org/changeset/240174>
        (https://bugs.webkit.org/show_bug.cgi?id=193583)

        Substitute ENABLE(FULL_KEYBOARD_ACCESS) for PLATFORM(MAC). On Mac, we always build with
        ENABLE(FULL_KEYBOARD_ACCESS) enabled.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::paintFocusRing):

2019-01-18  Daniel Bates  <dabates@apple.com>

        Fix some build issues.

        Including UIKitSoftLinking.h is not compatible with unified builds.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-01-18  Justin Fan  <justin_fan@apple.com>

        (WIP) [WebGPU] WebGPUProgrammablePassEncoder::setBindGroup prototype
        https://bugs.webkit.org/show_bug.cgi?id=193457
        <rdar://problem/47296678>

        Reviewed by Dean Jackson.

        Enable WebGPU developers to assign buffer bind groups and access them via render pipeline. 

        Test: webgpu/buffer-resource-triangles.html

        * Modules/webgpu/WebGPUBindGroup.h:
        (WebCore::WebGPUBindGroup::bindGroup const): Added getter.
        * Modules/webgpu/WebGPUProgrammablePassEncoder.cpp: 
        (WebCore::WebGPUProgrammablePassEncoder::setBindGroup const): Added. Delegates call to GPUProgrammablePassEncoder.
        * Modules/webgpu/WebGPUProgrammablePassEncoder.h: Enable setBindGroup.
        * Modules/webgpu/WebGPUProgrammablePassEncoder.idl: ditto.
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/GPUBindGroup.h: 
        (WebCore::GPUBindGroup::layout const): Added getter.
        (WebCore::GPUBindGroup::bindings const): ditto.
        * platform/graphics/gpu/GPUBindGroupLayout.h: Added ArgumentEncoderBuffer struct to retain ptr to both MTLArgumentEncoders and their argument MTLBuffers.
        (WebCore::GPUBindGroupLayout::ArgumentEncoderBuffer::operator! const):
        (WebCore::GPUBindGroupLayout::vertexArguments const): Added. Getter.
        (WebCore::GPUBindGroupLayout::fragmentArguments const): ditto.
        (WebCore::GPUBindGroupLayout::computeArguments const): ditto.
        * platform/graphics/gpu/GPUDevice.cpp: Refactored unnecessary header include.
        * platform/graphics/gpu/GPUDevice.h: ditto.
        * platform/graphics/gpu/GPUProgrammablePassEncoder.h:
        (WebCore::GPUProgrammablePassEncoder::setVertexBuffer): Added. Delegates to MTLCommandEncoder call.
        (WebCore::GPUProgrammablePassEncoder::setFragmentBuffer): ditto.
        * platform/graphics/gpu/GPURenderPassEncoder.h: 
        * platform/graphics/gpu/cocoa/GPUBindGroupLayoutMetal.mm:
        (WebCore::tryCreateArgumentEncoderAndBuffer): Replace newEncoder(). Now create an ArgumentEncoderBuffer object from an array of MTLArgumentDescriptors, if able.
        (WebCore::GPUBindGroupLayout::tryCreate): Refactor to support ArgumentEncoderBuffers, and allocate MTLBuffers for argument encoders.
        (WebCore::GPUBindGroupLayout::GPUBindGroupLayout): Support ArgumentEncoderBuffers.
        (WebCore::newEncoder): Deleted.
        * platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm:
        (WebCore::GPUCommandBuffer::GPUCommandBuffer):
        * platform/graphics/gpu/cocoa/GPUProgrammablePassEncoderMetal.mm:
        (WebCore::GPUProgrammablePassEncoder::setResourceAsBufferOnEncoder): Set a buffer resource on the MTLArgumentEncoder, and call useResource on the command encoder.
        (WebCore::GPUProgrammablePassEncoder::setBindGroup): Parses the bind group to assign each resource on its matching MTLArgumentEncoder.
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm: 
        (WebCore::GPURenderPassEncoder::useResource): Resolves call from GPUProgrammablePassEncoder to call on MTLRenderCommandEncoder.
        (WebCore::GPURenderPassEncoder::setVertexBuffer): ditto.
        (WebCore::GPURenderPassEncoder::setFragmentBuffer): ditto.

2019-01-18  Daniel Bates  <dabates@apple.com>

        Another attempt to fix the iOS build following <https://trac.webkit.org/changeset/240174>
        (https://bugs.webkit.org/show_bug.cgi?id=193583)

        Only override RenderTheme::platformFocusRingColor() when building with ENABLE(FULL_KEYBOARD_ACCESS)
        enabled.

        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:

2019-01-18  Daniel Bates  <dabates@apple.com>

        Attempt to fix the iOS build following <https://trac.webkit.org/changeset/240174>
        (https://bugs.webkit.org/show_bug.cgi?id=193583)

        Namespace qualify call to getUIColorClass().

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::platformFocusRingColor const):

2019-01-18  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/SDKVariant.xcconfig: Added.
        * Configurations/WebCore.xcconfig:

2019-01-18  Daniel Bates  <dabates@apple.com>

        CSS auto focus-ring outlines don't render on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193583
        <rdar://problem/6508697>

        Reviewed by Simon Fraser.

        Implement support for drawing focus rings on iOS when built with ENABLE(FULL_KEYBOARD_ACCESS)
        enabled.

        For now the focus ring drawing for iOS is tangled up into the Mac-specific code to draw
        animated focus rings. I will fix this in <https://bugs.webkit.org/show_bug.cgi?id=193591>.

        * SourcesCocoa.txt: Add file ColorIOS.mm.
        * WebCore.xcodeproj/project.pbxproj: Add files ColorIOS.{h, mm}.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::drawFocusRingAtTime):
        (WebCore::GraphicsContext::drawFocusRing):
        Compile focus ring drawing code when building with ENABLE(FULL_KEYBOARD_ACCESS) enabled.
        This is always enabled on Mac.
        
        * platform/ios/ColorIOS.h: Added.
        * platform/ios/ColorIOS.mm: Added.
        (WebCore::colorFromUIColor): Convert a UIColor to a WebCore::Color.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::paintFocusRing):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintAreaElementFocusRing):
        Compile focus ring drawing code when building with ENABLE(FULL_KEYBOARD_ACCESS) enabled.
        This is always enabled on Mac.

        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::platformFocusRingColor const): Implement this override for iOS.
        (WebCore::RenderThemeIOS::supportsFocusRing const): Implement this override for iOS to always
        return false - the iOS theme code does not support painting focus rings. By returning false we
        will use the platform-independent, non-theme code path to draw focus rings.

2019-01-18  David Kilzer  <ddkilzer@apple.com>

        Follow-up: Switch remaining UIKit soft-linking in WebCore, WebKitLegacy over to UIKitSoftLink.{cpp,h}
        <https://webkit.org/b/193568>
        <rdar://problem/47381130>

        * editing/cocoa/DictionaryLookup.mm:
        (-[WebRevealHighlight drawHighlightContentForItem:context:]):
        Fix the build by changing getUIApplicationClass() to
        PAL::getUIApplicationClass().

2019-01-18  David Kilzer  <ddkilzer@apple.com>

        Switch remaining UIKit soft-linking in WebCore, WebKitLegacy over to UIKitSoftLink.{cpp,h}
        <https://webkit.org/b/193568>
        <rdar://problem/47381130>

        Reviewed by Alex Christensen.

        This does the following:
        - Removes local soft-linking of UIKit.
        - Switches to using PAL functions for soft-linking.

        * SourcesCocoa.txt: Add 4 source files to UnifiedSources.
        * WebCore.xcodeproj/project.pbxproj: Remove 4 sources files
        from WebCore target now that they are in UnifiedSources.
        * editing/cocoa/DictionaryLookup.mm:
        * editing/cocoa/HTMLConverter.mm: Move SPI to UIKitSPI.h. Remove
        declarations in public headers.
        (_fontForNameAndSize): Change use of getUIFontClass() to
        PlatformFontClass.
        (HTMLConverter::_processElement): Add cast here since compiler
        finds the wrong selector for +clearColor and thinks it returns a
        `CIColor *` object.  The same cast already exists in
        VideoFullscreenInterfaceAVKit.mm.
        * page/cocoa/SettingsBaseCocoa.mm:
        (WebCore::SettingsBase::defaultTextAutosizingEnabled):
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (-[WebMediaSessionHelper initWithCallback:]):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::exernalDeviceDisplayNameForPlayer):
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::showLetterpressedGlyphsWithAdvances):
        * platform/ios/DragImageIOS.mm:
        (WebCore::scaleDragImage):
        (WebCore::createDragImageFromImage):
        (WebCore::cascadeForSystemFont):
        (WebCore::createDragImageForLink):
        (WebCore::createDragImageForSelection):
        (WebCore::createDragImageForRange):
        (WebCore::createDragImageForColor):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::PlatformPasteboard):
        (WebCore::PlatformPasteboard::color):
        (WebCore::registerItemToPasteboard):
        (WebCore::PlatformPasteboard::setColor):
        * platform/ios/ThemeIOS.mm:
        (WebCore::ThemeIOS::userPrefersReducedMotion const):
        * platform/ios/UserAgentIOS.mm:
        (WebCore::isClassic):
        (WebCore::isClassicPad):
        (WebCore::isClassicPhone):
        * platform/ios/ValidationBubbleIOS.mm:
        (-[WebValidationBubbleTapRecognizer initWithPopoverController:]):
        (WebCore::ValidationBubble::ValidationBubble):
        (WebCore::ValidationBubble::show):
        (WebCore::fallbackViewController):
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (clearUIColor):
        (allocWebAVPictureInPicturePlayerLayerViewInstance):
        (WebAVPlayerLayerView_videoView):
        (fallbackViewController):
        (VideoFullscreenInterfaceAVKit::doSetup):
        * platform/ios/WebEvent.mm:
        (+[WebEvent modifierFlags]):
        * platform/ios/WebItemProviderPasteboard.mm:
        (allLoadableClasses):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::setUpFullscreen):
        * platform/network/mac/WebCoreURLResponse.mm: Add missing header
        after unified sources were updated.
        * rendering/RenderThemeIOS.mm:
        (WebCore::contentSizeCategoryDidChange):
        (WebCore::RenderThemeIOS::RenderThemeIOS):
        (WebCore::RenderThemeIOS::contentSizeCategory):
        (WebCore::RenderThemeIOS::systemColor const):
        (WebCore::attachmentActionColor):
        (WebCore::attachmentTitleColor):
        (WebCore::attachmentSubtitleColor):
        (WebCore::iconForAttachment):
        * testing/Internals.mm:
        (WebCore::Internals::userPrefersReducedMotion const):

2019-01-18  Antti Koivisto  <antti@apple.com>

        Implement asynchronous frame scrolling for iOS
        https://bugs.webkit.org/show_bug.cgi?id=193539
        <rdar://problem/47379873>

        Reviewed by Simon Fraser.

        This patch implements UIScrollView based frame scrolling on iOS, enabled by the "Async Frame Scrolling"
        internal setting (still off by default).

        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h:
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::scrollLayer const): Deleted.
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::setScrollPosition):

        Export ScrollingTreeFrameScrollingNodeIOS.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::visibleRectForLayerFlushing const):
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):
        (WebCore::RenderLayerCompositor::updateScrollLayerClipping):

        If we don't have a separate clip layer, just resize and position the scroll layer.

        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::ensureRootLayer):

        Use GraphicsLayer::Type::Scrolling as the scroll layer type when async frame scrolling is enabled.
        Don't create a separate clip layer since the scroll layer will handle clipping.

        * rendering/RenderLayerCompositor.h:

2019-01-18  Ali Juma  <ajuma@chromium.org>

        FetchResponse::url should return the empty string for tainted responses
        https://bugs.webkit.org/show_bug.cgi?id=193553

        Reviewed by Youenn Fablet.

        Check whether the response is tainted in FetchResponse::url, to match
        the behavior described in https://fetch.spec.whatwg.org/#concept-filtered-response-opaque.

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::url const):

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

        A track source should be unmuted whenever reenabled after setDirection changes
        https://bugs.webkit.org/show_bug.cgi?id=193554
        <rdar://problem/47366196>

        Reviewed by Eric Carlson.

        Ensure that track gets unmuted after being fired as part of track event.
        Test is triggering some existing issues with MediaPlayerPrivateMediaStreamAVFObjC.
        Given the enqueuing of samples happens in a different frame than the thread used to update media stream and the active video track,
        some enqueued samples might not be from the right active video track or there might be no active video track.

        Test: webrtc/video-setDirection.html

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::fireTrackEvent):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::requestNotificationWhenReadyForVideoData):

2019-01-18  Charlie Turner  <cturner@igalia.com>

        [GStreamer][EME][ClearKey] Request keys from CDMInstance rather than passing via bus messages
        https://bugs.webkit.org/show_bug.cgi?id=192229

        Reviewed by Xabier Rodriguez-Calvar.

        Covered by existing tests.

        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::parseLicenseFormat): There is a defect in some C++11
        compiles where they will copy this return value since the type
        doesn't exactly match. Force a move with WTFMove.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::dispatchDecryptionKey):
        Deleted. No longer used by anything.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h: Ditto.
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        Rename these methods to avoid "namespacing names".
        (webkit_media_clear_key_decrypt_class_init):
        (finalize):
        (handleKeyResponse): This is a temporary fix, we need some more
        reorganisation to be full driven by CDMInstance APIs for decryption.
        (findAndSetKey):
        (decrypt):
        (webKitMediaClearKeyDecryptorFinalize): Deleted.
        (webKitMediaClearKeyDecryptorHandleKeyResponse): Deleted.
        (webKitMediaClearKeyDecryptorFindAndSetKey): Deleted.
        (webKitMediaClearKeyDecryptorDecrypt): Deleted.
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp: Ditto.
        (webkit_media_common_encryption_decrypt_class_init):
        (finalize):
        (transformCaps):
        (transformInPlace):
        (isCDMInstanceAvailable):
        (sinkEventHandler):
        (queryHandler):
        (changeState):
        (setContext):
        (webKitMediaCommonEncryptionDecryptorFinalize): Deleted.
        (webkitMediaCommonEncryptionDecryptTransformCaps): Deleted.
        (webkitMediaCommonEncryptionDecryptTransformInPlace): Deleted.
        (webkitMediaCommonEncryptionDecryptIsCDMInstanceAvailable): Deleted.
        (webkitMediaCommonEncryptionDecryptSinkEventHandler): Deleted.
        (webkitMediaCommonEncryptionDecryptorQueryHandler): Deleted.
        (webKitMediaCommonEncryptionDecryptorChangeState): Deleted.
        (webKitMediaCommonEncryptionDecryptorSetContext): Deleted.
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.h:
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::attemptToDecryptWithLocalInstance):
        Deleted. No longer passing key information over bus messages.
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:

2019-01-18  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Collapsing through should not ignore floats.
        https://bugs.webkit.org/show_bug.cgi?id=193564

        Reviewed by Antti Koivisto.

        Float boxes prevent collapsing through.

        Test: fast/block/float/float-in-descendant-formatting-context.html

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginsCollapseThrough):

2019-01-18  Zalan Bujtas  <zalan@apple.com>

        [LFC] Do not skip float boxes that are not part of the current formatting context when computing bottom.
        https://bugs.webkit.org/show_bug.cgi?id=193562

        Reviewed by Antti Koivisto.

        The current floating context's (float) boxes could belong to descendant formatting contexts.
        We need to include them as well when computing height (bottom) (we essentially need to skip ancestor floats only).

        <div id=container style="overflow: hidden"><div>foo<div style="float: left">bar</div></div></div>
        While computing the height for "container", the float box needs to be taken into account even though
        it is part of another (descendant) formatting context (the inline formatting context established by its parent div).

        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::bottom const):
        * layout/floats/FloatingState.h:
        (WebCore::Layout::FloatingState::FloatItem::isDescendantOfFormattingRoot const):
        (WebCore::Layout::FloatingState::FloatItem::inFormattingContext const): Deleted.

2019-01-18  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Check for inflow children while computing height for block formatting context roots.
        https://bugs.webkit.org/show_bug.cgi?id=193555

        Reviewed by Antti Koivisto.

        This patch also extends areEssentiallyEqual to 0.125px to be able to match (essentially equal) inline runs. 

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::contentHeightForFormattingContextRoot):
        * layout/Verification.cpp:
        (WebCore::Layout::areEssentiallyEqual):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

2019-01-18  Yacine Bandou  <yacine.bandou@softathome.com>

        [WebAudio] Release the AudioDestination when uninitializing DefaultAudioDestinationNode
        https://bugs.webkit.org/show_bug.cgi?id=192590

        Reviewed by Philippe Normand.

        When we uninitialize DefaultAudioDestinationNode, the AudioDestination is stopped but not destroyed.

        On some platforms the resources are allocated and released with the AudioDestination, thus when we uninitialize
        DefaultAudioDestinationNode we don't release resources because the AudioDestination is not destroyed.

        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::uninitialize):

2019-01-18  Yacine Bandou  <yacine.bandou@softathome.com>

        [WebAudio] Call AudioContext::uninitialize() immediately when the AudioContext is stopped
        https://bugs.webkit.org/show_bug.cgi?id=192586

        Reviewed by Philippe Normand.

        When WebProcess is killed, AudioContext::uninitialize() is not called immediately in the stop so
        the AudioDestinationNode is not destroyed.

        In my case, I have a resource device manager, the output audio device is reserved when AudioDestinationNode
        is instantiated and it is released when AudioDestinationNode is destroyed, thus when the webprocess is killed,
        the resources leak.

        AudioContext::uninitialize() is not called immediately since r94608.
        This modification can now be reverted without regression in WebAudio tests.

        Test: webaudio/mediaelementaudiosourcenode-gc.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::stop):

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

        ScrollingCoordinator::scrollableAreaScrollLayerDidChange() can be removed
        https://bugs.webkit.org/show_bug.cgi?id=193559

        Reviewed by Antti Koivisto.

        ScrollingCoordinator::scrollableAreaScrollLayerDidChange() existed for CoordinatedGraphics,
        but the code that used it was removed in webkit.org/r229318 so we can remove it and
        code that calls it.

        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::willDestroyScrollableArea):
        (WebCore::ScrollingCoordinator::scrollableAreaScrollLayerDidChange): Deleted.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::willRemoveScrollingLayerWithBacking):
        (WebCore::RenderLayerCompositor::didAddScrollingLayer):
        (WebCore::RenderLayerCompositor::scrollingLayerDidChange): Deleted.
        * rendering/RenderLayerCompositor.h:

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

        [iOS] Content offset jumps erratically when autoscrolling near scroll view content inset areas
        https://bugs.webkit.org/show_bug.cgi?id=193494
        <rdar://problem/46859627>

        Reviewed by Simon Fraser and Tim Horton.

        When computing the content offset to scroll to when revealing a given rect in content coordinates, we currently
        just use the unobscured content rect. As a result, when scrolling to reveal a rect, we'll clamp the final scroll
        position such that only content is visible. For example, when asked to reveal the rect `(0, 0, 1, 1)`, we adjust
        the scroll position to be the origin.

        However, consider the case where a client (e.g. Mail on iOS) has added a content inset to the web view's scroll
        view. If we're asked to reveal a rect that is outside the content area but within a content inset, we will still
        end up clamping the scroll position to the unobscured rect. This manifests in a bug where selecting text and
        autoscrolling in iOS Mail compose while the scroll view is scrolled all the way to the top to reveal the To/Cc/
        Subject fields causes the content offset to jump to the origin, rather than staying at (0, -topContentInset).

        To fix this, we teach `RenderLayer::scrollRectToVisible` about content insets that are visible. Rather than use
        the content rects as-is, expand to encompass visible content insets as well. This ensures that revealing a
        position which is already visible won't cause us to scroll away the content inset area and only show the
        unobscured rect.

        Tests:  editing/selection/ios/autoscroll-with-top-content-inset.html
                fast/scrolling/ios/scroll-into-view-with-top-content-inset.html

        * page/FrameView.cpp:
        (WebCore::FrameView::unobscuredContentRectExpandedByContentInsets const):

        Introduce a helper method that expands the unobscured content rect to include surrounding content insets.

        * page/FrameView.h:
        * page/Page.h:
        (WebCore::Page::contentInsets const):
        (WebCore::Page::setContentInsets):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::getRectToExpose const):

2019-01-17  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r240124.

        This commit broke an internal build.

        Reverted changeset:

        "SDK_VARIANT build destinations should be separate from non-
        SDK_VARIANT builds"
        https://bugs.webkit.org/show_bug.cgi?id=189553
        https://trac.webkit.org/changeset/240124

2019-01-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: fix Xcode project file list after r239976
        https://bugs.webkit.org/show_bug.cgi?id=193474

        Reviewed by Timothy Hatcher.

        * WebCore.xcodeproj/project.pbxproj:

2019-01-17  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed WinCairo fix -- hundreds of tests crash after r240031.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::createCurlRequest):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::getCredential):

2019-01-17  John Wilander  <wilander@apple.com>

        Add infrastructure to enable/disable ITP Debug Mode through Preferences
        https://bugs.webkit.org/show_bug.cgi?id=193510
        <rdar://problem/47330969>

        Reviewed by Dean Jackson.

        No new tests. These changes are purely for settings/preferences.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setItpDebugModeEnabled):
        (WebCore::RuntimeEnabledFeatures::itpDebugModeEnabled const):
        (WebCore::RuntimeEnabledFeatures::setResourceLoadStatisticsDebugMode): Deleted.
        (WebCore::RuntimeEnabledFeatures::resourceLoadStatisticsDebugMode const): Deleted.
            Renamed.
        * page/Settings.yaml:
            Removed since this particular setting should not be persisted for privacy
            reasons.

2019-01-17  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/SDKVariant.xcconfig: Added.
        * Configurations/WebCore.xcconfig:

2019-01-17  Jer Noble  <jer.noble@apple.com>

        MediaPlayerPrivateAVFoundationObjC can return incorrect paused information
        https://bugs.webkit.org/show_bug.cgi?id=193499

        Reviewed by Eric Carlson.

        MediaPlayerPrivateAVFoundation uses rate() as an indicator of whether the player
        is paused or not. This is incorrect when playback is stalled waiting for more data.
        For MPPAVFObjC, use the timeControlStatus as a more accurate indicator of whether
        the player is playing.

        Now that we have correct play state information, we can remove the handlePlaybackCommand()
        path when playing remotely for a more direct approach of notifying the HTMLMediaElement
        that the play state has changed.

        Drive-by fix: Before throwing away the AVPlayer, clear its output context. This keeps
        remote devices from keeping the AVPlayer alive.

        Drive-by fix #2: The NullMediaPlayer should always return "true" for paused(), not "false",
        since it can't possibly play anything.

        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::paused const):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::platformPaused const):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformPaused const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::timeControlStatusDidChange):

2019-01-17  Jiewen Tan  <jiewen_tan@apple.com>

        [Mac] Add a new quirk to HTMLFormControlElement::isMouseFocusable
        https://bugs.webkit.org/show_bug.cgi?id=193478
        <rdar://problem/34368591>

        Reviewed by Brent Fulgham.

        By default in macOS, submit buttons (controls) are not focusable. WebKit follows this system convention
        as suggested by the spec: https://html.spec.whatwg.org/multipage/interaction.html#focusable-area. This
        is also the convention Firefox respects. However, Chrome doesn't. ceac.state.gov is by far the only
        website that assumes submit buttons are focusable, and will prohibit users from completing immigration
        forms, such as DS160 if buttons are not. To help immigrations, we decide to add a new quirk to
        HTMLFormControlElement::isMouseFocusable such that submit buttons are mouse focusable.

        This quirk is for ceac.state.gov specifically, and therefore no tests.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isMouseFocusable const):
        (WebCore::HTMLFormControlElement::needsSiteSpecificQuirks const):
        * html/HTMLFormControlElement.h:

2019-01-17  Alex Christensen  <achristensen@webkit.org>

        Fix WinCairo build after r240117
        https://bugs.webkit.org/show_bug.cgi?id=193529

        * PlatformWin.cmake:
        * platform/network/curl/SocketStreamHandleImplCurl.cpp:

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

        Add release logging for incoming and outgoing webrtc audio tracks
        https://bugs.webkit.org/show_bug.cgi?id=185545

        Reviewed by Eric Carlson.

        Add logging of audio tracks. When doing a WebRTC call,
        one log line is added each second for each audio track.
        Validated that logging is done through manual testing.

        Refactored code to use LogHelper and apply it to video sources as well.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addTrack):
        (WebCore::LibWebRTCMediaEndpoint::sourceFromNewReceiver):
        (WebCore::sourceFromNewReceiver): Deleted.
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * platform/mediastream/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::RealtimeIncomingAudioSource):
        (WebCore::RealtimeIncomingAudioSource::logChannel const):
        (WebCore::RealtimeIncomingAudioSource::logger const):
        * platform/mediastream/RealtimeIncomingAudioSource.h:
        (WebCore::RealtimeIncomingAudioSource::setLogger):
        * platform/mediastream/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource):
        (WebCore::RealtimeIncomingVideoSource::logChannel const):
        (WebCore::RealtimeIncomingVideoSource::logger const):
        * platform/mediastream/RealtimeIncomingVideoSource.h:
        (WebCore::RealtimeIncomingVideoSource::setLogger):
        * platform/mediastream/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::RealtimeOutgoingAudioSource):
        (WebCore::RealtimeOutgoingAudioSource::sendAudioFrames):
        (WebCore::RealtimeOutgoingAudioSource::logChannel const):
        (WebCore::RealtimeOutgoingAudioSource::logger const):
        * platform/mediastream/RealtimeOutgoingAudioSource.h:
        (WebCore::RealtimeOutgoingAudioSource::setLogger):
        * platform/mediastream/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::RealtimeOutgoingVideoSource):
        (WebCore::RealtimeOutgoingVideoSource::sendBlackFramesIfNeeded):
        (WebCore::RealtimeOutgoingVideoSource::sendOneBlackFrame):
        (WebCore::RealtimeOutgoingVideoSource::logChannel const):
        (WebCore::RealtimeOutgoingVideoSource::logger const):
        * platform/mediastream/RealtimeOutgoingVideoSource.h:
        (WebCore::RealtimeOutgoingVideoSource::setLogger):
        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp:
        (WebCore::RealtimeIncomingAudioSourceCocoa::OnData):
        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.h:
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferPool):
        (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferFromVideoFrame):
        (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame):
        * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp:
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp:
        (WebCore::RealtimeOutgoingVideoSourceCocoa::sampleBufferUpdated):
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.mm:
        (WebCore::RealtimeOutgoingVideoSourceCocoa::rotatePixelBuffer):

2019-01-17  Alex Christensen  <achristensen@webkit.org>

        Stop using NetworkStorageSession::storageSession in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=193529

        Reviewed by Tim Horton.

        Ownership of the map that NetworkStorageSession::storageSession searches needs to move to the WebKit/WebKitLegacy layer,
        so when WebCore used to look in this map it needs to call a client function to ask the layer above it for the storage object.
        I've called this client StorageSessionProvider::storageSession.  Right now it just looks in NetworkStorageSession::storageSession,
        but this added abstraction makes it possible to move the currently process-global map to be a member of the NetworkProcess object.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect):
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CookieJar.cpp:
        (WebCore::CookieJar::create):
        (WebCore::CookieJar::CookieJar):
        (WebCore::CookieJar::cookies const):
        (WebCore::CookieJar::setCookies):
        (WebCore::CookieJar::cookiesEnabled const):
        (WebCore::CookieJar::cookieRequestHeaderFieldValue const):
        (WebCore::CookieJar::getRawCookies const):
        (WebCore::CookieJar::deleteCookie):
        * loader/CookieJar.h:
        * loader/EmptyClients.cpp:
        (WebCore::pageConfigurationWithEmptyClients):
        * page/Page.h:
        * page/SocketProvider.cpp:
        (WebCore::SocketProvider::createSocketStreamHandle):
        * page/SocketProvider.h:
        * platform/network/NetworkingContext.h:
        * platform/network/SocketStreamHandleImpl.cpp:
        (WebCore::cookieDataForHandshake):
        (WebCore::SocketStreamHandleImpl::platformSendHandshake):
        * platform/network/StorageSessionProvider.h: Added.
        (WebCore::StorageSessionProvider::~StorageSessionProvider):
        * platform/network/cf/SocketStreamHandleImpl.h:
        (WebCore::SocketStreamHandleImpl::create):
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::SocketStreamHandleImpl):
        (WebCore::SocketStreamHandleImpl::getStoredCONNECTProxyCredentials):
        * platform/network/curl/SocketStreamHandleImpl.h:
        (WebCore::SocketStreamHandleImpl::create):
        * platform/network/soup/SocketStreamHandleImpl.h:
        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        (WebCore::SocketStreamHandleImpl::create):

2019-01-17  Jon Lee  <jonlee@apple.com>

        [EME] Remove Amazon Prime Video from quirks list
        https://bugs.webkit.org/show_bug.cgi?id=193514
        rdar://problem/47295330

        Reviewed by Jer Noble.

        * page/Quirks.cpp:
        (WebCore::Quirks::hasBrokenEncryptedMediaAPISupportQuirk const):

2019-01-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] An element with transform is a containing block for positioned descendants.
        https://bugs.webkit.org/show_bug.cgi?id=193534

        Reviewed by Antti Koivisto.

        "For elements whose layout is governed by the CSS box model, any value other than none for the transform
        property also causes the element to establish a containing block for all descendants."
        https://www.w3.org/TR/css-transforms-1/

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::containingBlock const):

2019-01-17  Simon Fraser  <simon.fraser@apple.com>

        ScrollingCoordinator: separate updating node geometry from node layers
        https://bugs.webkit.org/show_bug.cgi?id=193527

        Reviewed by Antti Koivisto.

        Updating scrolling tree node layers happens in a different code path from updating geometry;
        the former has to be post-flush, when GraphicsLayer has made tiled or structural layers.
        Geometry only needs to be updated after layout, and soon we'll do this via compositing updates.
        
        We can also clean up the ScrollingCoordinator API and have a single function that updates
        node layers (handling different node types), and separate functions for pushing viewport-constrained
        and scrolling node geometry.

        No observable behavior change.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::setNodeLayers):
        (WebCore::AsyncScrollingCoordinator::setScrollingNodeGeometry):
        (WebCore::AsyncScrollingCoordinator::setViewportConstraintedNodeGeometry):
        (WebCore::AsyncScrollingCoordinator::updateFrameScrollingNode): Deleted.
        (WebCore::AsyncScrollingCoordinator::updateOverflowScrollingNode): Deleted.
        (WebCore::AsyncScrollingCoordinator::updateNodeLayer): Deleted.
        (WebCore::AsyncScrollingCoordinator::updateNodeViewportConstraints): Deleted.
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::setNodeLayers):
        (WebCore::ScrollingCoordinator::setScrollingNodeGeometry):
        (WebCore::ScrollingCoordinator::setViewportConstraintedNodeGeometry):
        (WebCore::ScrollingCoordinator::updateNodeLayer): Deleted.
        (WebCore::ScrollingCoordinator::updateNodeViewportConstraints): Deleted.
        (WebCore::ScrollingCoordinator::updateFrameScrollingNode): Deleted.
        (WebCore::ScrollingCoordinator::updateOverflowScrollingNode): Deleted.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollCoordinationForThisFrame):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):
        * rendering/RenderLayerCompositor.h:

2019-01-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][Quirk] Take body padding and border into account when stretching height.
        https://bugs.webkit.org/show_bug.cgi?id=193528

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedInFlowHeight):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::verticalBorder const):
        (WebCore::Display::Box::horizontalBorder const):
        (WebCore::Display::Box::verticalPadding const):
        (WebCore::Display::Box::horizontalPadding const):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

2019-01-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] For height computation, the bottom edge of the last line box value should not include top border/padding
        https://bugs.webkit.org/show_bug.cgi?id=193520

        Reviewed by Antti Koivisto.

        This is similar to the other "10.6.3" cases. The bottom edge of the last inline box is in the coordinate systyem
        of the containing block's border box (and for content height computation it needs to be mapped to the containing block's content box instead).

        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):

2019-01-16  Simon Fraser  <simon.fraser@apple.com>

        Stub out scrolling tree classes for overflow scrolling nodes on macOS
        https://bugs.webkit.org/show_bug.cgi?id=193524

        Reviewed by Antti Koivisto.

        Add an empty implementation of ScrollingTreeOverflowScrollingNodeMac for macOS. Change
        ScrollingTreeMac::createScrollingTreeNode() to create these nodes.
        
        Minor refactor of RenderLayerCompositor::useCoordinatedScrollingForLayer() code to ask
        the scrolling coordinator if it can coordinate scrolling for this layer; no behavior
        change for existing code paths.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::coordinatesScrollingForOverflowLayer const):
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/mac/ScrollingStateFrameScrollingNodeMac.mm:
        * page/scrolling/mac/ScrollingTreeMac.cpp:
        (ScrollingTreeMac::createScrollingTreeNode):
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h: Copied from Source/WebCore/page/scrolling/mac/ScrollingStateFrameScrollingNodeMac.mm.
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm: Added.
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::create):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::ScrollingTreeOverflowScrollingNodeMac):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::~ScrollingTreeOverflowScrollingNodeMac):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::commitStateBeforeChildren):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::commitStateAfterChildren):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::updateLayersAfterAncestorChange):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::scrollPosition const):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::setScrollLayerPosition):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::updateLayersAfterDelegatedScroll):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::usesAsyncScrolling const):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::useCoordinatedScrollingForLayer const):
        * rendering/RenderLayerCompositor.h:

2019-01-16  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Update vertex-buffer-triangle-strip.html to actually use vertex buffer
        https://bugs.webkit.org/show_bug.cgi?id=193473

        Reviewed by Dean Jackson and Myles Maxfield.

        Also, switch to using the inputSlot instead of the shaderLocation field, as this seems more correct. 
        As of now I cannot determine an analog for WebGPU's shaderLocation in Metal. 

        Test: Covered by vertex-buffer-triangle-strip.html. No change in behavior.

        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::setInputStateForPipelineDescriptor): Use the inputSlot instead of shaderLocation as bufferIndex. 

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

        [WHLSL] Add the function stage checker
        https://bugs.webkit.org/show_bug.cgi?id=193479

        Reviewed by Dean Jackson and Robin Morisset.

        This is a translation of https://github.com/gpuweb/WHLSL/blob/master/Source/CheckNativeFuncStages.mjs into C++.

        No new tests because it isn't hooked up yet. Not enough of the compiler exists to have any meaningful sort
        of test. When enough of the compiler is present, I'll port the reference implementation's test suite.

        * Modules/webgpu/WHLSL/AST/WHLSLCallExpression.h:
        (WebCore::WHLSL::AST::CallExpression::function):
        * Modules/webgpu/WHLSL/WHLSLFunctionStageChecker.cpp: Added.
        (WebCore::WHLSL::FunctionStageChecker::FunctionStageChecker):
        (WebCore::WHLSL::checkFunctionStages):
        * Modules/webgpu/WHLSL/WHLSLFunctionStageChecker.h: Added.
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.cpp:
        (WebCore::WHLSL::Intrinsics::add):
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.h:
        (WebCore::WHLSL::Intrinsics::ddx const):
        (WebCore::WHLSL::Intrinsics::ddy const):
        (WebCore::WHLSL::Intrinsics::allMemoryBarrier const):
        (WebCore::WHLSL::Intrinsics::deviceMemoryBarrier const):
        (WebCore::WHLSL::Intrinsics::groupMemoryBarrier const):
        (WebCore::WHLSL::Intrinsics::WTF_ARRAY_LENGTH):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

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

        [WHLSL] Delete the 'restricted' keyword
        https://bugs.webkit.org/show_bug.cgi?id=193469

        Reviewed by Dean Jackson and Robin Morisset.

        This change mirrors https://github.com/gpuweb/WHLSL/pull/304 in the reference implementation.

        No new tests because it isn't hooked up yet. Not enough of the compiler exists to have any meaningful sort
        of test. When enough of the compiler is present, I'll port the reference implementation's test suite.

        * Modules/webgpu/WHLSL/AST/WHLSLFunctionDefinition.h:
        (WebCore::WHLSL::AST::FunctionDefinition::FunctionDefinition):
        (WebCore::WHLSL::AST::FunctionDefinition::block):
        (WebCore::WHLSL::AST::FunctionDefinition::restricted const): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLNativeFunctionDeclaration.h:
        (WebCore::WHLSL::AST::NativeFunctionDeclaration::NativeFunctionDeclaration):
        (WebCore::WHLSL::AST::NativeFunctionDeclaration::restricted const): Deleted.
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::resolveWithOperatorAnderIndexer):
        (WebCore::WHLSL::resolveWithOperatorLength):
        (WebCore::WHLSL::resolveWithReferenceComparator):
        * Modules/webgpu/WHLSL/WHLSLResolveOverloadImpl.cpp:
        (WebCore::WHLSL::resolveFunctionOverloadImpl):
        * Modules/webgpu/WHLSL/WHLSLSynthesizeArrayOperatorLength.cpp:
        (WebCore::WHLSL::synthesizeArrayOperatorLength):
        * Modules/webgpu/WHLSL/WHLSLSynthesizeConstructors.cpp:
        (WebCore::WHLSL::synthesizeConstructors):
        * Modules/webgpu/WHLSL/WHLSLSynthesizeEnumerationFunctions.cpp:
        (WebCore::WHLSL::synthesizeEnumerationFunctions):
        * Modules/webgpu/WHLSL/WHLSLSynthesizeStructureAccessors.cpp:
        (WebCore::WHLSL::synthesizeStructureAccessors):

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

        [WHLSL] Implement the recursion checker
        https://bugs.webkit.org/show_bug.cgi?id=193436

        Reviewed by Saam Barati.

        This is a translation of https://github.com/gpuweb/WHLSL/blob/master/Source/RecursionChecker.mjs into C++.

        No new tests because it isn't hooked up yet. Not enough of the compiler exists to have any meaningful sort
        of test. When enough of the compiler is present, I'll port the reference implementation's test suite.

        * Modules/webgpu/WHLSL/AST/WHLSLCallExpression.h:
        (WebCore::WHLSL::AST::CallExpression::function):
        * Modules/webgpu/WHLSL/WHLSLRecursionChecker.cpp: Copied from Source/WebCore/Modules/webgpu/WHLSL/WHLSLRecursiveTypeChecker.cpp.
        (WebCore::WHLSL::checkRecursion):
        * Modules/webgpu/WHLSL/WHLSLRecursionChecker.h: Added.
        * Modules/webgpu/WHLSL/WHLSLRecursiveTypeChecker.cpp:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

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

        [WHLSL] Add the literal type checker
        https://bugs.webkit.org/show_bug.cgi?id=193430

        Reviewed by Dean Jackson.

        This is a translation of https://github.com/gpuweb/WHLSL/blob/master/Source/LiteralTypeChecker.mjs into C++.

        No new tests because it isn't hooked up yet. Not enough of the compiler exists to have any meaningful sort
        of test. When enough of the compiler is present, I'll port the reference implementation's test suite.

        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.h:
        (WebCore::WHLSL::AST::FloatLiteralType::value const):
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.h:
        (WebCore::WHLSL::AST::IntegerLiteralType::value const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.h:
        (WebCore::WHLSL::AST::UnsignedIntegerLiteralType::value const):
        * Modules/webgpu/WHLSL/WHLSLLiteralTypeChecker.cpp: Added.
        (WebCore::WHLSL::getNativeTypeDeclaration):
        (WebCore::WHLSL::LiteralTypeChecker::visit):
        (WebCore::WHLSL::checkLiteralTypes):
        * Modules/webgpu/WHLSL/WHLSLLiteralTypeChecker.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.h.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-01-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Inflow non-replaced used width should not be negative.
        https://bugs.webkit.org/show_bug.cgi?id=193495

        Reviewed by Antti Koivisto.

        min-width (initial value 0) enforces non-negative used width. 

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin const):

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

        [WHLSL] Add a handwritten parser
        https://bugs.webkit.org/show_bug.cgi?id=192355

        Reviewed by Dean Jackson.

        The parser is a mechanical representation of WHLSL's ANTLR grammar at
        https://github.com/gpuweb/WHLSL/blob/master/Spec/WHLSL.g4. The parser
        uses Expected<> to return an appropriate Error string when parsing fails.

        This patch doesn't include the AST nodes themselves - those are in
        https://bugs.webkit.org/show_bug.cgi?id=192991. I split up the patch to
        aid easier reviewing.

        No new tests because the parser isn't hooked up yet.

        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::Parser):
        (WebCore::WHLSL::Parser::parse):
        (WebCore::WHLSL::Parser::fail):
        (WebCore::WHLSL::Parser::peek):
        (WebCore::WHLSL::Parser::tryType):
        (WebCore::WHLSL::Parser::tryTypes):
        (WebCore::WHLSL::Parser::consumeType):
        (WebCore::WHLSL::Parser::consumeTypes):
        (WebCore::WHLSL::digitValue):
        (WebCore::WHLSL::intLiteralToInt):
        (WebCore::WHLSL::uintLiteralToUint):
        (WebCore::WHLSL::floatLiteralToFloat):
        (WebCore::WHLSL::Parser::consumeIntegralLiteral):
        (WebCore::WHLSL::Parser::consumeNonNegativeIntegralLiteral):
        (WebCore::WHLSL::recognizeSimpleUnsignedInteger):
        (WebCore::WHLSL::Parser::parseConstantExpression):
        (WebCore::WHLSL::Parser::parseTypeArgument):
        (WebCore::WHLSL::Parser::parseTypeArguments):
        (WebCore::WHLSL::Parser::parseTypeSuffixAbbreviated):
        (WebCore::WHLSL::Parser::parseTypeSuffixNonAbbreviated):
        (WebCore::WHLSL::Parser::parseAddressSpaceType):
        (WebCore::WHLSL::Parser::parseNonAddressSpaceType):
        (WebCore::WHLSL::Parser::parseType):
        (WebCore::WHLSL::Parser::parseTypeDefinition):
        (WebCore::WHLSL::Parser::parseBuiltInSemantic):
        (WebCore::WHLSL::Parser::parseResourceSemantic):
        (WebCore::WHLSL::Parser::parseSpecializationConstantSemantic):
        (WebCore::WHLSL::Parser::parseStageInOutSemantic):
        (WebCore::WHLSL::Parser::parseSemantic):
        (WebCore::WHLSL::Parser::parseQualifiers):
        (WebCore::WHLSL::Parser::parseStructureElement):
        (WebCore::WHLSL::Parser::parseStructureDefinition):
        (WebCore::WHLSL::Parser::parseEnumerationDefinition):
        (WebCore::WHLSL::Parser::parseEnumerationMember):
        (WebCore::WHLSL::Parser::parseNativeTypeDeclaration):
        (WebCore::WHLSL::Parser::parseNumThreadsFunctionAttribute):
        (WebCore::WHLSL::Parser::parseAttributeBlock):
        (WebCore::WHLSL::Parser::parseParameter):
        (WebCore::WHLSL::Parser::parseParameters):
        (WebCore::WHLSL::Parser::parseFunctionDefinition):
        (WebCore::WHLSL::Parser::parseEntryPointFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseRegularFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseOperatorFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseNativeFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseBlock):
        (WebCore::WHLSL::Parser::parseBlockBody):
        (WebCore::WHLSL::Parser::parseIfStatement):
        (WebCore::WHLSL::Parser::parseSwitchStatement):
        (WebCore::WHLSL::Parser::parseSwitchCase):
        (WebCore::WHLSL::Parser::parseForLoop):
        (WebCore::WHLSL::Parser::parseWhileLoop):
        (WebCore::WHLSL::Parser::parseDoWhileLoop):
        (WebCore::WHLSL::Parser::parseVariableDeclaration):
        (WebCore::WHLSL::Parser::parseVariableDeclarations):
        (WebCore::WHLSL::Parser::parseStatement):
        (WebCore::WHLSL::Parser::parseEffectfulExpression):
        (WebCore::WHLSL::Parser::parseEffectfulAssignment):
        (WebCore::WHLSL::Parser::parseEffectfulPrefix):
        (WebCore::WHLSL::Parser::parseEffectfulSuffix):
        (WebCore::WHLSL::Parser::parseLimitedSuffixOperator):
        (WebCore::WHLSL::Parser::parseSuffixOperator):
        (WebCore::WHLSL::Parser::parseExpression):
        (WebCore::WHLSL::Parser::parseTernaryConditional):
        (WebCore::WHLSL::Parser::parseAssignment):
        (WebCore::WHLSL::Parser::parsePossibleTernaryConditional):
        (WebCore::WHLSL::Parser::parsePossibleLogicalBinaryOperation):
        (WebCore::WHLSL::Parser::parsePossibleRelationalBinaryOperation):
        (WebCore::WHLSL::Parser::parsePossibleShift):
        (WebCore::WHLSL::Parser::parsePossibleAdd):
        (WebCore::WHLSL::Parser::parsePossibleMultiply):
        (WebCore::WHLSL::Parser::parsePossiblePrefix):
        (WebCore::WHLSL::Parser::parsePossibleSuffix):
        (WebCore::WHLSL::Parser::parseCallExpression):
        (WebCore::WHLSL::Parser::parseTerm):
        * Modules/webgpu/WHLSL/WHLSLParser.h:
        (WebCore::WHLSL::Parser::Error::Error):
        (WebCore::WHLSL::Parser::backtrackingScope):
        (WebCore::WHLSL::Parser::SuffixExpression::SuffixExpression):
        (WebCore::WHLSL::Parser::SuffixExpression::operator bool const):

2019-01-16  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: UniqueIDBDatabase should not be freed if the database task queue is not empty.
        https://bugs.webkit.org/show_bug.cgi?id=193093

        Reviewed by Brady Eidson.

        performUnconditionalDeleteBackingStore killed the database task queue immediately, but performPrefetchCursor
        task may be scheduled behind performUnconditionalDeleteBackingStore on database thread.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::shutdownForClose):
        (WebCore::IDBServer::UniqueIDBDatabase::performPrefetchCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::isDoneWithHardClose):

2019-01-16  Alex Christensen  <achristensen@webkit.org>

        Internal build fix.

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::layerContentsFormat):

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

        ServiceWorkerContainer is leaking due to a ref cycle
        https://bugs.webkit.org/show_bug.cgi?id=193462
        <rdar://problem/47026303>

        Reviewed by Brady Eidson.

        ServiceWorkerContainer keeps a reference to its ready promise.
        The ready promise keeps a ref to its value which is a ServiceWorkerRegistration.
        ServiceWorkerRegistration keeps a ref to ServiceWorkerContainer.

        To break the reference cycle, set the ready promise to zero when ServiceWorkerContainer is stopped.

        Covered by imported/w3c/web-platform-tests/service-workers/service-worker/ready.https.html no longer leaking.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::stop):

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

        Make didCommitChangesForLayer() explicitly about the platform layer changing because of tile/non-tile swapping
        https://bugs.webkit.org/show_bug.cgi?id=193290

        Reviewed by Tim Horton.

        RenderLayerCompositor::didFlushChangesForLayer() triggers updates scrolling tree nodes for
        the flushed layer, but it's not clear what has changed at this point.

        didCommitChangesForLayer()/didFlushChangesForLayer() were added to explicitly handle the
        case where the underlying platform layer for a GraphicsLayer changes because the layer swaps
        between tiled and non-tiled, and structural layer changes; we need to push the new layer to
        the scrolling tree because it operates on platform layers. So the only work that
        didFlushChangesForLayer() should do is to update layers on scrolling tree nodes; it doesn't
        need to do any geometry updating. Move towards that goal by renaming this callback to
        didChangePlatformLayerForLayer() to make its function more explicit.

        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::didChangePlatformLayerForLayer):
        (WebCore::GraphicsLayerClient::didCommitChangesForLayer const): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::flushCompositingStateForThisLayerOnly):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::didChangePlatformLayerForLayer):
        (WebCore::RenderLayerBacking::didCommitChangesForLayer const): Deleted.
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::didChangePlatformLayerForLayer):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::didChangePlatformLayerForLayer):
        (WebCore::RenderLayerCompositor::didFlushChangesForLayer): Deleted.
        (WebCore::RenderLayerCompositor::didCommitChangesForLayer const): Deleted.
        (WebCore::LegacyWebKitScrollingLayerCoordinator::didFlushChangesForLayer): Deleted.
        * rendering/RenderLayerCompositor.h:

2019-01-16  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) View becomes blank after click a cross-site download link
        https://bugs.webkit.org/show_bug.cgi?id=193361
        <rdar://problem/47099573>

        Reviewed by Geoffrey Garen.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        When restoring from PageCache, make sure we notify the client that the load was committed
        *before* we tell it that the navigation is complete. This would confuse the ProvisionalPageProxy
        logic in the UIProcess.

2019-01-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: extend overlay element bounds lines to the right/below as well
        https://bugs.webkit.org/show_bug.cgi?id=193336

        Reviewed by Matt Baker.

        This patch is purely a visual change for WebInspector, and doesn't affect anything else.

        * inspector/InspectorOverlayPage.js:
        (_drawBounds):

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

        Prevent WorkerRunLoop::runInMode from spinning in nested cases
        https://bugs.webkit.org/show_bug.cgi?id=193359
        <rdar://problem/46345353>

        Reviewed by Joseph Pecoraro.

        Speculative fix for some cases where service worker is spinning and consuming a lot of CPU.
        The hypothesis is that:
        - Service Worker is checking for its script freshness through WorkerScriptLoader.
        This triggers the worker run loop to be nested.
        - The run loop timer is active and needs to fire immediately.
        The hypothesis is that this happens in some cases like restarting a device after sleep mode.

        WorkerRunLoop::runInMode will then compute a 0 timeout value for getting a message.
        This will trigger a timeout while waiting for the message queue.
        Since the run loop is nested,  the run loop timer will not be able to fire,
        and it will keep ask to fire immediately.
        runInMode will return timeout as a result and WorkerRunLoop::run will call it immediately.

        The fix is to prevent the shared timer to fire only when the run loop is being debugged through the web inspector.
        We compute this by checking the run loop mode as debuggerMode().
        Did some refactoring by introducing helper routines for running the loop and posting task in debugger mode.

        * inspector/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::runEventLoopWhilePaused):
        * workers/WorkerInspectorProxy.cpp:
        (WebCore::WorkerInspectorProxy::resumeWorkerIfPaused):
        (WebCore::WorkerInspectorProxy::connectToWorkerInspectorController):
        (WebCore::WorkerInspectorProxy::disconnectFromWorkerInspectorController):
        (WebCore::WorkerInspectorProxy::sendMessageToWorkerInspectorController):
        * workers/WorkerRunLoop.cpp:
        (WebCore::ModePredicate::ModePredicate):
        (WebCore::WorkerRunLoop::WorkerRunLoop):
        (WebCore::debuggerMode):
        (WebCore::RunLoopSetup::RunLoopSetup):
        (WebCore::RunLoopSetup::~RunLoopSetup):
        (WebCore::WorkerRunLoop::run):
        (WebCore::WorkerRunLoop::runInDebuggerMode):
        (WebCore::WorkerRunLoop::runInMode):
        (WebCore::WorkerRunLoop::Task::performTask):
        * workers/WorkerRunLoop.h:
        (WebCore::WorkerRunLoop::isBeingDebugged const):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::startRunningDebuggerTasks):
        * workers/service/context/ServiceWorkerInspectorProxy.cpp:
        (WebCore::ServiceWorkerInspectorProxy::connectToWorker):
        (WebCore::ServiceWorkerInspectorProxy::disconnectFromWorker):
        (WebCore::ServiceWorkerInspectorProxy::sendMessageToWorker):

2019-01-16  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: leak WebIDBConnectionToClient for retain cycle
        https://bugs.webkit.org/show_bug.cgi?id=193097
        <rdar://problem/46899601>

        Reviewed by David Kilzer.

        Fix API test failure after r239887. After removing the retain cycle, IDBConnectionToClient will no longer live 
        forever so make sure it is not destructed before UniqueIDBDatabaseConnection unregisters itself.

        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::~UniqueIDBDatabaseConnection):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::fireVersionChangeEvent):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didAbortTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didCommitTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didCreateObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didDeleteObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didRenameObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didClearObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didCreateIndex):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didDeleteIndex):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didRenameIndex):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:

2019-01-16  Antti Koivisto  <antti@apple.com>

        Add more assertions to find root cause for release assert hit in StyleResolver
        https://bugs.webkit.org/show_bug.cgi?id=193488
        <rdar://problem/30983040>

        Reviewed by Zalan Bujtas.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::~StyleResolver):

        Release assert we are not resolving tree style.

        * dom/Document.cpp:
        (WebCore::Document::setIsResolvingTreeStyle):
        * dom/Document.h:
        (WebCore::Document::isResolvingTreeStyle const):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::Scope::Scope):
        (WebCore::Style::TreeResolver::Scope::~Scope):

        Set isResolvingTreeStyle bit when we have a tree resolver scope.

2019-01-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][Out-of-flow] Set used vertical margin values when top/height/bottom are non-auto.
        https://bugs.webkit.org/show_bug.cgi?id=193470

        Reviewed by Antti Koivisto.

        Non-auto vertical margin values (which is mostly the case) should be set as used values.

        Test: fast/block/block-only/non-auto-top-bottom-height-with-margins.html

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):

2019-01-16  Alan Kinsley  <zalan@apple.com>

        [LFC] Adjust margin box verification.
        https://bugs.webkit.org/show_bug.cgi?id=193482

        Reviewed by Antti Koivisto.

        In certain cases, like out-of-flow boxes with margin auto, marginBoxRect() returns 0. It's clearly incorrect,
        so let's check the individual margin values instead (and at this point we know that all other boxes match).

        Test: fast/block/block-only/non-auto-top-bottom-height-with-auto-margins.html

        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBlockBoxInformationIfNeeded):

2019-01-16  Zan Dobersek  <zdobersek@igalia.com>

        [FreeType] Cache the zero-width space glyph in GlyphPage::fill()
        https://bugs.webkit.org/show_bug.cgi?id=193485

        Reviewed by Carlos Garcia Campos.

        In FreeType's implementation of GlyphPage::fill(), we can cache the
        zero-width space glyph upon first retrieval through the
        FcFreeTypeCharIndex() entrypoint, avoiding any subsequent calls
        for other ignorable characters.

        * platform/graphics/freetype/GlyphPageTreeNodeFreeType.cpp:
        (WebCore::GlyphPage::fill):

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

        [WHLSL] Add the high zombie finder
        https://bugs.webkit.org/show_bug.cgi?id=193432

        Reviewed by Robin Morisset and Saam Barati.

        This is a translation of https://github.com/gpuweb/WHLSL/blob/master/Source/HighZombieFinder.mjs into C++.

        No new tests because it isn't hooked up yet. Not enough of the compiler exists to have any meaningful sort
        of test. When enough of the compiler is present, I'll port the reference implementation's test suite.

        * Modules/webgpu/WHLSL/WHLSLHighZombieFinder.cpp: Added.
        (WebCore::WHLSL::findHighZombies):
        * Modules/webgpu/WHLSL/WHLSLHighZombieFinder.h: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-01-15  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed WinCairo build fix.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::createCurlRequest):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::getCredential):

2019-01-15  Alex Christensen  <achristensen@webkit.org>

        Reduce use of NetworkStorageSession::defaultStorageSession in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=193368

        Reviewed by Geoff Garen.

        The NetworkStorageSession ownership needs to move to the WebKit/WebKitLegacy layer instead of being a process-global static map.

        * loader/EmptyClients.cpp:
        * platform/network/CredentialStorage.cpp:
        (WebCore::CredentialStorage::defaultCredentialStorage): Deleted.
        * platform/network/CredentialStorage.h:
        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::switchToNewTestingSession):
        (WebCore::NetworkStorageSession::ensureSession):
        * platform/network/cf/NetworkStorageSessionCFNetWin.cpp:
        (WebCore::createPrivateStorageSession):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::getCredential):

2019-01-15  Ryosuke Niwa  <rniwa@webkit.org>

        VisualViewport API should be updated upon opening of keyboard
        https://bugs.webkit.org/show_bug.cgi?id=193475

        Reviewed by Simon Fraser.

        Added a function to update the visual viewport API and schedule a resize event to FrameView.

        Test: fast/visual-viewport/ios/resize-event-for-keyboard.html

        * page/FrameView.cpp:
        (WebCore::FrameView::didUpdateViewportOverrideRects):
        * page/FrameView.h:

2019-01-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix build after r240018
        https://bugs.webkit.org/show_bug.cgi?id=193434

        Unreviewed.

        * Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp:
        (WebCore::WHLSL::checkLoops):
        (WebCore::WHLSL::findHighZombies): Deleted.
        * Modules/webgpu/WHLSL/WHLSLLoopChecker.h:

2019-01-15  Megan Gardner  <megan_gardner@apple.com>

        Add Reveal support in iOSMac
        https://bugs.webkit.org/show_bug.cgi?id=193408
        <rdar://problem/47300699>

        Reviewed by Tim Horton.

        iOSMac and Reveal are currently not testable.

        Add support for the reveal SPI specifically for iOSMac.
        Show the controller when called, and implement the delegate to 
        correctly re-paint the content with the auto-generated highlight from
        the reveal framework.

        * Configurations/WebCore.xcconfig:
        * editing/cocoa/DictionaryLookup.mm:
        (-[WebRevealHighlight initWithHighlightRect:view:]):
        (-[WebRevealHighlight setImage:]):
        (-[WebRevealHighlight highlightRectsForItem:]):
        (-[WebRevealHighlight startHighlightingItem:]):
        (-[WebRevealHighlight highlightItem:withProgress:]):
        (-[WebRevealHighlight completeHighlightingItem:]):
        (-[WebRevealHighlight stopHighlightingItem:]):
        (-[WebRevealHighlight highlightRangeChangedForItem:]):
        (-[WebRevealHighlight highlighting]):
        (-[WebRevealHighlight drawHighlightContentForItem:context:]):
        (WebCore::showPopupOrCreateAnimationController):
        (WebCore::DictionaryLookup::showPopup):
        * editing/mac/DictionaryLookup.h:

2019-01-15  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Add ending namespace comments to make namespace boundaries more clear
        https://bugs.webkit.org/show_bug.cgi?id=193471

        Reviewed by Saam Barati.

        This patch only adds the comments to the files that are too long to fit on a single screen in my editor.

        No new tests because there is no behavior change.

        * Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp:
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        * Modules/webgpu/WHLSL/WHLSLGatherEntryPointItems.cpp:
        * Modules/webgpu/WHLSL/WHLSLGatherEntryPointItems.h:
        * Modules/webgpu/WHLSL/WHLSLInferTypes.cpp:
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.cpp:
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.h:
        * Modules/webgpu/WHLSL/WHLSLLexer.cpp:
        * Modules/webgpu/WHLSL/WHLSLLexer.h:
        * Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp:
        * Modules/webgpu/WHLSL/WHLSLNameContext.cpp:
        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:
        * Modules/webgpu/WHLSL/WHLSLNameResolver.h:
        * Modules/webgpu/WHLSL/WHLSLParser.h:
        * Modules/webgpu/WHLSL/WHLSLProgram.h:
        * Modules/webgpu/WHLSL/WHLSLRecursiveTypeChecker.cpp:
        * Modules/webgpu/WHLSL/WHLSLResolveOverloadImpl.cpp:
        * Modules/webgpu/WHLSL/WHLSLSynthesizeArrayOperatorLength.cpp:
        * Modules/webgpu/WHLSL/WHLSLSynthesizeConstructors.cpp:
        * Modules/webgpu/WHLSL/WHLSLSynthesizeEnumerationFunctions.cpp:
        * Modules/webgpu/WHLSL/WHLSLSynthesizeStructureAccessors.cpp:
        * Modules/webgpu/WHLSL/WHLSLVisitor.cpp:
        * Modules/webgpu/WHLSL/WHLSLVisitor.h:

2019-01-15  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Implement the loop checker
        https://bugs.webkit.org/show_bug.cgi?id=193434

        Reviewed by Saam Barati.

        This is a translation of https://github.com/gpuweb/WHLSL/blob/master/Source/LoopChecker.mjs into C++.

        No new tests because it isn't hooked up yet. Not enough of the compiler exists to have any meaningful sort
        of test. When enough of the compiler is present, I'll port the reference implementation's test suite.

        * Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp: Added.
        (WebCore::WHLSL::findHighZombies):
        * Modules/webgpu/WHLSL/WHLSLLoopChecker.h: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

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

        Unreviewed, rolling out r239993, r239995, r239997, and
        r239999.

        Caused assertions under
        ViewGestureController::disconnectFromProcess()

        Reverted changesets:

        "Regression(PSON) View becomes blank after click a cross-site
        download link"
        https://bugs.webkit.org/show_bug.cgi?id=193361
        https://trac.webkit.org/changeset/239993

        "Unreviewed iOS build fix after r239993."
        https://trac.webkit.org/changeset/239995

        "Fix iOS build after r239993"
        https://bugs.webkit.org/show_bug.cgi?id=193361
        https://trac.webkit.org/changeset/239997

        "Unreviewed, revert part of r239997 as it is not needed to fix
        the build."
        https://trac.webkit.org/changeset/239999

2019-01-15  Alex Christensen  <achristensen@webkit.org>

        Stop using CookiesStrategy
        https://bugs.webkit.org/show_bug.cgi?id=161106

        Reviewed by Don Olmstead and Antti Koivisto.

        CookiesStrategy is process-global and makes it difficult to switch NetworkStorageSession from having a process-global map.
        Instead, use a CookieJar object in the WebProcess.  This has the additional benefit of making it more clear which code
        is used in the WebProcess and which code is used in the NetworkProcess.

        * Modules/beacon/NavigatorBeacon.cpp:
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::processBuffer):
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientHandshakeRequest const):
        (WebCore::WebSocketHandshake::clientHandshakeCookieRequestHeaderFieldProxy const):
        * WebCore.xcodeproj/project.pbxproj:
        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::requestStyleSheet):
        * dom/Document.cpp:
        (WebCore::Document::cookie):
        (WebCore::Document::setCookie):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerGetRawCookies const):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::deleteCookie):
        * loader/CookieJar.cpp:
        (WebCore::CookieJar::shouldIncludeSecureCookies):
        (WebCore::CookieJar::sameSiteInfo):
        (WebCore::CookieJar::create):
        (WebCore::CookieJar::cookies const):
        (WebCore::CookieJar::cookieRequestHeaderFieldProxy):
        (WebCore::CookieJar::setCookies):
        (WebCore::CookieJar::cookiesEnabled const):
        (WebCore::CookieJar::cookieRequestHeaderFieldValue const):
        (WebCore::CookieJar::getRawCookies const):
        (WebCore::CookieJar::deleteCookie):
        (WebCore::shouldIncludeSecureCookies): Deleted.
        (WebCore::sameSiteInfo): Deleted.
        (WebCore::cookies): Deleted.
        (WebCore::cookieRequestHeaderFieldProxy): Deleted.
        (WebCore::setCookies): Deleted.
        (WebCore::cookiesEnabled): Deleted.
        (WebCore::cookieRequestHeaderFieldValue): Deleted.
        (WebCore::getRawCookies): Deleted.
        (WebCore::deleteCookie): Deleted.
        * loader/CookieJar.h:
        * loader/EmptyClients.cpp:
        (WebCore::pageConfigurationWithEmptyClients):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):
        * 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):
        (WebCore::CachedResource::setResponse):
        (WebCore::CachedResource::varyHeaderValuesMatch):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::cookieJar const):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::updateCachedResourceWithCurrentRequest):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::revalidateResource):
        (WebCore::CachedResourceLoader::loadResource):
        * 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:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::addImageToCache):
        * loader/cache/MemoryCache.h:
        * page/Navigator.cpp:
        (WebCore::Navigator::cookieEnabled const):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::cookieJar):
        * page/PageConfiguration.cpp:
        (WebCore::PageConfiguration::PageConfiguration):
        * page/PageConfiguration.h:
        * platform/CookiesStrategy.h: Removed.
        * platform/PlatformStrategies.h:
        (WebCore::PlatformStrategies::cookiesStrategy): Deleted.
        * platform/network/CacheValidation.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::collectVaryingRequestHeaders):
        (WebCore::verifyVaryingRequestHeaders):
        * platform/network/CacheValidation.h:
        * platform/network/CookieRequestHeaderFieldProxy.h:
        * platform/network/cf/NetworkStorageSessionCFNetWin.cpp:
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        * platform/network/curl/ResourceHandleCurl.cpp:
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::updateSnapshot):
        * testing/Internals.cpp:
        (WebCore::Internals::getCookies const):

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

        Animations should only trigger layer recomposite when necessary
        https://bugs.webkit.org/show_bug.cgi?id=193450

        Reviewed by Antoine Quint.

        Animations only need to trigger compositing updates when their states change in a way
        that affects compositing. RenderLayerCompositor::requiresCompositingForAnimation() checks for
        running animations of properties that can be accelerated, so this patch fixes the legacy
        animation logic to only set 'shouldRecompositeLayer' in TreeResolver::createAnimatedElementUpdate()
        when the running state of such an animation changes.

        ImplicitAnimation::animate() and KeyframeAnimation::animate() now return OptionSet<AnimateChange>.
        This contains information about whether the running state changed, so CompositeAnimation::animate()
        asks about whether the running state of an accelerated property changed, and returns this in
        the AnimationUpdate result.

        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::isPausedState):
        (WebCore::AnimationBase::isRunningState):
        (WebCore::AnimationBase::inPausedState const):
        (WebCore::AnimationBase::inRunningState const):
        (WebCore::AnimationBase::isAnimatingProperty const):
        * page/animation/CSSAnimationController.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::animate):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate):
        (WebCore::ImplicitAnimation::affectsAcceleratedProperty const):
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        (WebCore::KeyframeAnimation::animate):
        (WebCore::KeyframeAnimation::computeStackingContextImpact): Deleted.
        * page/animation/KeyframeAnimation.h:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):

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

        Clean up code related to the updating of Dashboard and touch event regions
        https://bugs.webkit.org/show_bug.cgi?id=193460

        Reviewed by Zalan Bujtas.

        In preparation for layout testing that can count the number of event region
        updates, move the code related to updating "annotated" (Dashboard) regions, and
        touch event regions into bottleneck functions in Document.
        
        Updating these two kinds of regions is generally similar, but there are some code paths
        that eagerly update annotated regions.

        No behavior change.

        * dom/Document.cpp:
        (WebCore::Document::updateAnnotatedRegions): Moved from FrameView.
        (WebCore::Document::invalidateRenderingDependentRegions):
        (WebCore::Document::invalidateScrollbarDependentRegions):
        (WebCore::Document::updateZOrderDependentRegions):
        * dom/Document.h:
        (WebCore::Document::setAnnotatedRegionsDirty):
        (WebCore::Document::annotatedRegionsDirty const):
        (WebCore::Document::hasAnnotatedRegions const):
        * page/FrameView.cpp:
        (WebCore::FrameView::didLayout):
        (WebCore::FrameView::didPaintContents):
        (WebCore::FrameView::updateAnnotatedRegions): Deleted.
        * page/FrameView.h:
        * rendering/RenderElement.cpp: Drive-by header cleanup.
        (WebCore::RenderElement::styleWillChange):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        (WebCore::RenderLayer::updateScrollbarsAfterLayout):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::setHasVerticalScrollbar):

2019-01-15  David Kilzer  <ddkilzer@apple.com>

        Let Xcode have its way with the WebCore project

        * WebCore.xcodeproj/project.pbxproj:
        - Change the lastKnownFileType for *.gperf and *.idl files from
          "file" to "text".
        - Resort source files into UUID order.

2019-01-15  Youenn Fablet  <youenn@apple.com>

        Correctly handle rotation for local video playback
        https://bugs.webkit.org/show_bug.cgi?id=193412

        Reviewed by Eric Carlson.

        Update AVVideoCaptureSource to compute the size given to settings after rotating the sample.
        This ensures computing the size of video elements appropriately.
        Also makes sure to notify observers of size change whenever rotation happens as settings() call will provide a different size.
        Covered by manual testing as we do not have yet emulation of local capture with rotation.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::setIntrinsicSize):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::settings):
        (WebCore::AVVideoCaptureSource::computeSampleRotation):

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

        Regression(PSON) View becomes blank after click a cross-site download link
        https://bugs.webkit.org/show_bug.cgi?id=193361
        <rdar://problem/47099573>

        Reviewed by Geoff Garen.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        When restoring from PageCache, make sure we notify the client that the load was committed
        *before* we tell it that the navigation is complete. This would confuse the ProvisionalPageProxy
        logic in the UIProcess.

2019-01-15  Zalan Bujtas  <zalan@apple.com>

        [LFC][Out-of-flow] Ignore bottom when the vertical values are over-constrained
        https://bugs.webkit.org/show_bug.cgi?id=193448

        Reviewed by Antti Koivisto.

        Add missing check. We should only resolve auto values. 

        Test: fast/block/block-only/non-auto-top-bottom-left-right-widht-height-out-of-flow.html

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):

2019-01-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: provide a way to determine whether a give node has event listeners
        https://bugs.webkit.org/show_bug.cgi?id=193226
        <rdar://problem/46800005>

        Reviewed by Joseph Pecoraro.

        Test: inspector/audit/run-dom.html

        * inspector/InspectorAuditDOMObject.idl:
        * inspector/InspectorAuditDOMObject.h:
        * inspector/InspectorAuditDOMObject.cpp:
        (WebCore::InspectorAuditDOMObject::hasEventListeners): Added.

2019-01-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: provide a way to query for all nodes with a given computed Accessibility role
        https://bugs.webkit.org/show_bug.cgi?id=193228
        <rdar://problem/46787787>

        Reviewed by Joseph Pecoraro.

        Test: inspector/audit/run-accessibility.html

        * inspector/InspectorAuditAccessibilityObject.idl:
        * inspector/InspectorAuditAccessibilityObject.h:
        * inspector/InspectorAuditAccessibilityObject.cpp:
        (WebCore::accessiblityObjectForNode): Added.
        (WebCore::InspectorAuditAccessibilityObject::getElementsByComputedRole): Added.

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

        Simplify isRunningAnimationOnRenderer()
        https://bugs.webkit.org/show_bug.cgi?id=193435

        Reviewed by Darin Adler.

        All callers of CSSAnimationController::isRunningAnimationOnRenderer() pass AnimationBase::Running | AnimationBase::Paused,
        so we can remove the parameter and just hardcode this behavior.
        
        This will simplify a later patch that needs to consider state changes between running and not running.
        
        No behavior change.

        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::isAnimatingProperty const):
        * page/animation/CSSAnimationController.cpp:
        (WebCore::CSSAnimationControllerPrivate::isRunningAnimationOnRenderer const):
        (WebCore::CSSAnimationControllerPrivate::isRunningAcceleratedAnimationOnRenderer const):
        (WebCore::CSSAnimationControllerPrivate::computeExtentOfAnimation const):
        (WebCore::CSSAnimationController::isRunningAnimationOnRenderer const):
        (WebCore::CSSAnimationController::isRunningAcceleratedAnimationOnRenderer const):
        * page/animation/CSSAnimationController.h:
        * page/animation/CSSAnimationControllerPrivate.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::isAnimatingProperty const):
        * page/animation/CompositeAnimation.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::currentTransform const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation const):
        (WebCore::RenderLayerCompositor::isRunningTransformAnimation const):

2019-01-15  Antti Koivisto  <antti@apple.com>

        Remove unused fields from Scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=193442

        Reviewed by Zalan Bujtas.

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::isCustomScrollbar const):

        Make virtual so it doesn't need a bit.

        (WebCore::Scrollbar::isAlphaLocked const): Deleted.
        (WebCore::Scrollbar::setIsAlphaLocked): Deleted.
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::shouldScrollbarParticipateInHitTesting):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::RenderScrollbar):
        * rendering/RenderScrollbar.h:

2019-01-15  Zalan Bujtas  <zalan@apple.com>

        [LFC] Use the containing block's padding box to position out-of-flow elements.
        https://bugs.webkit.org/show_bug.cgi?id=193431

        Reviewed by Antti Koivisto.

        If the element has 'position: absolute', the containing block is established by the nearest ancestor
        with a 'position' of 'absolute', 'relative' or 'fixed', in the following way:

        1. In the case that the ancestor is an inline element, the containing block is the bounding box around the padding
        boxes of the first and the last inline boxes generated for that element. In CSS 2.2, if the inline element is split
        across multiple lines, the containing block is undefined.

        2. Otherwise, the containing block is formed by the padding edge of the ancestor.

        This patch covers #2. 

        Test: fast/block/block-only/out-of-flow-with-containing-block-border-padding.html

        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::width const):
        (WebCore::Display::Box::height const):
        (WebCore::Display::Box::contentBoxTop const):
        (WebCore::Display::Box::contentBoxLeft const):
        (WebCore::Display::Box::paddingBoxTop const):
        (WebCore::Display::Box::paddingBoxLeft const):
        (WebCore::Display::Box::paddingBoxBottom const):
        (WebCore::Display::Box::paddingBoxRight const):
        (WebCore::Display::Box::paddingBoxHeight const):
        (WebCore::Display::Box::paddingBoxWidth const):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

2019-01-11  Antoine Quint  <graouts@apple.com>

        Support parsing of additional values for the touch-action property
        https://bugs.webkit.org/show_bug.cgi?id=193314
        <rdar://problem/47176519>

        Reviewed by Dean Jackson.

        We add parsing support for the "none", "pan-x", "pan-y" and "pinch-zoom" values of the CSS "touch-action" property.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::touchActionFlagsToCSSValue):
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator OptionSet<TouchAction> const):
        (WebCore::CSSPrimitiveValue::operator TouchAction const): Deleted.
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertTouchAction):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeTouchAction):
        * dom/Element.cpp:
        (WebCore::Element::allowsDoubleTapGesture const):
        * platform/TouchAction.h: Added.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::touchActions const):
        (WebCore::RenderStyle::setTouchActions):
        (WebCore::RenderStyle::initialTouchActions):
        (WebCore::RenderStyle::touchAction const): Deleted.
        (WebCore::RenderStyle::setTouchAction): Deleted.
        (WebCore::RenderStyle::initialTouchAction): Deleted.
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h:

2019-01-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: create new IDL type for exposing special functionality in test context
        https://bugs.webkit.org/show_bug.cgi?id=193149
        <rdar://problem/46801218>

        Reviewed by Joseph Pecoraro.

        Tests: inspector/audit/run.html
               inspector/audit/setup.html
               inspector/audit/teardown.html

        Create a new `AuditAgent` (and various subclasses for different inspection targets), as well
        as `InspectorAuditAccessibilityObject` and `InspectorAuditDOMObject` objects that will
        be injected into the test function to allow for more advanced testing.

        * inspector/InspectorAuditAccessibilityObject.idl: Added.
        * inspector/InspectorAuditAccessibilityObject.h: Added.
        (WebCore::InspectorAuditAccessibilityObject::create):
        * inspector/InspectorAuditAccessibilityObject.cpp: Added.
        (WebCore::InspectorAuditAccessibilityObject::InspectorAuditAccessibilityObject):

        * inspector/InspectorAuditDOMObject.idl: Added.
        * inspector/InspectorAuditDOMObject.h: Added.
        (WebCore::InspectorAuditDOMObject::create):
        * inspector/InspectorAuditDOMObject.cpp: Added.
        (WebCore::InspectorAuditDOMObject::InspectorAuditDOMObject):

        * inspector/agents/page/PageAuditAgent.h: Added.
        * inspector/agents/page/PageAuditAgent.cpp: Added.
        (WebCore::PageAuditAgent::PageAuditAgent):
        (WebCore::PageAuditAgent::injectedScriptForEval):
        (WebCore::PageAuditAgent::populateAuditObject):
        (WebCore::PageAuditAgent::muteConsole):
        (WebCore::PageAuditAgent::unmuteConsole):

        * inspector/agents/worker/WorkerAuditAgent.h: Added.
        * inspector/agents/worker/WorkerAuditAgent.cpp: Added.
        (WebCore::WorkerAuditAgent::WorkerAuditAgent):
        (WebCore::WorkerAuditAgent::injectedScriptForEval):

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::createLazyAgents):

        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::createLazyAgents):

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * UnifiedSources-input.xcfilelist:
        * WebCore.xcodeproj/project.pbxproj:

2019-01-14  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Implement the Type Checker
        https://bugs.webkit.org/show_bug.cgi?id=193080

        Reviewed by Dean Jackson.

        This is a translation of https://github.com/gpuweb/WHLSL/blob/master/Source/Checker.mjs into C++.

        The Checker passes types between nested expressions. An inner expression figures out what type it is, and
        passes that information up to an outer expression. This is done via reading/writing into a HashMap,
        because all the type information needs to be saved so that the Metal codegen can emit the correct types.

        These types can have two forms: A regular type (like "int[]") or a ResolvableType. ResolvableTypes
        represent literals, since a literal needs to know its context before it knows what type it should be. So,
        if you have a function like "void foo(int x)" and you have a call like "foo(3)", the 3's ResolvableType
        gets passed to the CallExpression, which then unifies it with the function's parameter type, thereby
        resolving the 3 to be an int.

        There are a few examples where multiple expressions will have the same type: "return (foo, 3)." If those
        types are regular types, then it's no problem; we can just clone() the type and stick both in the HashMap.
        However, if the type is a ResolvableType, an outer expression will only resolve that type once, so the two
        ResolvableTypes can't be distinct. The Checker solves this problem by making a reference-counted wrapper
        around ResolvableTypes and using that in the HashMap instead.

        Once all the ResolvableTypes have been resolved, a second pass runs through the entire HashMap and assigns
        the known types to all the expressions. LValues and their associated address spaces are held in a parallel
        HashMap, and are assigned to the expression at the same time. The type is an Optional<AddressSpace> because
        address spaces are only relevant if the value is an lvalue; if it's nullopt then that means the expression
        is an rvalue.

        No new tests because it isn't hooked up yet. Not enough of the compiler exists to have any meaningful sort
        of test. When enough of the compiler is present, I'll port the reference implementation's test suite.

        * Modules/webgpu/WHLSL/WHLSLChecker.cpp: Added.
        (WebCore::WHLSL::resolveWithOperatorAnderIndexer):
        (WebCore::WHLSL::resolveWithOperatorLength):
        (WebCore::WHLSL::resolveWithReferenceComparator):
        (WebCore::WHLSL::resolveByInstantiation):
        (WebCore::WHLSL::checkSemantics):
        (WebCore::WHLSL::checkOperatorOverload):
        (WebCore::WHLSL::Checker::Checker):
        (WebCore::WHLSL::Checker::visit):
        (WebCore::WHLSL::Checker::assignTypes):
        (WebCore::WHLSL::Checker::checkShaderType):
        (WebCore::WHLSL::matchAndCommit):
        (WebCore::WHLSL::Checker::recurseAndGetInfo):
        (WebCore::WHLSL::Checker::getInfo):
        (WebCore::WHLSL::Checker::assignType):
        (WebCore::WHLSL::Checker::forwardType):
        (WebCore::WHLSL::getUnnamedType):
        (WebCore::WHLSL::Checker::finishVisitingPropertyAccess):
        (WebCore::WHLSL::Checker::recurseAndWrapBaseType):
        (WebCore::WHLSL::Checker::isBoolType):
        (WebCore::WHLSL::Checker::recurseAndRequireBoolType):
        (WebCore::WHLSL::check):
        * Modules/webgpu/WHLSL/WHLSLChecker.h: Added.
        * Modules/webgpu/WHLSL/WHLSLGatherEntryPointItems.cpp: Added.
        (WebCore::WHLSL::Gatherer::Gatherer):
        (WebCore::WHLSL::Gatherer::reset):
        (WebCore::WHLSL::Gatherer::takeEntryPointItems):
        (WebCore::WHLSL::Gatherer::visit):
        (WebCore::WHLSL::gatherEntryPointItems):
        * Modules/webgpu/WHLSL/WHLSLGatherEntryPointItems.h: Added.
        (WebCore::WHLSL::EntryPointItem::EntryPointItem):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-01-14  Alex Christensen  <achristensen@webkit.org>

        Split headerValueForVary into specialized functions for NetworkProcess and WebProcess/WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=193429

        Reviewed by Joseph Pecoraro.

        headerValueForVary is a strange function that is causing trouble with my NetworkProcess global state removal project.
        It currently accesses the cookie storage to see if there's a match in two different ways currently written as fallbacks.
        In the WebProcess or in WebKitLegacy, it uses cookiesStrategy to access cookies via IPC or directly, respectively,
        depending on the PlatformStrategies implementation of cookiesStrategy for that process.
        In the NetworkProcess, it uses WebCore::NetworkStorageSession to access cookies directly.
        Both of these cookie accessing methods use global state in the process, and I must split them to refactor them separately.
        This patch does the split by passing in the method of cookie access: a CookiesStrategy& or a NetworkStorageSession&.
        Further refactoring will be done in bug 193368 and bug 161106 to build on this and replace the global state with
        member variables of the correct containing objects.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::setResponse):
        (WebCore::CachedResource::varyHeaderValuesMatch):
        * platform/network/CacheValidation.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::headerValueForVary):
        (WebCore::collectVaryingRequestHeaders):
        (WebCore::verifyVaryingRequestHeaders):
        * platform/network/CacheValidation.h:

2019-01-14  Simon Fraser  <simon.fraser@apple.com>

        Only run the node comparison code in FrameSelection::respondToNodeModification() for range selections
        https://bugs.webkit.org/show_bug.cgi?id=193416

        Reviewed by Wenson Hsieh.

        The code inside the m_selection.firstRange() clause needs to only run for non-collapsed selections, and
        it shows up on Speedometer profiles so optimize to only run this code if we have a selection range.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::respondToNodeModification):

2019-01-14  Simon Fraser  <simon.fraser@apple.com>

        Animation and other code is too aggressive about invalidating layer composition
        https://bugs.webkit.org/show_bug.cgi?id=193343

        Reviewed by Antoine Quint.
        
        We used to have the concept of a "SyntheticStyleChange", which was used to trigger
        style updates for animation, and also to get compositing updated.
        
        That morphed into a call to Element::invalidateStyleAndLayerComposition(), which causes
        a style update to result in a "RecompositeLayer" diff, which in turn triggers compositing work,
        and dirties DOM touch event regions (which can be expensive to update).
        
        However, not all the callers of Element::invalidateStyleAndLayerComposition() need to trigger
        compositing, and doing so from animations caused excessive touch event regions on yahoo.com,
        which has several visibility:hidden elements with background-position animation.
        
        So fix callers of invalidateStyleAndLayerComposition() which don't care about compositing to instead
        call just invalidateStyle().
        
        Also fix KeyframeAnimation::animate to correctly return true when animation state changes—it failed to
        do so, because fireAnimationEventsIfNeeded() can run the state machine and change state.

        * animation/KeyframeEffect.cpp:
        (WebCore::invalidateElement):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::setNeedsStyleRecalc):
        * page/animation/CSSAnimationController.cpp:
        (WebCore::CSSAnimationControllerPrivate::updateAnimations):
        (WebCore::CSSAnimationControllerPrivate::fireEventsAndUpdateStyle):
        (WebCore::CSSAnimationControllerPrivate::pauseAnimationAtTime):
        (WebCore::CSSAnimationControllerPrivate::pauseTransitionAtTime):
        (WebCore::CSSAnimationController::cancelAnimations):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientStyleChanged):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):
        * svg/SVGAnimateElementBase.cpp:
        (WebCore::applyCSSPropertyToTarget):
        (WebCore::removeCSSPropertyFromTarget):

2019-01-14  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: When deleting databases, some open databases might be missed
        https://bugs.webkit.org/show_bug.cgi?id=193090

        Reviewed by Brady Eidson.

        We should close all databases with an open backing store instead of looking at which ones have an open database
        connection. This is because a database might be in the process of getting a backing store before its connection
        has been created.

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesModifiedSince):
        (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesForOrigins):

2019-01-14  Ryosuke Niwa  <rniwa@webkit.org>

        Remove redundant check for alignAttr and hiddenAttr in various isPresentationAttribute overrides
        https://bugs.webkit.org/show_bug.cgi?id=193410

        Reviewed by Simon Fraser.

        Removed redundant checks for check for alignAttr and hiddenAttr in isPresentationAttribute overrides
        in HTMLElement subclasses since HTMLElement::isPresentationAttribute already checks for those attributes.

        * html/HTMLDivElement.cpp:
        (WebCore::HTMLDivElement::isPresentationAttribute const): Deleted.
        * html/HTMLDivElement.h:
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::isPresentationAttribute const): Deleted.
        * html/HTMLEmbedElement.h:
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::isPresentationAttribute const):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::isPresentationAttribute const):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::isPresentationAttribute const):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isPresentationAttribute const):
        * html/HTMLParagraphElement.cpp:
        (WebCore::HTMLParagraphElement::isPresentationAttribute const): Deleted.
        * html/HTMLParagraphElement.h:
        * html/HTMLTableCaptionElement.cpp:
        (WebCore::HTMLTableCaptionElement::isPresentationAttribute const): Deleted.
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::isPresentationAttribute const):
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::isPresentationAttribute const):

2019-01-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239901, r239909, r239910, r239912,
        r239913, and r239914.
        https://bugs.webkit.org/show_bug.cgi?id=193407

        These revisions caused an internal failure (Requested by
        Truitt on #webkit).

        Reverted changesets:

        "[Cocoa] Avoid importing directly from subumbrella frameworks"
        https://bugs.webkit.org/show_bug.cgi?id=186016
        https://trac.webkit.org/changeset/239901

        "Tried to fix USE(APPLE_INTERNAL_SDK) builds after r239901."
        https://trac.webkit.org/changeset/239909

        "Tried to fix the build."
        https://trac.webkit.org/changeset/239910

        "Fixed iOS builds after r239910."
        https://trac.webkit.org/changeset/239912

        "More build fixing."
        https://trac.webkit.org/changeset/239913

        "Tried to fix USE(APPLE_INTERNAL_SDK) 32-bit builds."
        https://trac.webkit.org/changeset/239914

2019-01-14  Mark Lam  <mark.lam@apple.com>

        Re-enable ability to build --cloop builds.
        https://bugs.webkit.org/show_bug.cgi?id=192955

        Reviewed by Saam barati and Keith Miller.

        * Configurations/FeatureDefines.xcconfig:

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

        https://bugs.webkit.org/show_bug.cgi?id=193403
        <rdar://problem/46750743>

        Continue fix in r239711 by using WeakPtr in SourceBufferPrivateAVFObjC.

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::setCDMSession):

2019-01-14  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Map WebGPUBindGroupLayoutBindings from the BindGroupLayoutDescriptor for error checking and later referencing
        https://bugs.webkit.org/show_bug.cgi?id=193405

        Reviewed by Dean Jackson.

        When creating a WebGPUBindGroupLayout, cache the WebGPUBindGroupLayoutDescriptor's list of BindGroupLayoutBindings
        in a HashMap, keyed by binding number, for quick reference during the WebGPUProgrammablePassEncoder::setBindGroups 
        implementation to follow. Also add error-checking e.g. detecting duplicate binding numbers in the same WebGPUBindGroupLayout
        and non-existent binding numbers when creating the WebGPUBindGroup.

        No new tests. BindGroups and BindGroupLayouts reflect the (canonical?) strategy of returning empty 
        objects upon creation failure and reporting errors elswhere. Since error reporting is not yet implemented, 
        the error checks aren't testable from LayoutTests right now. Expected behavior unchanged and covered by existing tests.

        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createBindGroup const): 
                Number of bindings must be consistent between bindings and layout bindings.
                BindGroupBindings should only refer to existing BindGroupLayoutBindings.
        * platform/graphics/gpu/GPUBindGroup.h: 
        * platform/graphics/gpu/GPUBindGroupLayout.h:
        (WebCore::GPUBindGroupLayout::bindingsMap const): Added. Cache map of BindGroupLayoutBindings.
        * platform/graphics/gpu/cocoa/GPUBindGroupLayoutMetal.mm: Disallow duplicate binding numbers in BindGroupLayoutBindings.
        (WebCore::GPUBindGroupLayout::tryCreate):
        (WebCore::GPUBindGroupLayout::GPUBindGroupLayout):

2019-01-14  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Assorted cleanup
        https://bugs.webkit.org/show_bug.cgi?id=193389

        Reviewed by Dean Jackson.

        This is a bunch of non-behavior-changing cleanup.

        - The compiler uses UniqueRef all over the place, and UniqueRef has an implicit operator T&. Therefore,
          we don't need to static_cast<T&> everywhere.
        - ConstantExpressionEnumerationMemberReference is the exact same thing as EnumerationMemberLiteral, so
          this patch deletes the longer-named class in favor of the shorter-named class.
        - Because of the header dependency tree, this patch moves EntryPointType into its own file so it can be
          used by files that FunctionDeclaration depends on. Same thing for AddressSpace.
        - EnumTypes have to have non-null base types. The parser will make sure this is always true.

        No new tests because there is no behavior change.

        * Modules/webgpu/WHLSL/AST/WHLSLAddressSpace.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLBaseSemantic.h.
        * Modules/webgpu/WHLSL/AST/WHLSLArrayType.h:
        (WebCore::WHLSL::AST::ArrayType::type const):
        (WebCore::WHLSL::AST::ArrayType::type):
        * Modules/webgpu/WHLSL/AST/WHLSLAssignmentExpression.h:
        (WebCore::WHLSL::AST::AssignmentExpression::left):
        (WebCore::WHLSL::AST::AssignmentExpression::right):
        * Modules/webgpu/WHLSL/AST/WHLSLBaseSemantic.h:
        * Modules/webgpu/WHLSL/AST/WHLSLBuiltInSemantic.cpp:
        (WebCore::WHLSL::AST::BuiltInSemantic::isAcceptableForShaderItemDirection const):
        * Modules/webgpu/WHLSL/AST/WHLSLBuiltInSemantic.h:
        * Modules/webgpu/WHLSL/AST/WHLSLConstantExpression.h:
        (WebCore::WHLSL::AST::ConstantExpression::ConstantExpression):
        (WebCore::WHLSL::AST::ConstantExpression::clone const):
        (WebCore::WHLSL::AST::ConstantExpression::matches const):
        * Modules/webgpu/WHLSL/AST/WHLSLConstantExpressionEnumerationMemberReference.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLDereferenceExpression.h:
        (WebCore::WHLSL::AST::DereferenceExpression::pointer):
        * Modules/webgpu/WHLSL/AST/WHLSLDoWhileLoop.h:
        (WebCore::WHLSL::AST::DoWhileLoop::body):
        (WebCore::WHLSL::AST::DoWhileLoop::conditional):
        * Modules/webgpu/WHLSL/AST/WHLSLEffectfulExpressionStatement.h:
        (WebCore::WHLSL::AST::EffectfulExpressionStatement::effectfulExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLEntryPointType.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLBaseSemantic.h.
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationDefinition.h:
        (WebCore::WHLSL::AST::EnumerationDefinition::EnumerationDefinition):
        (WebCore::WHLSL::AST::EnumerationDefinition::type):
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationMemberLiteral.h:
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::EnumerationMemberLiteral):
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::wrap):
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::left const):
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::right const):
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::clone const):
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::enumerationDefinition):
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::enumerationDefinition const):
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::enumerationMember):
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::enumerationMember const):
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::setEnumerationMember):
        * Modules/webgpu/WHLSL/AST/WHLSLExpression.h:
        (WebCore::WHLSL::AST::Expression::type):
        (WebCore::WHLSL::AST::Expression::setType):
        (WebCore::WHLSL::AST::Expression::addressSpace const):
        (WebCore::WHLSL::AST::Expression::setAddressSpace):
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.cpp:
        (WebCore::WHLSL::AST::FloatLiteralType::conversionCost const):
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.h:
        (WebCore::WHLSL::AST::FloatLiteralType::preferredType):
        * Modules/webgpu/WHLSL/AST/WHLSLForLoop.h:
        (WebCore::WHLSL::AST::ForLoop::condition):
        (WebCore::WHLSL::AST::ForLoop::increment):
        (WebCore::WHLSL::AST::ForLoop::body):
        * Modules/webgpu/WHLSL/AST/WHLSLFunctionDeclaration.h:
        (WebCore::WHLSL::AST::FunctionDeclaration::type const):
        (WebCore::WHLSL::AST::FunctionDeclaration::type):
        * Modules/webgpu/WHLSL/AST/WHLSLIfStatement.h:
        (WebCore::WHLSL::AST::IfStatement::conditional):
        (WebCore::WHLSL::AST::IfStatement::body):
        (WebCore::WHLSL::AST::IfStatement::elseBody):
        * Modules/webgpu/WHLSL/AST/WHLSLIndexExpression.h:
        (WebCore::WHLSL::AST::IndexExpression::indexExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.cpp:
        (WebCore::WHLSL::AST::IntegerLiteralType::conversionCost const):
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.h:
        (WebCore::WHLSL::AST::IntegerLiteralType::preferredType):
        * Modules/webgpu/WHLSL/AST/WHLSLLogicalExpression.h:
        (WebCore::WHLSL::AST::LogicalExpression::left):
        (WebCore::WHLSL::AST::LogicalExpression::right):
        * Modules/webgpu/WHLSL/AST/WHLSLLogicalNotExpression.h:
        (WebCore::WHLSL::AST::LogicalNotExpression::operand):
        * Modules/webgpu/WHLSL/AST/WHLSLMakeArrayReferenceExpression.h:
        (WebCore::WHLSL::AST::MakeArrayReferenceExpression::lValue):
        * Modules/webgpu/WHLSL/AST/WHLSLMakePointerExpression.h:
        (WebCore::WHLSL::AST::MakePointerExpression::lValue):
        * Modules/webgpu/WHLSL/AST/WHLSLPropertyAccessExpression.h:
        (WebCore::WHLSL::AST::PropertyAccessExpression::base):
        * Modules/webgpu/WHLSL/AST/WHLSLReadModifyWriteExpression.h:
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::lValue):
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::newValueExpression):
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::resultExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLReferenceType.h:
        (WebCore::WHLSL::AST::ReferenceType::elementType const):
        (WebCore::WHLSL::AST::ReferenceType::elementType):
        * Modules/webgpu/WHLSL/AST/WHLSLResolvableType.h:
        (WebCore::WHLSL::AST::ResolvableType::resolvedType const):
        (WebCore::WHLSL::AST::ResolvableType::resolvedType):
        * Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.cpp:
        (WebCore::WHLSL::AST::ResourceSemantic::isAcceptableType const):
        (WebCore::WHLSL::AST::ResourceSemantic::isAcceptableForShaderItemDirection const):
        * Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.h:
        * Modules/webgpu/WHLSL/AST/WHLSLReturn.h:
        (WebCore::WHLSL::AST::Return::value):
        * Modules/webgpu/WHLSL/AST/WHLSLSpecializationConstantSemantic.cpp:
        (WebCore::WHLSL::AST::SpecializationConstantSemantic::isAcceptableForShaderItemDirection const):
        * Modules/webgpu/WHLSL/AST/WHLSLSpecializationConstantSemantic.h:
        * Modules/webgpu/WHLSL/AST/WHLSLStageInOutSemantic.cpp:
        (WebCore::WHLSL::AST::StageInOutSemantic::isAcceptableForShaderItemDirection const):
        * Modules/webgpu/WHLSL/AST/WHLSLStageInOutSemantic.h:
        * Modules/webgpu/WHLSL/AST/WHLSLStructureElement.h:
        (WebCore::WHLSL::AST::StructureElement::type):
        * Modules/webgpu/WHLSL/AST/WHLSLSwitchStatement.h:
        (WebCore::WHLSL::AST::SwitchStatement::value):
        * Modules/webgpu/WHLSL/AST/WHLSLTernaryExpression.h:
        (WebCore::WHLSL::AST::TernaryExpression::predicate):
        (WebCore::WHLSL::AST::TernaryExpression::bodyExpression):
        (WebCore::WHLSL::AST::TernaryExpression::elseExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLTypeDefinition.h:
        (WebCore::WHLSL::AST::TypeDefinition::type):
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.cpp:
        (WebCore::WHLSL::AST::UnsignedIntegerLiteralType::conversionCost const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.h:
        (WebCore::WHLSL::AST::UnsignedIntegerLiteralType::preferredType):
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclaration.h:
        (WebCore::WHLSL::AST::VariableDeclaration::type):
        (WebCore::WHLSL::AST::VariableDeclaration::initializer):
        (WebCore::WHLSL::AST::VariableDeclaration::isAnonymous const):
        * Modules/webgpu/WHLSL/AST/WHLSLWhileLoop.h:
        (WebCore::WHLSL::AST::WhileLoop::conditional):
        (WebCore::WHLSL::AST::WhileLoop::body):
        * Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp:
        (WebCore::WHLSL::checkDuplicateFunctions):
        * Modules/webgpu/WHLSL/WHLSLInferTypes.cpp:
        (WebCore::WHLSL::commit):
        (WebCore::WHLSL::inferTypesForTypeArguments):
        (WebCore::WHLSL::inferTypesForCall):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:
        (WebCore::WHLSL::NameResolver::visit):
        (WebCore::WHLSL::resolveNamesInTypes):
        (WebCore::WHLSL::resolveNamesInFunctions):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.h:
        * Modules/webgpu/WHLSL/WHLSLParser.h:
        * Modules/webgpu/WHLSL/WHLSLProgram.h:
        (WebCore::WHLSL::Program::append):
        * Modules/webgpu/WHLSL/WHLSLSynthesizeEnumerationFunctions.cpp:
        (WebCore::WHLSL::synthesizeEnumerationFunctions):
        * Modules/webgpu/WHLSL/WHLSLSynthesizeStructureAccessors.cpp:
        (WebCore::WHLSL::synthesizeStructureAccessors):
        * Modules/webgpu/WHLSL/WHLSLVisitor.cpp:
        (WebCore::WHLSL::Visitor::visit):
        * Modules/webgpu/WHLSL/WHLSLVisitor.h:
        * WebCore.xcodeproj/project.pbxproj:

2019-01-14  Zan Dobersek  <zdobersek@igalia.com>

        DOMCacheStorage: use-after-move in doSequentialMatch()
        https://bugs.webkit.org/show_bug.cgi?id=193396

        Reviewed by Youenn Fablet.

        Depending on the platform- and compiler-specific calling conventions,
        the doSequentialMatch() code can move out the Vector<Ref<DOMCache>>
        object into the callback lambda before the DOMCache object at the
        specified index is retrieved for the DOMCache::doMatch() invocation.

        This problem is now avoided by retrieving reference to the target
        DOMCache object in an earlier expression.

        * Modules/cache/DOMCacheStorage.cpp:
        (WebCore::doSequentialMatch):

2019-01-14  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Add basic box-sizing support.
        https://bugs.webkit.org/show_bug.cgi?id=193392

        Reviewed by Antti Koivisto.

        No min/max support yet.

        Test: fast/block/block-only/box-sizing-inflow-out-of-flow-simple.html

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

2019-01-14  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Override DeviceType() in RealtimeMediaSource implementations
        https://bugs.webkit.org/show_bug.cgi?id=193397

        This was necessary but wasn't done.

        Reviewed by Philippe Normand.

        No test required as this fixes a regression in all WebRTC tests when built in debug mode.

        * platform/mediastream/gstreamer/GStreamerAudioCaptureSource.h:
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h:

2019-01-14  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed WPE debug build fix after r239921.

        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        (webKitMediaClearKeyDecryptorDecrypt): Fix the assert that checks the
        size of the mapped buffer containing IV data.

2019-01-14  Charlie Turner  <cturner@igalia.com>

        [GStreamer] Add sharedBuffer utility to GstMappedBuffer, and a testsuite
        https://bugs.webkit.org/show_bug.cgi?id=192977

        Reviewed by Carlos Garcia Campos.

        Add a utility method on GstMappedBuffer to return a SharedBuffer
        view over the mapped data with no copies.

        This patch also introduces a new gstreamer port API test
        directory, and includes some tests for GstMappedBuffer.

        New tests in the API section.

        * platform/SharedBuffer.cpp: Add a new overload for
        GstMappedBuffer that allows sharing the mapped GStreamer buffers
        with zero copies.
        (WebCore::SharedBuffer::create):
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::DataSegment::data const):
        (WebCore::SharedBuffer::DataSegment::size const):
        * platform/SharedBuffer.h:
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcAllocateBuffersAndRenderAudio): Update to new
        API.
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::GstMappedBuffer::createSharedBuffer): Return a shared
        buffer sharing this mapped buffer. The buffer must be shareable to
        use this method.
        * platform/graphics/gstreamer/GStreamerCommon.h:
        (WebCore::GstMappedBuffer::create): Make GstMappedBuffer RefCounted
        (WebCore::GstMappedBuffer::~GstMappedBuffer):
        (WebCore::GstMappedBuffer::data):
        (WebCore::GstMappedBuffer::data const):
        (WebCore::GstMappedBuffer::size const):
        (WebCore::GstMappedBuffer::isSharable const): New predicate to
        check whether this buffer can be shared (i.e., is not writable)
        (WebCore::GstMappedBuffer::GstMappedBuffer):
        (WebCore::GstMappedBuffer::operator bool const): Deleted.
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfSample):
        Update to use new API.
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h:
        (WebCore::InitData::InitData): Ditto.
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        (webKitMediaClearKeyDecryptorFindAndSetKey): Ditto.
        (webKitMediaClearKeyDecryptorDecrypt): Ditto.
        * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.cpp:
        (WebCore::WrappedMockRealtimeAudioSource::render): Ditto.
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp:
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::pullAudioData): Ditto.
        * platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceLibWebRTC.cpp:
        (WebCore::RealtimeOutgoingVideoSourceLibWebRTC::createBlackFrame): Ditto.
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::Fragmentize): Ditto.

2019-01-14  Karl Leplat  <karl.leplat_ext@softathome.com>

        [GTK][WPE] Graphic issue with invalidations on composited layers with subpixel positions
        https://bugs.webkit.org/show_bug.cgi?id=193239

        Reviewed by Žan Doberšek.

        Test: compositing/repaint/invalidations-on-composited-layers-with-subpixel-positions.html

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers): Use enclosed dirty rect values
        when invalidating the CoordinatedBackingStore areas.

2019-01-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [FreeType] Support emoji modifiers
        https://bugs.webkit.org/show_bug.cgi?id=177040

        Reviewed by Myles C. Maxfield.

        The problem only happens with emojis having the zero with joiner (U+200D) in the sequence. The sequence is
        broken because createAndFillGlyphPage() in Font.cpp overwrites zero with joiner with zero width space (U+200B),
        but the emoji font actually supports zero with joiner. This patch moves the control characters override from
        createAndFillGlyphPage() to GlyphPage::fill() only for FreeType based ports. This way we can do the override
        only for the cases where the code point is not supported by the font.

        * platform/graphics/Font.cpp:
        (WebCore::overrideControlCharacters): Helper function to override the control characters.
        (WebCore::createAndFillGlyphPage): Call overrideControlCharacters() only when not using FreeType.
        * platform/graphics/freetype/GlyphPageTreeNodeFreeType.cpp:
        (WebCore::GlyphPage::fill): Use zero width space as fallback when the font doesn't support characters with
        Default_Ignorable Unicode property.

2019-01-13  Dan Bernstein  <mitz@apple.com>

        More build fixing.

        * editing/cocoa/DictionaryLookup.mm:

2019-01-13  Simon Fraser  <simon.fraser@apple.com>

        Minor optimization to RenderText::setRenderedText()
        https://bugs.webkit.org/show_bug.cgi?id=193388

        Reviewed by Ryosuke Niwa.

        Avoid the call to applyTextTransform() if TextTransform is None, so that we don't
        have to call previousCharacter() and reassign m_text.
        
        Similar optimization in RenderText::textWithoutConvertingBackslashToYenSymbol().

        Speedometer profiles show a few samples here, but this isn't going to win any prizes.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::setRenderedText):
        (WebCore::RenderText::textWithoutConvertingBackslashToYenSymbol const):

2019-01-13  Dan Bernstein  <mitz@apple.com>

        Tried to fix the build.

        * editing/cocoa/DictionaryLookup.mm:

2019-01-13  Dan Bernstein  <mitz@apple.com>

        Tried to fix USE(APPLE_INTERNAL_SDK) builds after r239901.

        Patch by Keith Rollin.

        * accessibility/mac/AXObjectCacheMac.mm:

2019-01-13  Zalan Bujtas  <zalan@apple.com>

        [LFC] Adjust assert for statically positioned fixed elements
        https://bugs.webkit.org/show_bug.cgi?id=193385

        Reviewed by Antti Koivisto.

        While computing the static position and traversing the ancestor chain, we can surely hit a positioned container
        (since we need to go all the way up to the initial containing block).

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::staticVerticalPositionForOutOfFlowPositioned):
        (WebCore::Layout::staticHorizontalPositionForOutOfFlowPositioned):

2019-01-13  Antti Koivisto  <antti@apple.com>

        Release assert with <img usemap> in shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=193378

        Reviewed by Ryosuke Niwa.

        When a shadow host that has <img usemap> in the shadow tree is removed from the document, we try
        to remove the map from the scope of the host.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):
        (WebCore::HTMLImageElement::insertedIntoAncestor):
        (WebCore::HTMLImageElement::removedFromAncestor):

        Tree scope changes are relevant, not the connection to the document.

2019-01-12  Timothy Hatcher  <timothy@apple.com>

        Have prefers-color-scheme: light always match on macOS versions before Mojave.
        https://bugs.webkit.org/show_bug.cgi?id=191655
        rdar://problem/46074680

        Reviewed by Megan Gardner.

        Tests: css-dark-mode/older-systems/prefers-color-scheme.html
               css-dark-mode/older-systems/supported-color-schemes-css.html
               css-dark-mode/older-systems/supported-color-schemes.html

        Use new HAVE(OS_DARK_MODE_SUPPORT) to make it easier to find code.
        Added HAVE(OS_DARK_MODE_SUPPORT) around more bits to make it work on older systems.

        * Configurations/FeatureDefines.xcconfig:
        * dom/Document.cpp:
        (WebCore::Document::useDarkAppearance const):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::enable):
        * page/Page.cpp:
        (WebCore::Page::setUseDarkAppearance):
        (WebCore::Page::useDarkAppearance const):
        (WebCore::Page::setUseDarkAppearanceOverride):
        * platform/mac/LocalDefaultSystemAppearance.h:
        (WebCore::LocalDefaultSystemAppearance::usingDarkAppearance const):
        * platform/mac/LocalDefaultSystemAppearance.mm:
        (WebCore::LocalDefaultSystemAppearance::LocalDefaultSystemAppearance):
        (WebCore::LocalDefaultSystemAppearance::~LocalDefaultSystemAppearance):
        * platform/mac/ScrollAnimatorMac.mm:
        * rendering/RenderThemeMac.mm:
        (-[WebCoreTextFieldCell _adjustedCoreUIDrawOptionsForDrawingBordersOnly:]):
        (-[WebListButtonCell drawWithFrame:inView:]):
        (WebCore::RenderThemeMac::platformInactiveSelectionBackgroundColor const):
        (WebCore::RenderThemeMac::platformInactiveSelectionForegroundColor const):
        (WebCore::RenderThemeMac::platformActiveListBoxSelectionBackgroundColor const):
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionBackgroundColor const):
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionForegroundColor const):
        (WebCore::RenderThemeMac::systemColor const):

2019-01-12  Zalan Bujtas  <zalan@apple.com>

        [LFC] Block/InlinFormattingContext should take Block/InlineFormattingState
        https://bugs.webkit.org/show_bug.cgi?id=193383

        Reviewed by Antti Koivisto.

        This is just a downcast really.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::FormattingContext):
        (WebCore::Layout::FormattingContext::formattingState const): Deleted.
        * layout/FormattingContext.h:
        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::createFormattingContext):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::BlockFormattingContext):
        * layout/blockformatting/BlockFormattingContext.h:
        (WebCore::Layout::BlockFormattingContext::formattingState const):
        (WebCore::Layout::BlockFormattingContext::blockFormattingState const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineFormattingContext):
        (WebCore::Layout::InlineFormattingContext::splitInlineRunIfNeeded const):
        (WebCore::Layout::InlineFormattingContext::createFinalRuns const):
        (WebCore::Layout::InlineFormattingContext::postProcessInlineRuns const):
        (WebCore::Layout::InlineFormattingContext::layoutInlineContent const):
        (WebCore::Layout::InlineFormattingContext::placeInFlowPositionedChildren const):
        (WebCore::Layout::InlineFormattingContext::collectInlineContentForSubtree const):
        (WebCore::Layout::InlineFormattingContext::instrinsicWidthConstraints const):
        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::formattingState const):
        (WebCore::Layout::InlineFormattingContext::inlineFormattingState const): Deleted.
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

2019-01-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Add native function synthesis passes
        https://bugs.webkit.org/show_bug.cgi?id=193360

        Reviewed by Dean Jackson.

        This patch includes all the passes in prepare() that are between the name resolver and the
        type checker. It involves a few small pieces:

        - CheckDuplicateFunctions which makes sure the same function isn't defined twice
        - Intrinsics, which remembers all of the native types so they can be referred to by the
          rest of the compiler
        - RecursiveTypeChecker which makes sure types don't refer to themselves
        - SynthesizeArrayOperatorLength which creates operator.length() functions for arrays
        - SynthesizeConstructors which creates copy constructors and default constructors for all
          types
        - SynthesizeEnumerationFunctions which provides cast operators between enum types and their
          base types
        - SynthesizeStructureAccessors which provides getters, setters, and anders for each member
          of a struct

        No new tests because it isn't hooked up yet. Not enough of the compiler exists to have any meaningful sort
        of test. When enough of the compiler is present, I'll port the reference implementation's test suite.

        * Modules/webgpu/WHLSL/AST/WHLSLBuiltInSemantic.cpp:
        (WebCore::WHLSL::AST::BuiltInSemantic::isAcceptableType const):
        * Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.cpp:
        (WebCore::WHLSL::AST::ResourceSemantic::isAcceptableType const):
        * Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp: Added.
        (WebCore::WHLSL::checkDuplicateFunctions):
        * Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.cpp.
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.cpp: Added.
        (WebCore::WHLSL::Intrinsics::Intrinsics):
        (WebCore::WHLSL::Intrinsics::add):
        (WebCore::WHLSL::Intrinsics::addPrimitive):
        (WebCore::WHLSL::Intrinsics::addVector):
        (WebCore::WHLSL::Intrinsics::addMatrix):
        (WebCore::WHLSL::Intrinsics::addFullTexture):
        (WebCore::WHLSL::Intrinsics::addDepthTexture):
        (WebCore::WHLSL::Intrinsics::addTexture):
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.h: Added.
        (WebCore::WHLSL::Intrinsics::voidType const):
        (WebCore::WHLSL::Intrinsics::boolType const):
        (WebCore::WHLSL::Intrinsics::intType const):
        (WebCore::WHLSL::Intrinsics::uintType const):
        (WebCore::WHLSL::Intrinsics::samplerType const):
        (WebCore::WHLSL::Intrinsics::floatType const):
        (WebCore::WHLSL::Intrinsics::float3Type const):
        (WebCore::WHLSL::Intrinsics::float4Type const):
        * Modules/webgpu/WHLSL/WHLSLProgram.h:
        (WebCore::WHLSL::Program::append):
        (WebCore::WHLSL::Program::intrinsics):
        * Modules/webgpu/WHLSL/WHLSLRecursiveTypeChecker.cpp: Added.
        (WebCore::WHLSL::checkRecursiveTypes):
        * Modules/webgpu/WHLSL/WHLSLRecursiveTypeChecker.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.cpp.
        * Modules/webgpu/WHLSL/WHLSLSynthesizeArrayOperatorLength.cpp: Added.
        (WebCore::WHLSL::FindArrayTypes::takeArrayTypes):
        (WebCore::WHLSL::synthesizeArrayOperatorLength):
        * Modules/webgpu/WHLSL/WHLSLSynthesizeArrayOperatorLength.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.cpp.
        * Modules/webgpu/WHLSL/WHLSLSynthesizeConstructors.cpp: Added.
        (WebCore::WHLSL::FindAllTypes::takeUnnamedTypes):
        (WebCore::WHLSL::FindAllTypes::takeNamedTypes):
        (WebCore::WHLSL::synthesizeConstructors):
        * Modules/webgpu/WHLSL/WHLSLSynthesizeConstructors.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.cpp.
        * Modules/webgpu/WHLSL/WHLSLSynthesizeEnumerationFunctions.cpp: Added.
        (WebCore::WHLSL::synthesizeEnumerationFunctions):
        * Modules/webgpu/WHLSL/WHLSLSynthesizeEnumerationFunctions.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.cpp.
        * Modules/webgpu/WHLSL/WHLSLSynthesizeStructureAccessors.cpp: Added.
        (WebCore::WHLSL::synthesizeStructureAccessors):
        * Modules/webgpu/WHLSL/WHLSLSynthesizeStructureAccessors.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.cpp.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-01-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Avoid importing directly from subumbrella frameworks
        https://bugs.webkit.org/show_bug.cgi?id=186016
        <rdar://problem/40591038>

        Reviewed by Sam Weinig.

        * Configurations/WebCore.xcconfig: Removed -iframework options from OTHER_CFLAGS and
          OTHER_CPLUSPLUSFLAGS.
        * editing/mac/DictionaryLookupLegacy.mm: Import Quartz.h instead of a PDFKit header.
        * platform/mac/PlatformEventFactoryMac.mm: Import Carbon.h instead of HIToolbox headers.
        * platform/text/mac/TextEncodingRegistryMac.mm: Import Carbon.h instead of CarbonCore.h.

2019-01-12  Zalan Bujtas  <zalan@apple.com>

        [LFC] Move formatting context creation from FormattingState to LayoutState
        https://bugs.webkit.org/show_bug.cgi?id=193381

        Reviewed by Antti Koivisto.

        layoutState().createFormattingStateForFormattingRootIfNeeded(root).createFormattingContext(root) is not only mouthful
        but also feels unintuitive. Use layoutState().createFormattingContext(root) instead.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::FormattingContext):
        (WebCore::Layout::FormattingContext::~FormattingContext):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::shrinkToFitWidth):
        * layout/FormattingState.h:
        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::layoutFormattingContextSubtree):
        (WebCore::Layout::LayoutState::createFormattingContext):
        * layout/LayoutState.h:
        (WebCore::Layout::LayoutState::deregisterFormattingContext):
        (WebCore::Layout::LayoutState::registerFormattingContext):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::BlockFormattingContext::instrinsicWidthConstraints const):
        * layout/blockformatting/BlockFormattingState.cpp:
        (WebCore::Layout::BlockFormattingState::createFormattingContext): Deleted.
        * layout/blockformatting/BlockFormattingState.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const):
        * layout/inlineformatting/InlineFormattingState.cpp:
        (WebCore::Layout::InlineFormattingState::createFormattingContext): Deleted.
        * layout/inlineformatting/InlineFormattingState.h:

2019-01-12  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Move estimatedMarginBefore flag from state/display box to BlockFormattingContext
        https://bugs.webkit.org/show_bug.cgi?id=193375

        Reviewed by Antti Koivisto.

        The estimated marginBefore is a pre-computed, temporary value. We need to keep it around until the final vertical margin value is computed.
        Neither BlockFormattingState nor Display should hold temporary values.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginBefore const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginBeforeForAncestors const):
        (WebCore::Layout::BlockFormattingContext::hasPrecomputedMarginBefore const):
        (WebCore::Layout::BlockFormattingContext::computeFloatingPosition const):
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats const):
        (WebCore::Layout::BlockFormattingContext::computeVerticalPositionForFloatClear const):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        (WebCore::Layout::BlockFormattingContext::setEstimatedMarginBefore const):
        (WebCore::Layout::BlockFormattingContext::hasEstimatedMarginBefore const):
        (WebCore::Layout::hasPrecomputedMarginBefore): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        (WebCore::Layout::BlockFormattingContext::removeEstimatedMarginBefore const):
        (WebCore::Layout::BlockFormattingContext::estimatedMarginBefore const):
        * layout/blockformatting/BlockFormattingState.h:
        (WebCore::Layout::BlockFormattingState::setHasEstimatedMarginBefore): Deleted.
        (WebCore::Layout::BlockFormattingState::clearHasEstimatedMarginBefore): Deleted.
        (WebCore::Layout::BlockFormattingState::hasEstimatedMarginBefore const): Deleted.
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::Box):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::setHasEstimatedMarginBefore):
        (WebCore::Display::Box::invalidateEstimatedMarginBefore):
        (WebCore::Display::Box::top const):
        (WebCore::Display::Box::topLeft const):
        (WebCore::Display::Box::setEstimatedMarginBefore): Deleted.
        (WebCore::Display::Box::estimatedMarginBefore const): Deleted.
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

2019-01-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Implement the NameResolver
        https://bugs.webkit.org/show_bug.cgi?id=193007

        Reviewed by Dean Jackson.

        This is the base implementation for WHLSL's name resolver. The name resolver matches three kinds of things:
        1. It matches VariableRefs to VariableDecls
        2. It matches TypeRefs to NamedTypes
        3. It matches CallExpressions to FunctionDeclarations

        No new tests because it isn't hooked up yet. Not enough of the compiler exists to have any meaningful sort
        of test. When enough of the compiler is present, I'll port the reference implementation's test suite.

        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.cpp: Now that InferTypes.h exists, we can implement these
        functions.
        (WebCore::WHLSL::AST::FloatLiteralType::canResolve const):
        (WebCore::WHLSL::AST::FloatLiteralType::conversionCost const):
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.h: Remove unnecessary function.
        (WebCore::WHLSL::AST::FloatLiteralType::value const): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.cpp: Now that InferTypes.h exists, we can implement these
        functions.
        (WebCore::WHLSL::AST::IntegerLiteralType::canResolve const):
        (WebCore::WHLSL::AST::IntegerLiteralType::conversionCost const):
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.h: Remove unnecessary function.
        (WebCore::WHLSL::AST::IntegerLiteralType::value const): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLSpecializationConstantSemantic.cpp: Modifying Sources.txt caused the sources
        to get shuffled around, so the #includes need to be fixed.
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.cpp: Now that InferTypes.h exists, we can implement
        these functions.
        (WebCore::WHLSL::AST::UnsignedIntegerLiteralType::canResolve const):
        (WebCore::WHLSL::AST::UnsignedIntegerLiteralType::conversionCost const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.h: Remove unnecessary function.
        (WebCore::WHLSL::AST::UnsignedIntegerLiteralType::value const): Deleted.
        * Modules/webgpu/WHLSL/WHLSLInferTypes.cpp: Added. This is the replacement for UnificationContext in the
        reference compiler. It's much simpler (and we should remove UnificationContext in the reference compiler in
        favor of this design). It has three sets of functions: Tell if two types are the same, tell if two types are
        the same and commit the resolvable type, and run the above functions on type references or function arguments.
        (WebCore::WHLSL::matches):
        (WebCore::WHLSL::matchAndCommit):
        (WebCore::WHLSL::commit):
        (WebCore::WHLSL::inferTypesForTypeArguments):
        (WebCore::WHLSL::inferTypesForCall):
        * Modules/webgpu/WHLSL/WHLSLInferTypes.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.cpp.
        * Modules/webgpu/WHLSL/WHLSLNameContext.cpp: Added. This is the data structure that remembers NamedTypes,
        FunctionDeclarations, and VariableDeclarations so NameResolver can work.
        (WebCore::WHLSL::NameContext::NameContext):
        (WebCore::WHLSL::NameContext::add):
        (WebCore::WHLSL::NameContext::getTypes):
        (WebCore::WHLSL::NameContext::getFunctions):
        (WebCore::WHLSL::NameContext::getVariable):
        (WebCore::WHLSL::NameContext::exists):
        * Modules/webgpu/WHLSL/WHLSLNameContext.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.h.
        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp: Added. Use the NameContext to match up the three types of names.
        (WebCore::WHLSL::NameResolver::NameResolver):
        (WebCore::WHLSL::NameResolver::visit):
        (WebCore::WHLSL::resolveNamesInTypes):
        (WebCore::WHLSL::resolveNamesInFunctions):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.h.
        (WebCore::WHLSL::NameResolver::setCurrentFunctionDefinition):
        * Modules/webgpu/WHLSL/WHLSLProgram.h:
        (WebCore::WHLSL::Program::append): The parser needs to add all global declarations to the name context so the
        name resolver is ready to go as soon as parsing is finished.
        (WebCore::WHLSL::Program::nameContext):
        * Modules/webgpu/WHLSL/WHLSLResolveOverloadImpl.cpp: Added. Pick the appropriate FunctionDeclaration or
        NamedType for a particular CallExpression or TypeReference.
        (WebCore::WHLSL::conversionCost):
        (WebCore::WHLSL::resolveFunctionOverloadImpl):
        (WebCore::WHLSL::resolveTypeOverloadImpl):
        * Modules/webgpu/WHLSL/WHLSLResolveOverloadImpl.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.cpp.
        * Modules/webgpu/WHLSL/WHLSLResolvingType.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.cpp. This describes the two states that a type in the type resolver can be in: either an owned
        UnnamedType, or a reference to a ResolvableType. This is because every expression needs to have a type
        associated with it, but those types might be the type of a literal (aka a ResolvableType). Multiple
        expressions might need to reference the same ResolvableType so when it gets resolved, all the expressions
        get the result.
        (WebCore::WHLSL::ResolvableTypeReference::ResolvableTypeReference):
        (WebCore::WHLSL::ResolvableTypeReference::resolvableType):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-01-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Add a Visitor class
        https://bugs.webkit.org/show_bug.cgi?id=192826

        Reviewed by Dean Jackson.

        This patch exposes a bunch of the private members of WHLSL's AST nodes so that Visitor can recurse on constituent nodes.
        It also writes the recursion in Visitor.h. This is a virtual base class that gets subclassed for compiler passes.

        I've split this part into its own patch to aid reviewing of the compiler.

        * Modules/webgpu/WHLSL/AST/WHLSLStageInOutSemantic.cpp:
        * Modules/webgpu/WHLSL/WHLSLVisitor.cpp: Added.
        (WebCore::WHLSL::Visitor::visit):
        (WebCore::WHLSL::Visitor::checkErrorAndVisit):
        * Modules/webgpu/WHLSL/WHLSLVisitor.h: Added.
        (WebCore::WHLSL::Visitor::setError):
        (WebCore::WHLSL::Visitor::error const):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-01-11  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r239419): Crash in AudioSourceProviderAVFObjC::~AudioSourceProviderAVFObjC()
        https://bugs.webkit.org/show_bug.cgi?id=193342
        <rdar://problem/47119836>

        Reviewed by Eric Carlson.

        Make the TapStorage used by AudioSourceProviderAVFObjC thread-safe RefCounted.

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.h:
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::initCallback):
        (WebCore::AudioSourceProviderAVFObjC::finalizeCallback):

2019-01-11  John Wilander  <wilander@apple.com>

        Compile out Web API Statistics Collection
        https://bugs.webkit.org/show_bug.cgi?id=193370
        <rdar://problem/45388584>

        Reviewed by Brent Fulgham.

        No new tests. This patch disables functionality. The associated tests
        are skipped.

        These functions are now no-ops unless web API statistics is enabled.

        * Configurations/FeatureDefines.xcconfig:
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logFontLoad):
        (WebCore::ResourceLoadObserver::logCanvasRead):
        (WebCore::ResourceLoadObserver::logCanvasWriteOrMeasure):
        (WebCore::ResourceLoadObserver::logNavigatorAPIAccessed):
        (WebCore::ResourceLoadObserver::logScreenAPIAccessed):
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::encode const):
        (WebCore::ResourceLoadStatistics::decode):
        (WebCore::ResourceLoadStatistics::toString const):
        (WebCore::ResourceLoadStatistics::merge):
        * loader/ResourceLoadStatistics.h:
            The associated struct members are skipped unless web API
            statistics is enabled.

2019-01-11  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: leak WebIDBConnectionToClient for retain cycle
        https://bugs.webkit.org/show_bug.cgi?id=193097
        <rdar://problem/46899601>

        Reviewed by Brady Eidson.

        Let IDBConnectionToClient hold a WeakPtr of IDBConnectionToClientDelegate.

        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::IDBConnectionToClient):
        (WebCore::IDBServer::IDBConnectionToClient::identifier const):
        (WebCore::IDBServer::IDBConnectionToClient::didDeleteDatabase):
        (WebCore::IDBServer::IDBConnectionToClient::didOpenDatabase):
        (WebCore::IDBServer::IDBConnectionToClient::didAbortTransaction):
        (WebCore::IDBServer::IDBConnectionToClient::didCreateObjectStore):
        (WebCore::IDBServer::IDBConnectionToClient::didDeleteObjectStore):
        (WebCore::IDBServer::IDBConnectionToClient::didRenameObjectStore):
        (WebCore::IDBServer::IDBConnectionToClient::didClearObjectStore):
        (WebCore::IDBServer::IDBConnectionToClient::didCreateIndex):
        (WebCore::IDBServer::IDBConnectionToClient::didDeleteIndex):
        (WebCore::IDBServer::IDBConnectionToClient::didRenameIndex):
        (WebCore::IDBServer::IDBConnectionToClient::didPutOrAdd):
        (WebCore::IDBServer::IDBConnectionToClient::didGetRecord):
        (WebCore::IDBServer::IDBConnectionToClient::didGetAllRecords):
        (WebCore::IDBServer::IDBConnectionToClient::didGetCount):
        (WebCore::IDBServer::IDBConnectionToClient::didDeleteRecord):
        (WebCore::IDBServer::IDBConnectionToClient::didOpenCursor):
        (WebCore::IDBServer::IDBConnectionToClient::didIterateCursor):
        (WebCore::IDBServer::IDBConnectionToClient::didCommitTransaction):
        (WebCore::IDBServer::IDBConnectionToClient::fireVersionChangeEvent):
        (WebCore::IDBServer::IDBConnectionToClient::didStartTransaction):
        (WebCore::IDBServer::IDBConnectionToClient::didCloseFromServer):
        (WebCore::IDBServer::IDBConnectionToClient::notifyOpenDBRequestBlocked):
        (WebCore::IDBServer::IDBConnectionToClient::didGetAllDatabaseNames):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:

2019-01-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix the build after r239844
        https://bugs.webkit.org/show_bug.cgi?id=192991

        Unreviewed.

        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.cpp:
        * Modules/webgpu/WHLSL/AST/WHLSLSpecializationConstantSemantic.cpp:
        * Modules/webgpu/WHLSL/AST/WHLSLStageInOutSemantic.cpp:
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.cpp:

2019-01-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Precision drop state thrashes when dragging near the top edge of an editable element
        https://bugs.webkit.org/show_bug.cgi?id=193364
        <rdar://problem/47214117>

        Reviewed by Tim Horton.

        Add a new helper method on DragCaretController to compute the bounds of the editable element around the drop
        caret position. This is either the enclosing form control (in the case of text fields and text areas), or the
        highest editable root. See WebKit ChangeLog for more details.

        Test: DragAndDropTests.AvoidPreciseDropNearTopOfTextArea

        * editing/FrameSelection.cpp:
        (WebCore::DragCaretController::editableElementRectInRootViewCoordinates const):
        * editing/FrameSelection.h:

2019-01-11  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (PSON): Firefox app lacks Open in New Tab in menu
        https://bugs.webkit.org/show_bug.cgi?id=193366
        <rdar://problem/46097212>

        Reviewed by Simon Fraser.

        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isFirefox):
        Add a Firefox Mobile bundle check.

2019-01-11  Antti Koivisto  <antti@apple.com>

        Release assert when removing element with a map element in the shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=193351
        <rdar://problem/47208807>

        Reviewed by Ryosuke Niwa.

        When a shadow host that has a map element in the shadow tree is removed from the document, we try
        to remove the map from the scope of the host.

        Test: fast/shadow-dom/image-map-tree-scope.html

        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::insertedIntoAncestor):
        (WebCore::HTMLMapElement::removedFromAncestor):

        Add and remove image maps when the scope changes, not when the document changes.
        This matches how id/name/etc updates work in the HTMLElement.

2019-01-11  Sihui Liu  <sihui_liu@apple.com>

        Fix an assertion in UniqueIDBDatabase
        https://bugs.webkit.org/show_bug.cgi?id=193096

        Reviewed by Brady Eidson.

        m_objectStoreTransactionCounts.count(objectStore) == 1 in UniqueIDBDatabase::operationAndTransactionTimerFired()
        is not necessarily true because m_objectStoreTransactionCounts may be cleared in immediateCloseForUserDelete.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::operationAndTransactionTimerFired):

2019-01-11  Miguel Gomez  <magomez@igalia.com>

        [GTK] Garbled rendering on Youtube while scrolling under X11.
        https://bugs.webkit.org/show_bug.cgi?id=192982

        Reviewed by Carlos Garcia Campos.

        When creating a GLX window context, try to get a GLXFBConfig that has depth and stencil buffers for
        the default framebuffer.

        * platform/graphics/glx/GLContextGLX.cpp:
        (WebCore::compatibleVisuals):
        (WebCore::GLContextGLX::createWindowContext):

2019-01-11  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: leak IDBTransaction, TransactionOperation and IDBRequest in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=193167
        <rdar://problem/46891688>

        Reviewed by Geoffrey Garen.

        Do some cleanup to break retain cycle when context is stopped. 

        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::cancelForStop):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::abortOnServerAndCancelRequests):
        (WebCore::IDBTransaction::stop):
        (WebCore::IDBTransaction::removeRequest):
        * Modules/indexeddb/client/TransactionOperation.h:
        (WebCore::IDBClient::TransactionOperation::doComplete):

2019-01-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce IDL files for runtime-enabled UndoManager and UndoItem JavaScript API
        https://bugs.webkit.org/show_bug.cgi?id=193109
        <rdar://problem/44807048>

        Reviewed by Ryosuke Niwa.

        Adds new IDL files and stubs for UndoManager and UndoItem. This is an experimental DOM API that (in the near
        future) is intended only for use in internal WebKit text editing clients. This API allows the page to
        participate in the processes of undoing and redoing by defining custom undo and redo handlers, to be executed
        when undo or redo is triggered.

        Tests: editing/undo-manager/undo-manager-interfaces.html
               editing/undo-manager/undo-manager-keeps-wrapper-alive.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * UnifiedSources-input.xcfilelist:
        * WebCore.xcodeproj/project.pbxproj:

        Add new source files.

        * bindings/js/WebCoreBuiltinNames.h:

        Add "UndoManager" and "UndoItem" names.

        * dom/Document.cpp:
        (WebCore::m_undoManager):

        Have the document own a UndoManager.

        * dom/Document.h:
        (WebCore::Document::undoManager const):
        * dom/Document.idl:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setUndoManagerAPIEnabled):
        (WebCore::RuntimeEnabledFeatures::undoManagerAPIEnabled const):

        Guard the new bindings behind a runtime-enabled feature flag.

        * page/UndoItem.h: Added.
        (WebCore::UndoItem::create):
        (WebCore::UndoItem::label const):
        (WebCore::UndoItem::undoHandler const):
        (WebCore::UndoItem::redoHandler const):
        (WebCore::UndoItem::UndoItem):
        * page/UndoItem.idl: Added.
        * page/UndoManager.cpp: Added.
        (WebCore::UndoManager::addItem):
        * page/UndoManager.h: Added.
        (WebCore::UndoManager::create):
        (WebCore::UndoManager::document):
        (WebCore::UndoManager::UndoManager):
        * page/UndoManager.idl: Added.
        * page/mac/WheelEventDeltaFilterMac.h:

        Necessary (albeit unrelated) build fix to appease unified sources.

2019-01-11  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Adjust vertical position when box margin collapses through.
        https://bugs.webkit.org/show_bug.cgi?id=193346

        Reviewed by Antti Koivisto.

        If the top and bottom margins of a box are adjoining, then it is possible for margins to collapse through it.
        In this case, the position of the element depends on its relationship with the other elements whose margins are being collapsed.

        1. If the element's margins are collapsed with its parent's top margin, the top border edge of the box is defined to be the same as the parent's.
        2. Otherwise, either the element's parent is not taking part in the margin collapsing, or only the parent's bottom margin is involved.
           The position of the element's top border edge is the same as it would have been if the element had a non-zero bottom border.

        Test: fast/block/block-only/collapsed-through-with-parent.html

        * layout/MarginTypes.h:
        (WebCore::Layout::EstimatedMarginBefore::usedValue const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginBefore const):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        (WebCore::Layout::BlockFormattingContext::adjustedVerticalPositionAfterMarginCollapsing const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::estimatedMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeIgnoringCollapsingThrough):

2019-01-10  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Include the standard library
        https://bugs.webkit.org/show_bug.cgi?id=192994

        Reviewed by Jon Lee.

        A small section of the standard library is present in WHLSLStandardLibrary.txt. This gets turned into a header file containing
        its raw data at build time by invoking our xxd.pl script (which WebCore already uses for other purposes). The standard
        library is generated by running a JavaScript script, but currently there is no way to invoke JavaScript from our build
        process, so this patch includes in the standard library's raw text instead. Once the parser is faster, we can include the
        entire standard library.

        No new tests because it isn't hooked up yet.

        * DerivedSources.make:
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt: Added.
        * WebCore.xcodeproj/project.pbxproj:

2019-01-10  Jer Noble  <jer.noble@apple.com>

        <video> elements do not enter 'paused' state when playing to end over AirPlay
        https://bugs.webkit.org/show_bug.cgi?id=193295
        <rdar://problem/46708670>

        Reviewed by Eric Carlson.

        Adopt the -[AVPlayer timeControlStatus] API, which reports whether the AVPlayer is paused, playing, or blocked waiting
        for more data before playing. AirPlay devices report this state back from the remote device, and this allows the
        MediaPlayerPrivateAVFoundationObjC to differentiate between user-generated pauses and simple stalling.

        Adopting this API allows us to remove the heuristic from rateChanged() which inteprets a rate change when the
        readyState > HAVE_ENOUGH as an intentional pause.

        Drive-by fix: MediaPlayerPrivateAVFoundation had some code to delay calling platformPlay()
        until the first frame became available. But this code was entirely undermined by the previous
        behavior of setRate(). Fixing setRate()/setRateDouble() to only start playback if playback was
        actually requested started making this code work for the first time, and broke some API tests.
        Thus, we're removing this previously dead code.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):
        (WebCore::MediaPlayerPrivateAVFoundation::play):
        (WebCore::MediaPlayerPrivateAVFoundation::pause):
        (WebCore::MediaPlayerPrivateAVFoundation::rateChanged):
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::didEnd):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformPlay):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformPause):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setRateDouble):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setPlayerRate):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::timeControlStatusDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldObserveTimeControlStatus):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):

2019-01-10  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix the build after r239844
        https://bugs.webkit.org/show_bug.cgi?id=192991

        Unreviewed.

        * Modules/webgpu/WHLSL/AST/WHLSLBuiltInSemantic.cpp:
        (WebCore::WHLSL::AST::BuiltInSemantic::isAcceptableType const):
        (WebCore::WHLSL::AST::BuiltInSemantic::isAcceptableForShaderItemDirection const):
        * Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.cpp:
        (WebCore::WHLSL::AST::ResourceSemantic::isAcceptableType const):
        (WebCore::WHLSL::AST::ResourceSemantic::isAcceptableForShaderItemDirection const):
        * Modules/webgpu/WHLSL/AST/WHLSLSpecializationConstantSemantic.cpp:
        (WebCore::WHLSL::AST::SpecializationConstantSemantic::isAcceptableType const):
        (WebCore::WHLSL::AST::SpecializationConstantSemantic::isAcceptableForShaderItemDirection const):
        * Modules/webgpu/WHLSL/AST/WHLSLStageInOutSemantic.cpp:
        (WebCore::WHLSL::AST::StageInOutSemantic::isAcceptableType const):
        (WebCore::WHLSL::AST::StageInOutSemantic::isAcceptableForShaderItemDirection const):

2019-01-10  Justin Fan  <justin_fan@apple.com>

        [WebGPU] WebGPUBindGroup and device::createBindGroup prototype
        https://bugs.webkit.org/show_bug.cgi?id=193341

        Reviewed by Myles C. Maxfield.

        Add *GPUBindGroup class stubs and the ability to create WebGPUBindGroups via the API.

        Test: bind-groups.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

        * Modules/webgpu/WebGPUBindGroup.cpp:
        (WebCore::WebGPUBindGroup::create):
        (WebCore::WebGPUBindGroup::WebGPUBindGroup):
        * Modules/webgpu/WebGPUBindGroup.h:
        * Modules/webgpu/WebGPUBindGroup.idl: Enable createBindGroup().
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::BindingResourceVisitor::operator() const): Added. Validate and convert WebGPUBindGroupDescriptor to GPU* version.
        (WebCore::WebGPUDevice::createBindGroup const): Added.
        * Modules/webgpu/WebGPUDevice.h:
        * platform/graphics/gpu/GPUBindGroup.cpp:
        (WebCore::GPUBindGroup::create):
        (WebCore::GPUBindGroup::GPUBindGroup):
        * platform/graphics/gpu/GPUBindGroup.h:
        * platform/graphics/gpu/GPUBufferBinding.h:
        * platform/graphics/gpu/cocoa/GPUBindGroupLayoutMetal.mm:
        (WebCore::appendArgumentToArray): Pass RetainPtr by reference to actually update descriptor.

2019-01-10  Simon Fraser  <simon.fraser@apple.com>

        Fix rare crash under ScrollbarThemeMac::paintScrollCorner()
        https://bugs.webkit.org/show_bug.cgi?id=193337
        rdar://problem/47179993

        Reviewed by Zalan Bujtas.
        
        Async image decoding can trigger a FrameView::traverseForPaintInvalidation() fake paint,
        which creates a GraphicsContext with no platform context. However, we could hit ScrollView::paintScrollbars()
        which tried to get at the platform context, and then crashed.
        
        So protect two functions in ScrollbarThemeMac with if (context.paintingDisabled()) checks. I verified
        that other scrollbar-related painting code paths were already protected.

        Hard to test because it depends on async image decoding timing.

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        (WebCore::ScrollbarThemeMac::paintScrollCorner):

2019-01-10  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Implement parser AST nodes
        https://bugs.webkit.org/show_bug.cgi?id=192991

        Reviewed by Alex Christensen.

        This patch creates all the AST nodes which will be the result of running the parser.
        This patch used to be a part of the "create a WHLSL parser" patch but I split them
        out in order to aid reviewing.

        The classes were mechanically created to match the result of the parser. There are
        nodes for things like ForLoops, LogicalNotExpressions, DereferenceExpressions,
        StructureDefinitions, and things like that. The classes don't actually have any logic
        in them - they are currently just containers to hold the structure of the parsed
        program. Some of these nodes (like constexprs) are just Variants of the various things
        they can in the form of.

        No new tests because the parser doesn't exist to create the new AST nodes yet.

        * Modules/webgpu/WHLSL/AST/WHLSLArrayReferenceType.h: Added.
        (WebCore::WHLSL::AST::ArrayReferenceType::ArrayReferenceType):
        * Modules/webgpu/WHLSL/AST/WHLSLArrayType.h: Added.
        (WebCore::WHLSL::AST::ArrayType::ArrayType):
        (WebCore::WHLSL::AST::ArrayType::type const):
        (WebCore::WHLSL::AST::ArrayType::type):
        (WebCore::WHLSL::AST::ArrayType::numElements const):
        * Modules/webgpu/WHLSL/AST/WHLSLAssignmentExpression.h: Added.
        (WebCore::WHLSL::AST::AssignmentExpression::AssignmentExpression):
        (WebCore::WHLSL::AST::AssignmentExpression::left):
        (WebCore::WHLSL::AST::AssignmentExpression::right):
        * Modules/webgpu/WHLSL/AST/WHLSLBaseFunctionAttribute.h: Added.
        (WebCore::WHLSL::AST::BaseFunctionAttribute::BaseFunctionAttribute):
        * Modules/webgpu/WHLSL/AST/WHLSLBaseSemantic.h: Added.
        (WebCore::WHLSL::AST::BaseSemantic::BaseSemantic):
        * Modules/webgpu/WHLSL/AST/WHLSLBlock.h: Added.
        (WebCore::WHLSL::AST::Block::Block):
        (WebCore::WHLSL::AST::Block::statements):
        * Modules/webgpu/WHLSL/AST/WHLSLBooleanLiteral.h: Added.
        (WebCore::WHLSL::AST::BooleanLiteral::BooleanLiteral):
        (WebCore::WHLSL::AST::BooleanLiteral::value const):
        (WebCore::WHLSL::AST::BooleanLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLBreak.h: Added.
        (WebCore::WHLSL::AST::Break::Break):
        * Modules/webgpu/WHLSL/AST/WHLSLBuiltInSemantic.cpp: Added.
        (WebCore::WHLSL::AST::BuiltInSemantic::isAcceptableType const):
        (WebCore::WHLSL::AST::BuiltInSemantic::isAcceptableForShaderItemDirection const):
        * Modules/webgpu/WHLSL/AST/WHLSLBuiltInSemantic.h: Added.
        (WebCore::WHLSL::AST::BuiltInSemantic::BuiltInSemantic):
        (WebCore::WHLSL::AST::BuiltInSemantic::variable const):
        (WebCore::WHLSL::AST::BuiltInSemantic::operator== const):
        (WebCore::WHLSL::AST::BuiltInSemantic::operator!= const):
        * Modules/webgpu/WHLSL/AST/WHLSLCallExpression.h: Added.
        (WebCore::WHLSL::AST::CallExpression::CallExpression):
        (WebCore::WHLSL::AST::CallExpression::arguments):
        (WebCore::WHLSL::AST::CallExpression::name):
        (WebCore::WHLSL::AST::CallExpression::setCastData):
        (WebCore::WHLSL::AST::CallExpression::isCast):
        (WebCore::WHLSL::AST::CallExpression::castReturnType):
        (WebCore::WHLSL::AST::CallExpression::hasOverloads const):
        (WebCore::WHLSL::AST::CallExpression::overloads):
        (WebCore::WHLSL::AST::CallExpression::setOverloads):
        (WebCore::WHLSL::AST::CallExpression::setFunction):
        * Modules/webgpu/WHLSL/AST/WHLSLCommaExpression.h: Added.
        (WebCore::WHLSL::AST::CommaExpression::CommaExpression):
        (WebCore::WHLSL::AST::CommaExpression::list):
        * Modules/webgpu/WHLSL/AST/WHLSLConstantExpression.h: Added.
        (WebCore::WHLSL::AST::ConstantExpression::ConstantExpression):
        (WebCore::WHLSL::AST::ConstantExpression::integerLiteral):
        (WebCore::WHLSL::AST::ConstantExpression::visit):
        (WebCore::WHLSL::AST::ConstantExpression::visit const):
        (WebCore::WHLSL::AST::ConstantExpression::clone const):
        (WebCore::WHLSL::AST::ConstantExpression::matches const):
        * Modules/webgpu/WHLSL/AST/WHLSLConstantExpressionEnumerationMemberReference.h: Added.
        (WebCore::WHLSL::AST::ConstantExpressionEnumerationMemberReference::ConstantExpressionEnumerationMemberReference):
        (WebCore::WHLSL::AST::ConstantExpressionEnumerationMemberReference::left const):
        (WebCore::WHLSL::AST::ConstantExpressionEnumerationMemberReference::right const):
        (WebCore::WHLSL::AST::ConstantExpressionEnumerationMemberReference::clone const):
        (WebCore::WHLSL::AST::ConstantExpressionEnumerationMemberReference::enumerationDefinition):
        (WebCore::WHLSL::AST::ConstantExpressionEnumerationMemberReference::enumerationDefinition const):
        (WebCore::WHLSL::AST::ConstantExpressionEnumerationMemberReference::enumerationMember):
        (WebCore::WHLSL::AST::ConstantExpressionEnumerationMemberReference::enumerationMember const):
        (WebCore::WHLSL::AST::ConstantExpressionEnumerationMemberReference::setEnumerationMember):
        * Modules/webgpu/WHLSL/AST/WHLSLContinue.h: Added.
        (WebCore::WHLSL::AST::Continue::Continue):
        * Modules/webgpu/WHLSL/AST/WHLSLDereferenceExpression.h: Added.
        (WebCore::WHLSL::AST::DereferenceExpression::DereferenceExpression):
        (WebCore::WHLSL::AST::DereferenceExpression::pointer):
        * Modules/webgpu/WHLSL/AST/WHLSLDoWhileLoop.h: Added.
        (WebCore::WHLSL::AST::DoWhileLoop::DoWhileLoop):
        (WebCore::WHLSL::AST::DoWhileLoop::body):
        (WebCore::WHLSL::AST::DoWhileLoop::conditional):
        * Modules/webgpu/WHLSL/AST/WHLSLDotExpression.h: Added.
        (WebCore::WHLSL::AST::DotExpression::DotExpression):
        (WebCore::WHLSL::AST::DotExpression::fieldName):
        * Modules/webgpu/WHLSL/AST/WHLSLEffectfulExpressionStatement.h: Added.
        (WebCore::WHLSL::AST::EffectfulExpressionStatement::EffectfulExpressionStatement):
        (WebCore::WHLSL::AST::EffectfulExpressionStatement::effectfulExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationDefinition.h: Added.
        (WebCore::WHLSL::AST::EnumerationDefinition::EnumerationDefinition):
        (WebCore::WHLSL::AST::EnumerationDefinition::type):
        (WebCore::WHLSL::AST::EnumerationDefinition::add):
        (WebCore::WHLSL::AST::EnumerationDefinition::memberByName):
        (WebCore::WHLSL::AST::EnumerationDefinition::enumerationMembers):
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationMember.h: Added.
        (WebCore::WHLSL::AST::EnumerationMember::EnumerationMember):
        (WebCore::WHLSL::AST::EnumerationMember::origin const):
        (WebCore::WHLSL::AST::EnumerationMember::name):
        (WebCore::WHLSL::AST::EnumerationMember::value):
        (WebCore::WHLSL::AST::EnumerationMember::setValue):
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationMemberLiteral.h: Added.
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::EnumerationMemberLiteral):
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::enumerationMember):
        * Modules/webgpu/WHLSL/AST/WHLSLExpression.h: Added.
        (WebCore::WHLSL::AST::Expression::Expression):
        (WebCore::WHLSL::AST::Expression::origin const):
        (WebCore::WHLSL::AST::Expression::isAssignmentExpression const):
        (WebCore::WHLSL::AST::Expression::isBooleanLiteral const):
        (WebCore::WHLSL::AST::Expression::isCallExpression const):
        (WebCore::WHLSL::AST::Expression::isCommaExpression const):
        (WebCore::WHLSL::AST::Expression::isDereferenceExpression const):
        (WebCore::WHLSL::AST::Expression::isDotExpression const):
        (WebCore::WHLSL::AST::Expression::isFloatLiteral const):
        (WebCore::WHLSL::AST::Expression::isIndexExpression const):
        (WebCore::WHLSL::AST::Expression::isIntegerLiteral const):
        (WebCore::WHLSL::AST::Expression::isLogicalExpression const):
        (WebCore::WHLSL::AST::Expression::isLogicalNotExpression const):
        (WebCore::WHLSL::AST::Expression::isMakeArrayReferenceExpression const):
        (WebCore::WHLSL::AST::Expression::isMakePointerExpression const):
        (WebCore::WHLSL::AST::Expression::isNullLiteral const):
        (WebCore::WHLSL::AST::Expression::isPropertyAccessExpression const):
        (WebCore::WHLSL::AST::Expression::isReadModifyWriteExpression const):
        (WebCore::WHLSL::AST::Expression::isTernaryExpression const):
        (WebCore::WHLSL::AST::Expression::isUnsignedIntegerLiteral const):
        (WebCore::WHLSL::AST::Expression::isVariableReference const):
        (WebCore::WHLSL::AST::Expression::isEnumerationMemberLiteral const):
        * Modules/webgpu/WHLSL/AST/WHLSLFallthrough.h: Added.
        (WebCore::WHLSL::AST::Fallthrough::Fallthrough):
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteral.h: Added.
        (WebCore::WHLSL::AST::FloatLiteral::FloatLiteral):
        (WebCore::WHLSL::AST::FloatLiteral::type):
        (WebCore::WHLSL::AST::FloatLiteral::value const):
        (WebCore::WHLSL::AST::FloatLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.cpp: Added.
        (WebCore::WHLSL::AST::FloatLiteralType::FloatLiteralType):
        (WebCore::WHLSL::AST::FloatLiteralType::canResolve const):
        (WebCore::WHLSL::AST::FloatLiteralType::conversionCost const):
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.h: Added.
        (WebCore::WHLSL::AST::FloatLiteralType::preferredType):
        * Modules/webgpu/WHLSL/AST/WHLSLForLoop.h: Added.
        (WebCore::WHLSL::AST::ForLoop::ForLoop):
        (WebCore::WHLSL::AST::ForLoop::~ForLoop):
        (WebCore::WHLSL::AST::ForLoop::initialization):
        (WebCore::WHLSL::AST::ForLoop::condition):
        (WebCore::WHLSL::AST::ForLoop::increment):
        (WebCore::WHLSL::AST::ForLoop::body):
        * Modules/webgpu/WHLSL/AST/WHLSLFunctionAttribute.h: Added.
        * Modules/webgpu/WHLSL/AST/WHLSLFunctionDeclaration.h: Added.
        (WebCore::WHLSL::AST::FunctionDeclaration::FunctionDeclaration):
        (WebCore::WHLSL::AST::FunctionDeclaration::isFunctionDefinition const):
        (WebCore::WHLSL::AST::FunctionDeclaration::isNativeFunctionDeclaration const):
        (WebCore::WHLSL::AST::FunctionDeclaration::attributeBlock):
        (WebCore::WHLSL::AST::FunctionDeclaration::entryPointType const):
        (WebCore::WHLSL::AST::FunctionDeclaration::type const):
        (WebCore::WHLSL::AST::FunctionDeclaration::type):
        (WebCore::WHLSL::AST::FunctionDeclaration::name const):
        (WebCore::WHLSL::AST::FunctionDeclaration::isCast const):
        (WebCore::WHLSL::AST::FunctionDeclaration::parameters const):
        (WebCore::WHLSL::AST::FunctionDeclaration::parameters):
        (WebCore::WHLSL::AST::FunctionDeclaration::semantic):
        (WebCore::WHLSL::AST::FunctionDeclaration::isOperator const):
        * Modules/webgpu/WHLSL/AST/WHLSLFunctionDefinition.h: Added.
        (WebCore::WHLSL::AST::FunctionDefinition::FunctionDefinition):
        (WebCore::WHLSL::AST::FunctionDefinition::block):
        (WebCore::WHLSL::AST::FunctionDefinition::restricted const):
        * Modules/webgpu/WHLSL/AST/WHLSLIfStatement.h: Added.
        (WebCore::WHLSL::AST::IfStatement::IfStatement):
        (WebCore::WHLSL::AST::IfStatement::conditional):
        (WebCore::WHLSL::AST::IfStatement::body):
        (WebCore::WHLSL::AST::IfStatement::elseBody):
        * Modules/webgpu/WHLSL/AST/WHLSLIndexExpression.h: Added.
        (WebCore::WHLSL::AST::IndexExpression::IndexExpression):
        (WebCore::WHLSL::AST::IndexExpression::indexExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteral.cpp: Added.
        (WebCore::WHLSL::AST::IntegerLiteral::valueForSelectedType const):
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteral.h: Added.
        (WebCore::WHLSL::AST::IntegerLiteral::IntegerLiteral):
        (WebCore::WHLSL::AST::IntegerLiteral::type):
        (WebCore::WHLSL::AST::IntegerLiteral::value const):
        (WebCore::WHLSL::AST::IntegerLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.cpp: Added.
        (WebCore::WHLSL::AST::IntegerLiteralType::IntegerLiteralType):
        (WebCore::WHLSL::AST::IntegerLiteralType::canResolve const):
        (WebCore::WHLSL::AST::IntegerLiteralType::conversionCost const):
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.h: Added.
        (WebCore::WHLSL::AST::IntegerLiteralType::preferredType):
        * Modules/webgpu/WHLSL/AST/WHLSLLogicalExpression.h: Added.
        (WebCore::WHLSL::AST::LogicalExpression::LogicalExpression):
        (WebCore::WHLSL::AST::LogicalExpression::type const):
        (WebCore::WHLSL::AST::LogicalExpression::left):
        (WebCore::WHLSL::AST::LogicalExpression::right):
        * Modules/webgpu/WHLSL/AST/WHLSLLogicalNotExpression.h: Added.
        (WebCore::WHLSL::AST::LogicalNotExpression::LogicalNotExpression):
        (WebCore::WHLSL::AST::LogicalNotExpression::operand):
        * Modules/webgpu/WHLSL/AST/WHLSLMakeArrayReferenceExpression.h: Added.
        (WebCore::WHLSL::AST::MakeArrayReferenceExpression::MakeArrayReferenceExpression):
        (WebCore::WHLSL::AST::MakeArrayReferenceExpression::lValue):
        * Modules/webgpu/WHLSL/AST/WHLSLMakePointerExpression.h: Added.
        (WebCore::WHLSL::AST::MakePointerExpression::MakePointerExpression):
        (WebCore::WHLSL::AST::MakePointerExpression::lValue):
        * Modules/webgpu/WHLSL/AST/WHLSLNamedType.h: Added.
        (WebCore::WHLSL::AST::NamedType::NamedType):
        (WebCore::WHLSL::AST::NamedType::origin const):
        (WebCore::WHLSL::AST::NamedType::name):
        (WebCore::WHLSL::AST::NamedType::isTypeDefinition const):
        (WebCore::WHLSL::AST::NamedType::isStructureDefinition const):
        (WebCore::WHLSL::AST::NamedType::isEnumerationDefinition const):
        (WebCore::WHLSL::AST::NamedType::isNativeTypeDeclaration const):
        (WebCore::WHLSL::AST::NamedType::unifyNode const):
        (WebCore::WHLSL::AST::NamedType::unifyNode):
        * Modules/webgpu/WHLSL/AST/WHLSLNativeFunctionDeclaration.h: Added.
        (WebCore::WHLSL::AST::NativeFunctionDeclaration::NativeFunctionDeclaration):
        (WebCore::WHLSL::AST::NativeFunctionDeclaration::restricted const):
        * Modules/webgpu/WHLSL/AST/WHLSLNativeTypeDeclaration.h: Added.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::NativeTypeDeclaration):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::name const):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::name):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::typeArguments):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isInt const):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isNumber const):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isFloating const):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isVector const):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isMatrix const):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isTexture const):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isSigned const):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::std::function<bool const):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::std::function<int64_t const):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::iterateAllValues):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsInt):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsNumber):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsFloating):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsVector):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsMatrix):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsTexture):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsSigned):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setCanRepresentInteger):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setCanRepresentUnsignedInteger):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setCanRepresentFloat):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setSuccessor):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setFormatValueFromInteger):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setFormatValueFromUnsignedInteger):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIterateAllValues):
        * Modules/webgpu/WHLSL/AST/WHLSLNode.h: Added.
        * Modules/webgpu/WHLSL/AST/WHLSLNullLiteral.h: Added.
        (WebCore::WHLSL::AST::NullLiteral::NullLiteral):
        (WebCore::WHLSL::AST::NullLiteral::type):
        (WebCore::WHLSL::AST::NullLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLNullLiteralType.cpp: Added.
        (WebCore::WHLSL::AST::NullLiteralType::canResolve const):
        (WebCore::WHLSL::AST::NullLiteralType::conversionCost const):
        * Modules/webgpu/WHLSL/AST/WHLSLNullLiteralType.h: Added.
        * Modules/webgpu/WHLSL/AST/WHLSLNumThreadsFunctionAttribute.h: Added.
        (WebCore::WHLSL::AST::NumThreadsFunctionAttribute::NumThreadsFunctionAttribute):
        (WebCore::WHLSL::AST::NumThreadsFunctionAttribute::width const):
        (WebCore::WHLSL::AST::NumThreadsFunctionAttribute::height const):
        (WebCore::WHLSL::AST::NumThreadsFunctionAttribute::depth const):
        * Modules/webgpu/WHLSL/AST/WHLSLPointerType.h: Added.
        (WebCore::WHLSL::AST::PointerType::PointerType):
        * Modules/webgpu/WHLSL/AST/WHLSLPropertyAccessExpression.h: Added.
        (WebCore::WHLSL::AST::PropertyAccessExpression::PropertyAccessExpression):
        (WebCore::WHLSL::AST::PropertyAccessExpression::possibleGetOverloads):
        (WebCore::WHLSL::AST::PropertyAccessExpression::possibleSetOverloads):
        (WebCore::WHLSL::AST::PropertyAccessExpression::possibleAndOverloads):
        (WebCore::WHLSL::AST::PropertyAccessExpression::setPossibleGetOverloads):
        (WebCore::WHLSL::AST::PropertyAccessExpression::setPossibleSetOverloads):
        (WebCore::WHLSL::AST::PropertyAccessExpression::setPossibleAndOverloads):
        (WebCore::WHLSL::AST::PropertyAccessExpression::base):
        * Modules/webgpu/WHLSL/AST/WHLSLQualifier.h: Added.
        * Modules/webgpu/WHLSL/AST/WHLSLReadModifyWriteExpression.h: Added.
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::create):
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::setNewValueExpression):
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::setResultExpression):
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::oldVariableReference):
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::newVariableReference):
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::lValue):
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::oldValue):
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::newValue):
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::newValueExpression):
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::resultExpression):
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::ReadModifyWriteExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLReferenceType.h: Added.
        (WebCore::WHLSL::AST::ReferenceType::ReferenceType):
        (WebCore::WHLSL::AST::ReferenceType::addressSpace const):
        (WebCore::WHLSL::AST::ReferenceType::elementType const):
        (WebCore::WHLSL::AST::ReferenceType::elementType):
        * Modules/webgpu/WHLSL/AST/WHLSLResolvableType.h: Added.
        (WebCore::WHLSL::AST::ResolvableType::isFloatLiteralType const):
        (WebCore::WHLSL::AST::ResolvableType::isIntegerLiteralType const):
        (WebCore::WHLSL::AST::ResolvableType::isNullLiteralType const):
        (WebCore::WHLSL::AST::ResolvableType::isUnsignedIntegerLiteralType const):
        (WebCore::WHLSL::AST::ResolvableType::resolvedType const):
        (WebCore::WHLSL::AST::ResolvableType::resolvedType):
        (WebCore::WHLSL::AST::ResolvableType::resolve):
        * Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.cpp: Added.
        (WebCore::WHLSL::AST::ResourceSemantic::isAcceptableType const):
        (WebCore::WHLSL::AST::ResourceSemantic::isAcceptableForShaderItemDirection const):
        * Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.h: Added.
        (WebCore::WHLSL::AST::ResourceSemantic::ResourceSemantic):
        (WebCore::WHLSL::AST::ResourceSemantic::mode const):
        (WebCore::WHLSL::AST::ResourceSemantic::index const):
        (WebCore::WHLSL::AST::ResourceSemantic::space const):
        (WebCore::WHLSL::AST::ResourceSemantic::operator== const):
        (WebCore::WHLSL::AST::ResourceSemantic::operator!= const):
        * Modules/webgpu/WHLSL/AST/WHLSLReturn.h: Added.
        (WebCore::WHLSL::AST::Return::Return):
        (WebCore::WHLSL::AST::Return::value):
        (WebCore::WHLSL::AST::Return::function):
        (WebCore::WHLSL::AST::Return::setFunction):
        * Modules/webgpu/WHLSL/AST/WHLSLSemantic.h: Added.
        * Modules/webgpu/WHLSL/AST/WHLSLSpecializationConstantSemantic.cpp: Added.
        (WebCore::WHLSL::AST::SpecializationConstantSemantic::isAcceptableType const):
        (WebCore::WHLSL::AST::SpecializationConstantSemantic::isAcceptableForShaderItemDirection const):
        * Modules/webgpu/WHLSL/AST/WHLSLSpecializationConstantSemantic.h: Added.
        (WebCore::WHLSL::AST::SpecializationConstantSemantic::SpecializationConstantSemantic):
        (WebCore::WHLSL::AST::SpecializationConstantSemantic::operator== const):
        (WebCore::WHLSL::AST::SpecializationConstantSemantic::operator!= const):
        * Modules/webgpu/WHLSL/AST/WHLSLStageInOutSemantic.cpp: Added.
        (WebCore::WHLSL::AST::StageInOutSemantic::isAcceptableType const):
        (WebCore::WHLSL::AST::StageInOutSemantic::isAcceptableForShaderItemDirection const):
        * Modules/webgpu/WHLSL/AST/WHLSLStageInOutSemantic.h: Added.
        (WebCore::WHLSL::AST::StageInOutSemantic::StageInOutSemantic):
        (WebCore::WHLSL::AST::StageInOutSemantic::index const):
        (WebCore::WHLSL::AST::StageInOutSemantic::operator== const):
        (WebCore::WHLSL::AST::StageInOutSemantic::operator!= const):
        * Modules/webgpu/WHLSL/AST/WHLSLStatement.h: Added.
        (WebCore::WHLSL::AST::Statement::Statement):
        (WebCore::WHLSL::AST::Statement::isBlock const):
        (WebCore::WHLSL::AST::Statement::isBreak const):
        (WebCore::WHLSL::AST::Statement::isContinue const):
        (WebCore::WHLSL::AST::Statement::isDoWhileLoop const):
        (WebCore::WHLSL::AST::Statement::isEffectfulExpressionStatement const):
        (WebCore::WHLSL::AST::Statement::isFallthrough const):
        (WebCore::WHLSL::AST::Statement::isForLoop const):
        (WebCore::WHLSL::AST::Statement::isIfStatement const):
        (WebCore::WHLSL::AST::Statement::isReturn const):
        (WebCore::WHLSL::AST::Statement::isSwitchCase const):
        (WebCore::WHLSL::AST::Statement::isSwitchStatement const):
        (WebCore::WHLSL::AST::Statement::isTrap const):
        (WebCore::WHLSL::AST::Statement::isVariableDeclarationsStatement const):
        (WebCore::WHLSL::AST::Statement::isWhileLoop const):
        * Modules/webgpu/WHLSL/AST/WHLSLStructureDefinition.h: Added.
        (WebCore::WHLSL::AST::StructureDefinition::StructureDefinition):
        (WebCore::WHLSL::AST::StructureDefinition::structureElements):
        * Modules/webgpu/WHLSL/AST/WHLSLStructureElement.h: Added.
        (WebCore::WHLSL::AST::StructureElement::StructureElement):
        (WebCore::WHLSL::AST::StructureElement::origin const):
        (WebCore::WHLSL::AST::StructureElement::type):
        (WebCore::WHLSL::AST::StructureElement::name):
        (WebCore::WHLSL::AST::StructureElement::semantic):
        * Modules/webgpu/WHLSL/AST/WHLSLSwitchCase.h: Added.
        (WebCore::WHLSL::AST::SwitchCase::SwitchCase):
        (WebCore::WHLSL::AST::SwitchCase::value):
        (WebCore::WHLSL::AST::SwitchCase::block):
        * Modules/webgpu/WHLSL/AST/WHLSLSwitchStatement.h: Added.
        (WebCore::WHLSL::AST::SwitchStatement::SwitchStatement):
        (WebCore::WHLSL::AST::SwitchStatement::value):
        (WebCore::WHLSL::AST::SwitchStatement::switchCases):
        * Modules/webgpu/WHLSL/AST/WHLSLTernaryExpression.h: Added.
        (WebCore::WHLSL::AST::TernaryExpression::TernaryExpression):
        (WebCore::WHLSL::AST::TernaryExpression::predicate):
        (WebCore::WHLSL::AST::TernaryExpression::bodyExpression):
        (WebCore::WHLSL::AST::TernaryExpression::elseExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLTrap.h: Added.
        (WebCore::WHLSL::AST::Trap::Trap):
        * Modules/webgpu/WHLSL/AST/WHLSLType.h: Added.
        (WebCore::WHLSL::AST::Type::isNamedType const):
        (WebCore::WHLSL::AST::Type::isUnnamedType const):
        (WebCore::WHLSL::AST::Type::isResolvableType const):
        * Modules/webgpu/WHLSL/AST/WHLSLTypeArgument.cpp: Added.
        (WebCore::WHLSL::AST::clone):
        * Modules/webgpu/WHLSL/AST/WHLSLTypeArgument.h: Added.
        * Modules/webgpu/WHLSL/AST/WHLSLTypeDefinition.h: Added.
        (WebCore::WHLSL::AST::TypeDefinition::TypeDefinition):
        (WebCore::WHLSL::AST::TypeDefinition::type):
        * Modules/webgpu/WHLSL/AST/WHLSLTypeReference.cpp: Added.
        (WebCore::WHLSL::AST::TypeReference::wrap):
        * Modules/webgpu/WHLSL/AST/WHLSLTypeReference.h: Added.
        (WebCore::WHLSL::AST::TypeReference::TypeReference):
        (WebCore::WHLSL::AST::TypeReference::name):
        (WebCore::WHLSL::AST::TypeReference::typeArguments):
        (WebCore::WHLSL::AST::TypeReference::resolvedType const):
        (WebCore::WHLSL::AST::TypeReference::setResolvedType):
        (WebCore::WHLSL::AST::TypeReference::cloneTypeReference const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.h: Added.
        (WebCore::WHLSL::AST::UnnamedType::UnnamedType):
        (WebCore::WHLSL::AST::UnnamedType::isTypeReference const):
        (WebCore::WHLSL::AST::UnnamedType::isPointerType const):
        (WebCore::WHLSL::AST::UnnamedType::isArrayReferenceType const):
        (WebCore::WHLSL::AST::UnnamedType::isArrayType const):
        (WebCore::WHLSL::AST::UnnamedType::isReferenceType const):
        (WebCore::WHLSL::AST::UnnamedType::unifyNode const):
        (WebCore::WHLSL::AST::UnnamedType::unifyNode):
        (WebCore::WHLSL::AST::UnnamedType::origin const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteral.cpp: Added.
        (WebCore::WHLSL::AST::UnsignedIntegerLiteral::valueForSelectedType const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteral.h: Added.
        (WebCore::WHLSL::AST::UnsignedIntegerLiteral::UnsignedIntegerLiteral):
        (WebCore::WHLSL::AST::UnsignedIntegerLiteral::type):
        (WebCore::WHLSL::AST::UnsignedIntegerLiteral::value const):
        (WebCore::WHLSL::AST::UnsignedIntegerLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.cpp: Added.
        (WebCore::WHLSL::AST::UnsignedIntegerLiteralType::UnsignedIntegerLiteralType):
        (WebCore::WHLSL::AST::UnsignedIntegerLiteralType::canResolve const):
        (WebCore::WHLSL::AST::UnsignedIntegerLiteralType::conversionCost const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.h: Added.
        (WebCore::WHLSL::AST::UnsignedIntegerLiteralType::preferredType):
        * Modules/webgpu/WHLSL/AST/WHLSLValue.h: Added.
        (WebCore::WHLSL::AST::Value::Value):
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclaration.h: Added.
        (WebCore::WHLSL::AST::VariableDeclaration::VariableDeclaration):
        (WebCore::WHLSL::AST::VariableDeclaration::origin const):
        (WebCore::WHLSL::AST::VariableDeclaration::name):
        (WebCore::WHLSL::AST::VariableDeclaration::type const):
        (WebCore::WHLSL::AST::VariableDeclaration::type):
        (WebCore::WHLSL::AST::VariableDeclaration::semantic):
        (WebCore::WHLSL::AST::VariableDeclaration::initializer):
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclarationsStatement.h: Added.
        (WebCore::WHLSL::AST::VariableDeclarationsStatement::VariableDeclarationsStatement):
        (WebCore::WHLSL::AST::VariableDeclarationsStatement::variableDeclarations):
        * Modules/webgpu/WHLSL/AST/WHLSLVariableReference.h: Added.
        (WebCore::WHLSL::AST::VariableReference::VariableReference):
        (WebCore::WHLSL::AST::VariableReference::wrap):
        (WebCore::WHLSL::AST::VariableReference::name):
        (WebCore::WHLSL::AST::VariableReference::variable):
        (WebCore::WHLSL::AST::VariableReference::setVariable):
        * Modules/webgpu/WHLSL/AST/WHLSLWhileLoop.h: Added.
        (WebCore::WHLSL::AST::WhileLoop::WhileLoop):
        (WebCore::WHLSL::AST::WhileLoop::conditional):
        (WebCore::WHLSL::AST::WhileLoop::body):
        * Modules/webgpu/WHLSL/WHLSLLexer.cpp:
        * Modules/webgpu/WHLSL/WHLSLParser.cpp: Added.
        * Modules/webgpu/WHLSL/WHLSLParser.h: Added.
        * Modules/webgpu/WHLSL/WHLSLProgram.h: Added.
        (WebCore::WHLSL::Program::append):
        (WebCore::WHLSL::Program::nameContext):
        (WebCore::WHLSL::Program::intrinsics):
        (WebCore::WHLSL::Program::typeDefinitions):
        (WebCore::WHLSL::Program::structureDefinitions):
        (WebCore::WHLSL::Program::enumerationDefinitions):
        (WebCore::WHLSL::Program::functionDefinitions const):
        (WebCore::WHLSL::Program::functionDefinitions):
        (WebCore::WHLSL::Program::nativeFunctionDeclarations const):
        (WebCore::WHLSL::Program::nativeFunctionDeclarations):
        (WebCore::WHLSL::Program::nativeTypeDeclarations):

2019-01-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Bindings generator emits incorrect code when using VoidCallback as an IDL dictionary attribute
        https://bugs.webkit.org/show_bug.cgi?id=193328

        Reviewed by Chris Dumez.

        Currently, when generating the function body of `convertDictionary`, our bindings generator does not pass in an
        argument to use as the `$globalObjectReference` in `JSValueToNative`, when generating code to convert a wrapped
        attribute value to the native value. As a result, if the generated IDL type returns `true` from
        `JSValueToNativeDOMConvertNeedsGlobalObject` (i.e. for callback function types), we will end up using the empty
        string as the generated expression for the global object. This emits syntactically incorrect code:

            `convert<IDLCallbackFunction<JSVoidCallback>>(state, someValue, );`

        To fix this, we pass in a string to use as the global object, which uses the given ExecState to grab the global
        object. Tested by augmenting TestStandaloneDictionary.idl and its generated expectation.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryImplementationContent):
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        (WebCore::convertDictionary<DictionaryImplName>):
        * bindings/scripts/test/TestStandaloneDictionary.idl:

2019-01-10  Eric Carlson  <eric.carlson@apple.com>

        Define page media state flags for display capture.
        https://bugs.webkit.org/show_bug.cgi?id=193230
        <rdar://problem/47095142>

        Reviewed by Youenn Fablet.

        Test: fast/mediastream/get-display-media-muted.html

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::mediaState const):
        * page/MediaProducer.h:
        * platform/mediastream/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:
        * platform/mediastream/mac/WindowDisplayCaptureSourceMac.h:
        * platform/mock/MockRealtimeAudioSource.h:
        * platform/mock/MockRealtimeVideoSource.h:
        * testing/Internals.cpp:
        (WebCore::Internals::pageMediaState):

2019-01-10  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Add BindGroupBinding, BindGroupDescriptor, and BufferBinding dictionaries from API
        https://bugs.webkit.org/show_bug.cgi?id=193298

        Reviewed by Dean Jackson.

        No new tests. No change in behavior.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/webgpu/WebGPUBindGroupBinding.h: Added.
        * Modules/webgpu/WebGPUBindGroupBinding.idl: Added.
        * Modules/webgpu/WebGPUBindGroupDescriptor.h: Added.
        * Modules/webgpu/WebGPUBindGroupDescriptor.idl: Added.
        * Modules/webgpu/WebGPUBufferBinding.h: Added.
        * Modules/webgpu/WebGPUBufferBinding.idl: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/GPUBindGroupBinding.h: Added.
        * platform/graphics/gpu/GPUBindGroupDescriptor.h: Added.
        * platform/graphics/gpu/GPUBufferBinding.h: Added.

2019-01-09  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Fix vertex-buffer-triangle-strip test and small update to GPURenderPipeline
        https://bugs.webkit.org/show_bug.cgi?id=193289

        Reviewed by Dean Jackson.

        Fix broken test after pipeline layouts were added, and a small refactoring to GPURenderPipeline to avoid
        retaining its descriptor after creation.

        * platform/graphics/gpu/GPURenderPipeline.h:
        (WebCore::GPURenderPipeline::primitiveTopology const):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::GPURenderPipeline::GPURenderPipeline):

2019-01-09  Dean Jackson  <dino@apple.com>

        Safari Crashing in Version 12.0.1 (14606.2.104.1.1) WebCore::GraphicsLayerCA::updateBackdropFilters
        https://bugs.webkit.org/show_bug.cgi?id=193309
        <rdar://problem/45279224>

        Reviewed by Antoine Quint.

        A speculative fix for a CheckedArithmetic crash triggered in updateBackdropFilters.

        The crash log indicates we crash in a Checked<> class that is not recording
        overflow i.e. it is crashing due to an overflow. The only place in this function
        where that could happen is when we convert the FloatRect for the backdrop
        region into a Checked<unsigned> for width and height. This suggests that either
        the width or height are negative, or the float values are too large for integers,
        or the product of the two overflows.

        Avoid this by using RecordOverflow, but also changing the code a little to
        bail if the rectangle is incorrect.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateBackdropFilters):

2019-01-10  Oriol Brufau  <obrufau@igalia.com>

        [css-grid] Let abspos items reference implicit grid lines
        https://bugs.webkit.org/show_bug.cgi?id=193313

        Reviewed by Manuel Rego Casasnovas.

        While they can't create new implicit grid lines, abspos items
        can reference existing ones as clarified in
        https://github.com/w3c/csswg-drafts/commit/511bb63

        This patch makes WebKit match Blink, Firefox and Edge.

        Tests: web-platform-tests/css/css-grid/abspos/grid-positioned-items-padding-001.html
               web-platform-tests/css/css-grid/abspos/grid-positioned-items-unknown-named-grid-line-001.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator const):
        Remove argument from spanSizeForAutoPlacedItem call.
        (WebCore::RenderGrid::createEmptyGridAreaAtSpecifiedPositionsOutsideGrid const):
        Remove argument from spanSizeForAutoPlacedItem call.
        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid const):
        Remove argument from spanSizeForAutoPlacedItem call.
        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid const):
        Remove argument from spanSizeForAutoPlacedItem call.
        (WebCore::RenderGrid::gridAreaBreadthForOutOfFlowChild):
        Don't treat implicit grid lines as 'auto'.
        * rendering/RenderGrid.h:
        Remove unused gridPositionIsAutoForOutOfFlow.
        * rendering/style/GridPositionsResolver.cpp:
        (WebCore::adjustGridPositionsFromStyle):
        Don't treat implicit grid lines as 'auto'.
        Remove unused gridContainerStyle parameter.
        (WebCore::GridPositionsResolver::spanSizeForAutoPlacedItem):
        Remove argument from adjustGridPositionsFromStyle call.
        Remove unused gridContainerStyle parameter.
        (WebCore::resolveGridPositionFromStyle):
        Remove unnecessary assert that uses isValidNamedLineOrArea.
        (WebCore::GridPositionsResolver::resolveGridPositionsFromStyle):
        Remove argument from adjustGridPositionsFromStyle call.
        * rendering/style/GridPositionsResolver.h:
        Remove unused isValidNamedLineOrArea.
        Remove unused parameter from spanSizeForAutoPlacedItem.

2019-01-09  Matt Rajca  <mrajca@apple.com>

        Put per-document autoplay behavior behind runtime website policies quirk instead of a compile time flag
        https://bugs.webkit.org/show_bug.cgi?id=193301

        Reviewed by Jer Noble.

        Instead of unconditionally enabling this with a compile-time flag, let clients
        enable the quirk on a per-load basis.

        Tests: added API tests in favor of the current layout test as this behavior is no
               longer on by default unless a client opts in.

        * html/MediaElementSession.cpp:
        (WebCore::needsPerDocumentAutoplayBehaviorQuirk):
        (WebCore::MediaElementSession::playbackPermitted const):
        * loader/DocumentLoader.h:

2019-01-10  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Take collapsed through siblings into account when computing vertical position
        https://bugs.webkit.org/show_bug.cgi?id=193310

        Reviewed by Antti Koivisto.

        If the block inflow element has previous siblings with collapsed through vertical margins,
        then this box's before margin could _indirectly_ collapse with the parent. Use the previous siblings
        to check for margin collapsing.

        Test: fast/block/block-only/collapsed-through-siblings.html

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::adjustedVerticalPositionAfterMarginCollapsing const):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

2019-01-10  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Use GRefPtr in AppendPipeline::pushNewBuffer()
        https://bugs.webkit.org/show_bug.cgi?id=192934

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::pushNewBuffer):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp:
        (WebCore::MediaSourceClientGStreamerMSE::append):

2019-01-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [FreeType] Color emoji not properly supported
        https://bugs.webkit.org/show_bug.cgi?id=191976

        Reviewed by Michael Catanzaro.

        Always try to fallback to a colored font for emojis.

        Test: platform/gtk/fonts/font-emoji-system-fallback.html

        * platform/graphics/ComplexTextController.cpp:
        (WebCore::advanceByCombiningCharacterSequence): Group regional indicators in pairs.
        * platform/graphics/Font.cpp:
        (WebCore::CharacterFallbackMapKey::CharacterFallbackMapKey):
        (WebCore::Font::systemFallbackFontForCharacter const): Pass PreferColoredFont::No to FontCache::systemFallbackForCharacters.
        * platform/graphics/Font.h: Add IsForPlatformFont enum to replace the bool parameter in systemFallbackFontForCharacter().
        * platform/graphics/FontCache.h:
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::FontCascadeFonts::glyphDataForSystemFallback):
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::characterSequenceIsEmoji): Check whether the character sequence is an emoji.
        (WebCore::FontCascade::fontForCombiningCharacterSequence const): In case of emojis try to fallback to a colored
        font even if base font can render the emoji in black and white.
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::systemFallbackForCharacters): Add PreferColoredFont parameter that is ignored.
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::systemFallbackForCharacters): Add PreferColoredFont parameter.
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Initialize m_isColorBitmapFont.
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::Font::variantCapsSupportsCharacterForSynthesis const): Moved from cross-platform file.
        (WebCore::Font::platformSupportsCodePoint const): Add freetype implementation.
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::systemFallbackForCharacters): Add PreferColoredFont parameter that is ignored.
        * platform/text/CharacterProperties.h:
        (WebCore::isEmojiKeycapBase):
        (WebCore::isEmojiRegionalIndicator):
        (WebCore::isEmojiWithPresentationByDefault):
        (WebCore::isEmojiModifierBase):

2019-01-09  Antoine Quint  <graouts@apple.com>

        [Web Animations] Audit Web Animations classes for memory reduction
        https://bugs.webkit.org/show_bug.cgi?id=193195

        Reviewed by Simon Fraser and Yusuke Suzuki.

        The classes, enums and structs added to support Web Animations were not as memory-efficient as they could be. We now order
        members in a way that reduces padding, use Markable<T, Traits> instead of Optional<T> where applicable, declare enums as uint8_t
        and removed unnecessary members.

        As a result, classes and structs have shrunk as follows:

        WebAnimation: 256 > 216
        DeclarativeAnimation: 392 > 344
        CSSAnimation: 416 > 368
        CSSTransition: 440 > 392
        AnimationEffect: 88 > 72
        KeyframeEffect: 208 > 184
        AnimationPlaybackEvent: 104 > 88
        EffectTiming: 72 > 64
        ComputedEffectTiming: 136 > 112
        AnimationTimeline: 264 > 248
        DocumentTimeline: 496 > 464
        OptionalEffectTiming: 112 > 80
        BaseKeyframe: 32 > 24
        ParsedKeyframe: 80 > 72
        BaseComputedKeyframe: 40 > 32

        * animation/AnimationEffect.h: Order members in decreasing size, except for m_fill and m_direction, which we put at the top to
        save 8 bytes (2 bytes of padding instead of 4 before m_animation and saving 6 bytes of padding at the end).
        * animation/AnimationPlaybackEvent.cpp:
        (WebCore::AnimationPlaybackEvent::AnimationPlaybackEvent):
        * animation/AnimationPlaybackEvent.h:
        * animation/AnimationPlaybackEventInit.h:
        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::AnimationTimeline):
        (WebCore::AnimationTimeline::updateCSSTransitionsForElement):
        * animation/AnimationTimeline.h: We remove the m_classType member and instead make isDocumentTimeline() virtual.
        (WebCore::AnimationTimeline::isDocumentTimeline const):
        (): Deleted.
        (WebCore::AnimationTimeline::classType const): Deleted.
        * animation/CompositeOperation.h:
        * animation/CompositeOperationOrAuto.h:
        * animation/ComputedEffectTiming.h:
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::DeclarativeAnimation):
        (WebCore::DeclarativeAnimation::invalidateDOMEvents):
        * animation/DeclarativeAnimation.h: We keep m_wasPending and m_previousPhase at the top to save some padding at the end.
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::DocumentTimeline):
        * animation/DocumentTimeline.h:
        * animation/EffectTiming.h:
        * animation/FillMode.h:
        * animation/IterationCompositeOperation.h:
        * animation/KeyframeEffect.cpp:
        (WebCore::computeMissingKeyframeOffsets):
        (WebCore::KeyframeEffect::create):
        (WebCore::KeyframeEffect::KeyframeEffect):
        * animation/KeyframeEffect.h:
        * animation/OptionalEffectTiming.h:
        * animation/PlaybackDirection.h:
        * animation/WebAnimation.h:
        * animation/WebAnimationUtilities.h:
        (WebCore::WebAnimationsMarkableDoubleTraits::isEmptyValue):
        (WebCore::WebAnimationsMarkableDoubleTraits::emptyValue):

2019-01-09  Ryosuke Niwa  <rniwa@webkit.org>

        ThreadTimers should not store a raw pointer in its heap
        https://bugs.webkit.org/show_bug.cgi?id=192975
        <rdar://problem/46893946>

        Reviewed by Geoffrey Garen.

        Right now, ThreadTimers's heap data structure stores a raw pointer to TimerBase. In order to harden the timer code,
        this patch replaces it with ThreadTimerHeapItem, a newly introduced struct, which effectively acks like
        WeakReference<TimerBase*> as the timer heap and TimerBase both store RefPtr to it, and TimerBase's destructor clears
        the raw pointer back to TimerBase*.

        This approach was taken instead of an out-right adoptation of WeakPtr since the heap data structure requires each node
        in the heap to have a fixed "priority" yet WeakPtr with no valid pointer back to TimerBase would effectively lose its
        "priority" thereby corrupting the heap data structure. That is, each item in the heap must remember its fire time and
        insertion order even when the underlying TimerBase had gone away (this should never happen but the whole point of this
        hardening is to make it work even in the precense of such a bug).

        This patch also moves the heap index in TimerBase to ThreadTimerHeapItem, and replaces the pointer to the heap vector
        in TimerBase by a reference to ThreadTimers in ThreadTimerHeapItem. Note that ThreadTimers is a per-thread singleton.

        The correctness of this hardening was tested by commenting out the call to stop() and !isInHeap() assertion in
        TimerBase::~TimerBase() as well as the !isInHeap() assertion in ThreadTimerHeapItem::clearTimer() and observing that
        layout tests run successfully without hitting any debug assertions.

        No new tests since there should be no observable behavior difference.

        * WebCore.xcodeproj/project.pbxproj: Export ThreadTimers.h as a private header since it's now included in Timer.h
        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::updateSharedTimer): Delete ThreadTimerHeapItem's with nullptr TimerBase* (TimerBase had
        already been deleted). This should only happen when TimerBase's destructor failed to remove itself from the timer heap,
        which should never happen.
        (WebCore::ThreadTimers::sharedTimerFiredInternal): Ditto. Also removed the redundant code which had removed the timer
        from the heap since setNextFireTime does the removal already.
        * platform/ThreadTimers.h: Outdented the whole file.
        (WebCore::ThreadTimers::timerHeap): We use Vector<RefPtr<ThreadTimerHeapItem>> instead of Vector<Ref<~>> since Ref<~>
        doesn't have a copy constructor which is used by std::push_heap.
        (WebCore::ThreadTimerHeapItem): Added.
        (WebCore::ThreadTimerHeapItem::hasTimer const): Added.
        (WebCore::ThreadTimerHeapItem::setNotInHeap): Added. ThreadTimerHeapItem uses unsigned -1 as the single value which
        signifies the item not being in the heap instead of all negative values as in the old code in TimerBase.
        (WebCore::ThreadTimerHeapItem::isInHeap const): Added.
        (WebCore::ThreadTimerHeapItem::isFirstInHeap const): Added.
        (WebCore::ThreadTimerHeapItem::timer): Added.
        (WebCore::ThreadTimerHeapItem::clearTimer): Added.
        (WebCore::ThreadTimerHeapItem::heapIndex const): Added.
        (WebCore::ThreadTimerHeapItem::setHeapIndex): Added.
        (WebCore::ThreadTimerHeapItem::timerHeap const): Added.
        * platform/Timer.cpp:
        (WebCore::threadGlobalTimerHeap): This function is now only used in assertions.
        (WebCore::ThreadTimerHeapItem::ThreadTimerHeapItem): Added.
        (WebCore::ThreadTimerHeapItem::create): Added.
        (WebCore::TimerHeapPointer::TimerHeapPointer):
        (WebCore::TimerHeapPointer::operator-> const):
        (WebCore::TimerHeapReference::TimerHeapReference): Added a copy constructor.
        (WebCore::TimerHeapReference::copyRef const): Added.
        (WebCore::TimerHeapReference::operator RefPtr<ThreadTimerHeapItem>& const):
        (WebCore::TimerHeapPointer::operator* const):
        (WebCore::TimerHeapReference::operator=): Use move assignment operator.
        (WebCore::TimerHeapReference::swapWith):
        (WebCore::TimerHeapReference::updateHeapIndex): Extracted to share code between two verions of operator=.
        (WebCore::swap):
        (WebCore::TimerHeapIterator::TimerHeapIterator):
        (WebCore::TimerHeapIterator::operator-> const):
        (WebCore::TimerHeapLessThanFunction::compare): Added variants which take RefPtr<ThreadTimerHeapItem>.
        (WebCore::TimerHeapLessThanFunction::operator() const):
        (WebCore::TimerBase::TimerBase):
        (WebCore::TimerBase::~TimerBase):Clear the raw pointer in ThreadTimerHeapItem.
        (WebCore::TimerBase::stop):
        (WebCore::TimerBase::nextFireInterval const):
        (WebCore::TimerBase::checkHeapIndex const): Added the consistency check for other items in the heap.
        (WebCore::TimerBase::checkConsistency const):
        (WebCore::TimerBase::heapDecreaseKey):
        (WebCore::TimerBase::heapDelete):
        (WebCore::TimerBase::heapDeleteMin):
        (WebCore::TimerBase::heapIncreaseKey):
        (WebCore::TimerBase::heapInsert):
        (WebCore::TimerBase::heapPop):
        (WebCore::TimerBase::heapPopMin):
        (WebCore::TimerBase::heapDeleteNullMin): Added. Used to delete ThreadTimerHeapItem which no longer has a valid TimerBase.
        (WebCore::parentHeapPropertyHolds):
        (WebCore::childHeapPropertyHolds):
        (WebCore::TimerBase::hasValidHeapPosition const):
        (WebCore::TimerBase::updateHeapIfNeeded): Tweaked the heap index assertion as heapIndex() itself would assert when called
        on an item with an invalid (-1) heap index.
        (WebCore::TimerBase::setNextFireTime): Create ThreadTimerHeapItem. Note m_heapItem is never cleared until this TimerBase
        is deleted.
        (WebCore::TimerHeapReference::operator TimerBase* const): Deleted.
        * platform/Timer.h:
        (WebCore::TimerBase): Replaced m_nextFireTime, m_heapIndex, m_heapInsertionOrder, and m_cachedThreadGlobalTimerHeap
        by m_heapItem, RefPtr to an ThreadTimerHeapItem.
        (WebCore::TimerBase::augmentFireInterval):
        (WebCore::TimerBase::inHeap const):
        (WebCore::TimerBase::nextFireTime const):
        (WebCore::TimerBase::isActive const):
        (WebCore::TimerBase:: const): Deleted.

2019-01-09  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(239737) iOS quicklook tests should not dereference null
        https://bugs.webkit.org/show_bug.cgi?id=193307

        Reviewed by Brent Fulgham.

        The quicklook tests rely on ResourceHandle on iOS for some reason.
        This is a problem we'll fix later, but for now keep them working by not crashing.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::tryHandlePasswordBasedAuthentication):
        (WebCore::ResourceHandle::receivedCredential):

2019-01-09  Zalan Bujtas  <zalan@apple.com>

        [Datalist] Crash when input with datalist is dynamically added.
        https://bugs.webkit.org/show_bug.cgi?id=193012
        <rdar://problem/45923457>

        Reviewed by Brent Fulgham.

        In certain cases (cloning, setAttribute), it's too early to check for the list attribute in createShadowSubtree
        to see whether the input needs datalist related items. The list attribute is simply not set yet.
        This patch only addresses the obvious crash. m_dataListDropdownIndicator clearly lacks proper lifecycle management (see webkit.org/b/193032). 

        Test: fast/forms/datalist/datalist-crash-when-dynamic.html

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createShadowSubtree):
        (WebCore::TextFieldInputType::attributeChanged):
        (WebCore::TextFieldInputType::createDataListDropdownIndicator):
        * html/TextFieldInputType.h:

2019-01-09  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Fix vertex-buffer-triangle-strip test and small update to GPURenderPipeline
        https://bugs.webkit.org/show_bug.cgi?id=193289

        Reviewed by Dean Jackson.

        Fix broken test after pipeline layouts were added, and a small refactoring to GPURenderPipeline to avoid
        retaining its descriptor after creation.

        * platform/graphics/gpu/GPURenderPipeline.h:
        (WebCore::GPURenderPipeline::primitiveTopology const):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::GPURenderPipeline::GPURenderPipeline):

2019-01-09  Devin Rousso  <drousso@apple.com>

        Web Inspector: Protocol Logging: log messages as objects if inspector^2 is open
        https://bugs.webkit.org/show_bug.cgi?id=193284

        Reviewed by Joseph Pecoraro.

        No newe tests, as this is simply exposes a value.

        * inspector/InspectorFrontendHost.idl:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::isBeingInspected): Added.

2019-01-09  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Add support for peculiar cases.
        https://bugs.webkit.org/show_bug.cgi?id=192625

        Reviewed by Antti Koivisto.

        Implement some of the more peculiar cases like margin collpasing through multiple boxes etc.
        Add ~100 new passing cases.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        * layout/LayoutState.h:
        (WebCore::Layout::LayoutState::hasFormattingState const):
        * layout/MarginTypes.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginBefore const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginBeforeForAncestors const):
        (WebCore::Layout::hasPrecomputedMarginBefore):
        (WebCore::Layout::BlockFormattingContext::computeFloatingPosition const):
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats const):
        (WebCore::Layout::BlockFormattingContext::computeVerticalPositionForFloatClear const):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        (WebCore::Layout::BlockFormattingContext::adjustedVerticalPositionAfterMarginCollapsing const):
        * layout/blockformatting/BlockFormattingContext.h:
        (WebCore::Layout::BlockFormattingContext::blockFormattingState const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::estimatedMarginBefore): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::estimatedMarginAfter): Deleted.
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedInFlowHeight):
        (WebCore::Layout::BlockFormattingContext::Quirks::shouldIgnoreMarginAfter):
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedHeight): Deleted.
        * layout/blockformatting/BlockFormattingState.h:
        (WebCore::Layout::BlockFormattingState::setPositiveAndNegativeVerticalMargin):
        (WebCore::Layout::BlockFormattingState::hasPositiveAndNegativeVerticalMargin const):
        (WebCore::Layout::BlockFormattingState::positiveAndNegativeVerticalMargin const):
        (WebCore::Layout::BlockFormattingState::setHasEstimatedMarginBefore):
        (WebCore::Layout::BlockFormattingState::clearHasEstimatedMarginBefore):
        (WebCore::Layout::BlockFormattingState::hasEstimatedMarginBefore const):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::hasClearance):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithParentMarginAfter):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithParentMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithPreviousSiblingMarginAfter):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithFirstInFlowChildMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithSiblingMarginBeforeWithClearance):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithParentMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithLastInFlowChildMarginAfter):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithNextSiblingMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginsCollapseThrough):
        (WebCore::Layout::computedPositiveAndNegativeMargin):
        (WebCore::Layout::marginValue):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::updateCollapsedMarginAfter):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeValues):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeMarginAfter):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::estimatedMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedVerticalValues):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::computedNonCollapsedMarginBefore): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::computedNonCollapsedMarginAfter): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::nonCollapsedMarginBefore): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::nonCollapsedMarginAfter): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedMarginBeforeFromFirstChild): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedMarginAfterFromLastChild): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithPreviousSibling): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithNextSibling): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBefore): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfter): Deleted.
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::Box):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::hasClearance const):
        (WebCore::Display::Box::setEstimatedMarginBefore):
        (WebCore::Display::Box::estimatedMarginBefore const):
        (WebCore::Display::Box::setHasClearance):
        (WebCore::Display::Box::invalidateEstimatedMarginBefore):
        (WebCore::Display::Box::setVerticalMargin):
        (WebCore::Display::Box::rectWithMargin const):
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::collectInlineContentForSubtree const):

2019-01-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r239156): [FreeType] fixed width, and synthetic bold/italic not correctly applied since r239156
        https://bugs.webkit.org/show_bug.cgi?id=193276

        Reviewed by Žan Doberšek.

        FontCache::createFontPlatformData() is calling getFontPropertiesFromPattern() with the configure pattern instead
        of the result one after the match.

        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::createFontPlatformData):

2019-01-08  Dean Jackson  <dino@apple.com>

        Blob references for System Previews don't get a correct file extension
        https://bugs.webkit.org/show_bug.cgi?id=193268
        <rdar://problem/47133037>

        Reviewed by Tim Horton.

        Apple platforms don't yet have a mapping from the USD MIME type to
        file extensions (and we support some non-standard MIME types), which
        means that downloads from Blob references don't get correctly named.

        Fix this by adding an explicit mapping between System Preview types
        and ".usdz".

        WebKit API test: _WKDownload.SystemPreviewUSDZBlobNaming

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::isSystemPreviewMIMEType): Remove USE(SYSTEM_PREVIEW) since
        this applies to macOS and iOS now.
        * platform/MIMETypeRegistry.h:
        * platform/cocoa/MIMETypeRegistryCocoa.mm:
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType): Add a mapping
        for USDZ.

2019-01-08  Tim Horton  <timothy_horton@apple.com>

        Editable images sometimes don't become focused when tapped
        https://bugs.webkit.org/show_bug.cgi?id=193259
        <rdar://problem/47038424>

        Reviewed by Wenson Hsieh.

        Often when tapping an editable image inside an editable text area, the
        text area's selection will change instead of focusing the editable image.

        No new tests; I have had no luck writing a test that reliably failed 
        beforehand (the "sometimes" is a problem).

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::defaultEventHandler):
        * html/HTMLImageElement.h:
        Override mousedown on editable images, focus the image, and prevent
        the default behavior.

2019-01-08  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Support U2F HID Authenticators on macOS
        https://bugs.webkit.org/show_bug.cgi?id=191535
        <rdar://problem/47102027>

        Reviewed by Brent Fulgham.

        This patch changes U2fCommandConstructor to produce register commands with
        enforcing test of user presence. Otherwise, authenticators would silently
        generate credentials. It also renames readFromU2fSignResponse to
        readU2fSignResponse.

        Tests: http/wpt/webauthn/public-key-credential-create-failure-u2f-silent.https.html
               http/wpt/webauthn/public-key-credential-create-failure-u2f.https.html
               http/wpt/webauthn/public-key-credential-create-success-u2f.https.html
               http/wpt/webauthn/public-key-credential-get-failure-u2f-silent.https.html
               http/wpt/webauthn/public-key-credential-get-failure-u2f.https.html
               http/wpt/webauthn/public-key-credential-get-success-u2f.https.html

        * Modules/webauthn/fido/U2fCommandConstructor.cpp:
        (fido::WebCore::constructU2fRegisterCommand):
        * Modules/webauthn/fido/U2fResponseConverter.cpp:
        (fido::readU2fSignResponse):
        (fido::readFromU2fSignResponse): Deleted.
        * Modules/webauthn/fido/U2fResponseConverter.h:

2019-01-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Dispatch a synthetic mousedown event prior to starting drags
        https://bugs.webkit.org/show_bug.cgi?id=193229
        <rdar://problem/46717097>

        Reviewed by Tim Horton.

        Tweaks some drag initiation logic on iOS to actually send a "mousedown" event to the page prior to drag start.
        This improves drag and drop compatibility with web pages that expect a mousedown to always precede dragging.
        Additionally, ensure that preventing the "mousedown" event also prevents "dragstart", which matches macOS
        behavior.

        Test: DragAndDropTests.PreventingMouseDownShouldPreventDragStart

        * page/EventHandler.cpp:

        Make the text drag delay 0 on iOS. This was introduced on iOS when originally bringing up drag and drop, and was
        made to simply match macOS. However, it doesn't make sense to respect the delay here, since the purpose of this
        delay is to disambiguate between making a text selection and starting a drag when pressing on text that is
        already selected; on iOS (including iOSMac), this gesture conflict is already resolved by platform gesture
        recognizers in the client layer, so there is always no delay between mouse down and drag here.

        * page/ios/EventHandlerIOS.mm:

        Dispatch a mousedown and inspect the value of `m_mouseDownMayStartDrag` when starting a drag on iOS. This brings
        our behavior closer in line with macOS.

        (WebCore::EventHandler::tryToBeginDataInteractionAtPoint):

2019-01-08  Youenn Fablet  <youenn@apple.com>

        service worker fetch handler results in bad referrer
        https://bugs.webkit.org/show_bug.cgi?id=188248
        <rdar://problem/47050478>

        Reviewed by Alex Christensen.

        Response sanitization was removing the ReferrerPolicy header from opaque redirect responses.
        Reduce sanitization of opaque redirect responses to opaque responses and allow Location header.
        Make sure referrer policy is updated for all load redirections, not only CORS loads.

        Test: http/tests/security/referrer-policy-redirect-link-downgrade.html

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::checkRedirectionCrossOriginAccessControl):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::isSafeCrossOriginResponseHeader):
        (WebCore::ResourceResponseBase::sanitizeHTTPHeaderFieldsAccordingToTainting):

2019-01-08  Youenn Fablet  <youenn@apple.com>

        IDB storage of Crypto keys does not work in private browsing mode
        https://bugs.webkit.org/show_bug.cgi?id=193219

        Reviewed by Brady Eidson.

        https://trac.webkit.org/changeset/238677 moved from using a JSGlobalObject to a JSDOMGlobalObject for serialization/deserialization.
        This does not work for crypto keys as they require not only a JSDOMGlobalObject but either a window or worker global object.

        To fix the issue, revert 238677, and fix it by checking whether the dumping of an ArrayBuffer happens for a JSDOMGlobalObject or a JSGlobalObject.
        If it is the latter, use JSC routines instead of toJS() which requires a JSDOMGlobalObject.

        Covered by updated test.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::databaseThreadVM):
        (WebCore::IDBServer::UniqueIDBDatabase::databaseThreadExecState):
        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWrapper.cpp:
        (WebCore::JSDOMObject::JSDOMObject):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpArrayBufferView):
        (WebCore::CloneSerializer::toJSArrayBuffer):

2019-01-08  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Update createRenderPipeline for WebGPUPipelineLayout
        https://bugs.webkit.org/show_bug.cgi?id=193247

        Reviewed by Dean Jackson.

        Add WebGPUPipelineLayout to WebGPURenderPipeline via WebGPUPipelineDescriptorBase.

        Test: Updated render-pipelines.html to test new functionality.

        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createRenderPipeline const): Convert WebGPUPipelineLayout to GPUPipelineLayout.
        * Modules/webgpu/WebGPUPipelineDescriptorBase.h:
        * Modules/webgpu/WebGPUPipelineDescriptorBase.idl: Add layout field.
        * Modules/webgpu/WebGPUPipelineLayout.h: 
        (WebCore::WebGPUPipelineLayout::pipelineLayout): Added. Getter.
        * platform/graphics/gpu/GPUPipelineDescriptorBase.h: Updated from out-of-date version.
        * platform/graphics/gpu/GPUPipelineLayout.cpp:
        (WebCore::GPUPipelineLayout::GPUPipelineLayout): Now retains bindGroupLayouts from descriptor.
        * platform/graphics/gpu/GPUPipelineLayout.h:
        * platform/graphics/gpu/GPURenderPipelineDescriptor.h: Now inherits from GPUPipelineDescriptorBase.
        (WebCore::GPURenderPipelineDescriptor::GPURenderPipelineDescriptor): Custom constructor for non-aggregate struct.

2019-01-08  Chris Dumez  <cdumez@apple.com>

        Prevent cross-site top-level navigations from third-party iframes
        https://bugs.webkit.org/show_bug.cgi?id=193076
        <rdar://problem/36074736>

        Reviewed by Alex Christensen.

        Prevent cross-site top-level navigations from third-party iframes if the following conditions are met:
        1. Its tries to navigate the top-level page cross-site (different eTDL+1)
        2. The user has never interacted with the third-party iframe or any of its subframes

        This experiment's intent is to block suspicious main-frame navigations by third-party content. The feature
        is behind a runtime experimental feature flag, on by default.

        Tests: http/tests/security/allow-top-level-navigations-by-third-party-iframes-to-same-origin.html
               http/tests/security/allow-top-level-navigations-by-third-party-iframes-with-previous-user-activation.html
               http/tests/security/allow-top-level-navigations-by-third-party-iframes-with-user-activation.html
               http/tests/security/block-top-level-navigations-by-third-party-iframes.html

        * dom/Document.cpp:
        (WebCore::printNavigationErrorMessage):
        (WebCore::Document::canNavigate):
        (WebCore::Document::canNavigateInternal):
        (WebCore::Document::isNavigationBlockedByThirdPartyIFrameRedirectBlocking):
        * dom/Document.h:
        * dom/UserGestureIndicator.cpp:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setLocation):
        * page/DOMWindow.h:
        * page/Frame.h:
        * page/Location.cpp:
        (WebCore::Location::replace):
        (WebCore::Location::setLocation):
        * page/Settings.yaml:

2019-01-08  Alex Christensen  <achristensen@webkit.org>

        Stop using NetworkStorageSession in WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=193236

        Reviewed by Don Olmstead.

        No change in behavior.  Some code was only used for ResourceHandle, which isn't used in modern WebKit,
        and for cookies, which are handled in the NetworkProcess in modern WebKit.

        * loader/CookieJar.cpp:
        (WebCore::storageSession):
        * loader/EmptyClients.cpp:
        * platform/network/NetworkingContext.h:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::tryHandlePasswordBasedAuthentication):
        (WebCore::ResourceHandle::receivedCredential):

2019-01-08  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r239727.

        Broke API tests

        Reverted changeset:

        "Stop using NetworkStorageSession in WebProcess"
        https://bugs.webkit.org/show_bug.cgi?id=193236
        https://trac.webkit.org/changeset/239727

2019-01-08  Alex Christensen  <achristensen@webkit.org>

        Stop using NetworkStorageSession in WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=193236

        Reviewed by Don Olmstead.

        No change in behavior.  Some code was only used for ResourceHandle, which isn't used in modern WebKit,
        and for cookies, which are handled in the NetworkProcess in modern WebKit.

        * loader/CookieJar.cpp:
        (WebCore::storageSession):
        * loader/EmptyClients.cpp:
        * platform/network/NetworkingContext.h:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::tryHandlePasswordBasedAuthentication):
        (WebCore::ResourceHandle::receivedCredential):

2019-01-08  Chris Dumez  <cdumez@apple.com>

        Regression(PSON-r239182): Blank view when navigating back and forth between google.com and stack overflow
        https://bugs.webkit.org/show_bug.cgi?id=193224
        <rdar://problem/47097726>

        Reviewed by Alex Christensen.

        Since r239182, pages get suspended in-place when we suspend the old process after a process-swap on navigation.
        When we return to a suspended page, we load the current history item again and it normally properly restores
        the page from PageCache, even though we load the same history item and the current one and even though the
        page is suspended in-place (i.e. we did not navigate away, which is the usual case for page cache).

        The issue is that if the page URL contains a fragment, FrameLoader::shouldPerformFragmentNavigation() would
        return true because both the source and destination URLs (which are the same) contains a fragment. To address
        the issue, update FrameLoader::shouldPerformFragmentNavigation() to return false if the current page is
        suspended.

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

2019-01-08  Alex Christensen  <achristensen@webkit.org>

        Move Windows-specific code from NetworkStorageSessionCFNet.cpp to its own file
        https://bugs.webkit.org/show_bug.cgi?id=192958

        Reviewed by Yusuke Suzuki.

        This makes it easier to reason about what code is used where.

        * PlatformAppleWin.cmake:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::createPrivateStorageSession): Deleted.
        (WebCore::cookieDomain): Deleted.
        (WebCore::canonicalCookieTime): Deleted.
        (WebCore::cookieCreatedTime): Deleted.
        (WebCore::cookieExpirationTime): Deleted.
        (WebCore::cookieName): Deleted.
        (WebCore::cookiePath): Deleted.
        (WebCore::cookieValue): Deleted.
        (WebCore::filterCookies): Deleted.
        (WebCore::copyCookiesForURLWithFirstPartyURL): Deleted.
        (WebCore::createCookies): Deleted.
        (WebCore::NetworkStorageSession::setCookiesFromDOM const): Deleted.
        (WebCore::containsSecureCookies): Deleted.
        (WebCore::NetworkStorageSession::cookiesForDOM const): Deleted.
        (WebCore::NetworkStorageSession::cookieRequestHeaderFieldValue const): Deleted.
        (WebCore::NetworkStorageSession::cookiesEnabled const): Deleted.
        (WebCore::NetworkStorageSession::getRawCookies const): Deleted.
        (WebCore::NetworkStorageSession::deleteCookie const): Deleted.
        (WebCore::NetworkStorageSession::getHostnamesWithCookies): Deleted.
        (WebCore::NetworkStorageSession::deleteAllCookies): Deleted.
        (WebCore::NetworkStorageSession::deleteCookiesForHostnames): Deleted.
        (WebCore::NetworkStorageSession::deleteAllCookiesModifiedSince): Deleted.
        * platform/network/cf/NetworkStorageSessionCFNetWin.cpp: Added.
        (WebCore::createPrivateStorageSession):
        (WebCore::NetworkStorageSession::setCookies):
        (WebCore::cookieDomain):
        (WebCore::canonicalCookieTime):
        (WebCore::cookieCreatedTime):
        (WebCore::cookieExpirationTime):
        (WebCore::cookieName):
        (WebCore::cookiePath):
        (WebCore::cookieValue):
        (WebCore::filterCookies):
        (WebCore::copyCookiesForURLWithFirstPartyURL):
        (WebCore::createCookies):
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):
        (WebCore::containsSecureCookies):
        (WebCore::NetworkStorageSession::cookiesForDOM const):
        (WebCore::NetworkStorageSession::cookieRequestHeaderFieldValue const):
        (WebCore::NetworkStorageSession::cookiesEnabled const):
        (WebCore::NetworkStorageSession::getRawCookies const):
        (WebCore::NetworkStorageSession::deleteCookie const):
        (WebCore::NetworkStorageSession::getHostnamesWithCookies):
        (WebCore::NetworkStorageSession::deleteAllCookies):
        (WebCore::NetworkStorageSession::deleteCookiesForHostnames):
        (WebCore::NetworkStorageSession::deleteAllCookiesModifiedSince):

2018-12-19  Antoine Quint  <graouts@apple.com>

        [Web Animations] Compute animation effect timing properties in batch
        https://bugs.webkit.org/show_bug.cgi?id=192850

        Reviewed by Dean Jackson.

        We remove a host of functions from AnimationEffect that would allow the computation of various timing properties
        defined by the Web Animations specification: phase, progress, current iteration, etc. Indeed, a lot of these functions
        would call each other in a chain, and we would re-compute a lot of the earlier properties in those chains several times
        when doing something like querying the animation progress. Additionally, some functions, such as WebAnimation::computeRelevance()
        and WebAnimation::timeToNextTick() would yield the computation of several such properties numerous times. All of those
        functions are called during each animation frame and are ripe for optimizations.

        We now compute all timing properties across two functions:
        
        1. the new AnimationEffect::getBasicTiming() which computes the local time, end time, active duration, active time and phase,
        2. the existing AnimationEffect::getComputedTiming() which now also exposes the phase and simple iteration progress.

        To support this we introduce a new BasicEffectTiming struct to contain the values computed in AnimationEffect::getBasicTiming()
        and spun the AnimationEffect::Phase struct as AnimationEffectPhase so that it may be used across BasicEffectTiming and
        ComputedEffectTiming.

        No new test since there is no user-observable change.

        * WebCore.xcodeproj/project.pbxproj:
        * animation/AnimationEffect.cpp:
        (WebCore::AnimationEffect::getTiming const):
        (WebCore::AnimationEffect::getBasicTiming const):
        (WebCore::AnimationEffect::getComputedTiming const):
        (WebCore::AnimationEffect::localTime const): Deleted.
        (WebCore::AnimationEffect::phase const): Deleted.
        (WebCore::AnimationEffect::activeTime const): Deleted.
        (WebCore::AnimationEffect::overallProgress const): Deleted.
        (WebCore::AnimationEffect::simpleIterationProgress const): Deleted.
        (WebCore::AnimationEffect::currentIteration const): Deleted.
        (WebCore::AnimationEffect::currentDirection const): Deleted.
        (WebCore::AnimationEffect::directedProgress const): Deleted.
        (WebCore::AnimationEffect::transformedProgress const): Deleted.
        (WebCore::AnimationEffect::iterationProgress const): Deleted.
        (WebCore::AnimationEffect::getTiming): Deleted.
        (WebCore::AnimationEffect::getComputedTiming): Deleted.
        (WebCore::AnimationEffect::endTime const): Deleted.
        (WebCore::AnimationEffect::activeDuration const): Deleted.
        * animation/AnimationEffect.h:
        * animation/AnimationEffectPhase.h: Copied from Source/WebCore/animation/ComputedEffectTiming.h.
        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::updateCSSTransitionsForElement):
        * animation/AnimationTimeline.h:
        * animation/BasicEffectTiming.h: Copied from Source/WebCore/animation/ComputedEffectTiming.h.
        * animation/ComputedEffectTiming.h:
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::cancel):
        (WebCore::DeclarativeAnimation::phaseWithoutEffect const):
        (WebCore::DeclarativeAnimation::invalidateDOMEvents):
        * animation/DeclarativeAnimation.h:
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::apply):
        (WebCore::KeyframeEffect::getAnimatedStyle):
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::effectEndTime const):
        (WebCore::WebAnimation::computeRelevance):
        (WebCore::WebAnimation::timeToNextTick const):

2019-01-07  Youenn Fablet  <youenn@apple.com>

        Crash in SWServer::Connection::resolveRegistrationReadyRequests
        https://bugs.webkit.org/show_bug.cgi?id=193217

        Reviewed by Chris Dumez.

        As can be seen from the traces, SWServer might clear its connections HashMap in its destructor.
        This might then trigger calling SWServer::resolveRegistrationReadyRequests.
        This method is iterating on the connections HashMap which is being cleared.
        To remove this problem, move the HashMap in a temporary variable and clear the temporary variable.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::~SWServer):

2019-01-07  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r239519): ASSERTION FAILED: !m_adoptionIsRequired in com.apple.WebCore: void WTF::refIfNotNull<WebCore::CDMSessionMediaSourceAVFObjC> + 53
        https://bugs.webkit.org/show_bug.cgi?id=193211
        <rdar://problem/46937412>

        Reviewed by Eric Carlson.

        Make CDMSessionMediaSourceAVFObjC a CanMakeWeakPtr rather than RefCounted, as CDMSessions are stored in
        std::unique_ptrs, and not in Ref or RefPtr.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setCDMSession):

2019-01-07  David Kilzer  <ddkilzer@apple.com>

        Prefer RetainPtr<NSObject> to RetainPtr<NSObject *>
        <https://webkit.org/b/193056>

        Reviewed by Alex Christensen.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:]):
        (-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:withDiscontinuity:]):
        * platform/network/cf/AuthenticationChallenge.h:
        - Remove '*' from RetainPtr<> type.

        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::cookiesForURL):
        - Once retainPtr() was changed to return RetainPtr<NSArray>
          instead of RetainPtr<NSArray *> here, that forced the type of
          `cookiesPtr` to change as well since
          Optional<RetainPtr<NSArray>> is not assignable to
          Optional<RetainPtr<NSArray *>> without further template
          specialization, which didn't seem useful since
          Optional<RetainPtr<>> variable types are rarely used.

2019-01-07  Devin Rousso  <drousso@apple.com>

        Web Inspector: extend XHR breakpoints to work with fetch
        https://bugs.webkit.org/show_bug.cgi?id=185843
        <rdar://problem/40431027>

        Reviewed by Matt Baker.

        Test: inspector/dom-debugger/url-breakpoints.html

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::fetch):

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willFetch): Added.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willFetchImpl): Added.

        * inspector/agents/InspectorDOMDebuggerAgent.h:
        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::disable):
        (WebCore::InspectorDOMDebuggerAgent::discardBindings):
        (WebCore::InspectorDOMDebuggerAgent::setURLBreakpoint): Added.
        (WebCore::InspectorDOMDebuggerAgent::removeURLBreakpoint): Added.
        (WebCore::InspectorDOMDebuggerAgent::breakOnURLIfNeeded): Added.
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        (WebCore::InspectorDOMDebuggerAgent::willFetch): Added.
        (WebCore::InspectorDOMDebuggerAgent::setXHRBreakpoint): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::removeXHRBreakpoint): Deleted.

2019-01-07  Eric Carlson  <eric.carlson@apple.com>

        Cleanup AudioTrackPrivateMediaStreamCocoa
        https://bugs.webkit.org/show_bug.cgi?id=193208
        <rdar://problem/42225870>

        Reviewed by Youenn Fablet.

        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable): Clear input and
        output format descriptions after stopping the audio unit.

2019-01-07  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: show secure connection details per-request
        https://bugs.webkit.org/show_bug.cgi?id=191539
        <rdar://problem/45979891>

        Reviewed by Joseph Pecoraro.

        Test: http/tests/inspector/network/resource-security-connection.html

        * platform/network/NetworkLoadMetrics.h:
        (WebCore::NetworkLoadMetrics:isolatedCopy):
        (WebCore::NetworkLoadMetrics:clearNonTimingData):
        (WebCore::NetworkLoadMetrics:operator==):
        (WebCore::NetworkLoadMetrics:encode):
        (WebCore::NetworkLoadMetrics:decode):

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildObjectForMetrics):

2019-01-07  Eric Carlson  <eric.carlson@apple.com>

        Deactivate audio session whenever possible
        https://bugs.webkit.org/show_bug.cgi?id=193188
        <rdar://problem/42678977>

        Reviewed by Jer Noble.

        Test: media/deactivate-audio-session.html

        * platform/audio/AudioSession.cpp:
        (WebCore::AudioSession::tryToSetActive):
        (WebCore::AudioSession::tryToSetActiveInternal):
        * platform/audio/AudioSession.h:
        (WebCore::AudioSession::isActive const):

        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::removeSession):
        (WebCore::deactivateAudioSession):
        (WebCore::PlatformMediaSessionManager::shouldDeactivateAudioSession):
        (WebCore::PlatformMediaSessionManager::setShouldDeactivateAudioSession):
        * platform/audio/PlatformMediaSessionManager.h:

        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::tryToSetActiveInternal):
        (WebCore::AudioSession::tryToSetActive): Deleted.

        * platform/audio/mac/AudioSessionMac.cpp:
        (WebCore::AudioSession::tryToSetActiveInternal):
        (WebCore::AudioSession::tryToSetActive): Deleted.

        * testing/Internals.cpp:
        (WebCore::Internals::audioSessionActive const):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-01-07  David Kilzer  <ddkilzer@apple.com>

        PlatformECKey should use a std::unique_ptr
        <https://webkit.org/b/193170>

        Reviewed by Brent Fulgham.

        Broadly:
        - Switch from using raw pointers to using std::unique_ptr<> to
          hold PlatformECKey.
        - Introduce PlatformECKeyContainer type to handle different
          std::unique_ptr<> types on each platform.
        - Get rid of custom CryptoKeyEC destructors since the
          std::unique_ptr<> handles that with a Deleter.
        - Initialize stack variables to nullptr.

        * crypto/gcrypt/CryptoKeyECGCrypt.cpp:
        (WebCore::CryptoKeyEC::keySizeInBits const):
        (WebCore::CryptoKeyEC::platformGeneratePair):
        (WebCore::CryptoKeyEC::platformImportRaw):
        (WebCore::CryptoKeyEC::platformImportJWKPublic):
        (WebCore::CryptoKeyEC::platformImportJWKPrivate):
        (WebCore::CryptoKeyEC::platformImportSpki):
        (WebCore::CryptoKeyEC::platformImportPkcs8):
        (WebCore::CryptoKeyEC::platformExportRaw const):
        (WebCore::CryptoKeyEC::platformAddFieldElements const):
        (WebCore::CryptoKeyEC::platformExportSpki const):
        (WebCore::CryptoKeyEC::platformExportPkcs8 const):
        (WebCore::CryptoKeyEC::~CryptoKeyEC): Deleted.
        * crypto/keys/CryptoKeyEC.cpp:
        (WebCore::CryptoKeyEC::CryptoKeyEC):
        * crypto/keys/CryptoKeyEC.h:
        (WebCore::CCECCryptorRefDeleter::operator() const):
        * crypto/mac/CryptoKeyECMac.cpp:
        (WebCore::CryptoKeyEC::keySizeInBits const):
        (WebCore::CryptoKeyEC::platformGeneratePair):
        (WebCore::CryptoKeyEC::platformImportRaw):
        (WebCore::CryptoKeyEC::platformExportRaw const):
        (WebCore::CryptoKeyEC::platformImportJWKPublic):
        (WebCore::CryptoKeyEC::platformImportJWKPrivate):
        (WebCore::CryptoKeyEC::platformAddFieldElements const):
        (WebCore::CryptoKeyEC::platformImportSpki):
        (WebCore::CryptoKeyEC::platformExportSpki const):
        (WebCore::CryptoKeyEC::platformImportPkcs8):
        (WebCore::CryptoKeyEC::platformExportPkcs8 const):
        (WebCore::CryptoKeyEC::~CryptoKeyEC): Deleted.

2019-01-07  Antti Koivisto  <antti@apple.com>

        UI process side scrollbars for UI side compositing on Mac
        https://bugs.webkit.org/show_bug.cgi?id=193106

        Reviewed by Tim Horton.

        * page/FrameView.cpp:
        (WebCore::FrameView::paintScrollCorner):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):

        Pass scrollbar host layers and the dark appearance bit to the scrolling tree.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::verticalScrollbarLayerForFrameView):
        (WebCore::ScrollingCoordinator::horizontalScrollbarLayerForFrameView):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollableAreaParameters::ScrollableAreaParameters):
        (WebCore::ScrollableAreaParameters::operator== const):
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
        (WebCore::ScrollingStateFrameScrollingNode::setScrollbarLayers):
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::scrollableAreaSize const):
        (WebCore::ScrollingTreeScrollingNode::totalContentsSize const):
        (WebCore::ScrollingTreeScrollingNode::useDarkAppearanceForScrollbars const):
        (WebCore::ScrollingTreeScrollingNode::lastCommittedScrollPosition const):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::useDarkAppearanceForScrollbars const):

        Factor into a function as this is used in several places.

        * platform/ScrollableArea.h:
        * platform/mac/NSScrollerImpDetails.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollerImpDelegate effectiveAppearanceForScrollerImp:]):
        * platform/mac/ScrollbarThemeMac.h:

2019-01-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Native caret shows up alongside the page's caret when requesting desktop site on jsfiddle.net
        https://bugs.webkit.org/show_bug.cgi?id=193180
        <rdar://problem/45971041>

        Reviewed by Tim Horton.

        Adjust a method on RenderObject to additionally detect when the RenderObject is inside of an `overflow: hidden`
        container that is also empty. See WebKit ChangeLog for more details.

        Test:   editing/selection/ios/hide-selection-in-empty-overflow-hidden-container.html
                editing/selection/ios/show-selection-in-empty-overflow-hidden-document.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isTransparentOrFullyClippedRespectingParentFrames const):
        (WebCore::RenderObject::isTransparentRespectingParentFrames const): Deleted.
        * rendering/RenderObject.h:

2019-01-07  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Margin collapsing should not be limited to in-flow non-replaced boxes.
        https://bugs.webkit.org/show_bug.cgi?id=193183

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        * layout/LayoutUnits.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedHeight):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin const):

2019-01-07  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Move MarginCollapse from BlockFormattingContext::Geometry to BlockFormattingContext
        https://bugs.webkit.org/show_bug.cgi?id=193181

        Reviewed by Antti Koivisto.

        This is in preparation to share margin collapsing across all boxes in block formatting context.

        * layout/blockformatting/BlockFormattingContext.h:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::computedNonCollapsedMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::computedNonCollapsedMarginAfter):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::nonCollapsedMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::nonCollapsedMarginAfter):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedMarginBeforeFromFirstChild):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedMarginAfterFromLastChild):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithParentMarginAfter):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithParentMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithSiblingMarginBeforeWithClearance):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithParentMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithParentMarginAfter):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithPreviousSibling):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithNextSibling):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginsCollapseThrough):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfter):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::computedNonCollapsedMarginBefore): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::computedNonCollapsedMarginAfter): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::nonCollapsedMarginBefore): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::nonCollapsedMarginAfter): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::collapsedMarginBeforeFromFirstChild): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::collapsedMarginAfterFromLastChild): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginBeforeCollapsesWithParentMarginAfter): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginBeforeCollapsesWithParentMarginBefore): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginAfterCollapsesWithSiblingMarginBeforeWithClearance): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginAfterCollapsesWithParentMarginBefore): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginAfterCollapsesWithParentMarginAfter): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginBeforeCollapsesWithPreviousSibling): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginAfterCollapsesWithNextSibling): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginsCollapseThrough): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginBefore): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginAfter): Deleted.

2019-01-07  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Use Widget bounds for PlatformScreen rectangle information
        https://bugs.webkit.org/show_bug.cgi?id=193190

        Reviewed by Philippe Normand.

        Provide a better screen area estimate in screenRect() and
        screenAvailableRect() return values than the current 1240x640 value by
        using the Widget's bounds rectangle.

        This approach is only factually correct when the Widget-associated view
        is displayed in fullscreen, but it provides a better estimate even when
        displayed in any other case as well. WPE doesn't provide specific API
        that could enable the embedding environment to provide this information.

        * platform/wpe/PlatformScreenWPE.cpp:
        (WebCore::screenRect): Return bounds of the Widget object.
        (WebCore::screenAvailableRect): Relay the call to screenRect().

2019-01-07  Zan Dobersek  <zdobersek@igalia.com>

        Make Gradient::gradientSpaceTransform(), Pattern::patternSpaceTransform() methods const
        https://bugs.webkit.org/show_bug.cgi?id=193189

        Reviewed by Philippe Normand.

        The transform getter methods on the Gradient and Pattern classes both
        return const references to the transform objects, and don't modify any
        internal state. They should be marked const accordingly, allowing
        invocations of these two methods through const references to Gradient
        and Pattern objects.

        * platform/graphics/Gradient.h:
        (WebCore::Gradient::gradientSpaceTransform): Now const.
        * platform/graphics/Pattern.h:
        (WebCore::Pattern::patternSpaceTransform): Now const.

2019-01-07  Zan Dobersek  <zdobersek@igalia.com>

        REGRESSION(r239636): ImageDecoder::setEncodedDataStatusChangeCallback() can be called on a null decoder
        https://bugs.webkit.org/show_bug.cgi?id=193187

        Reviewed by Philippe Normand.

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::ensureDecoderAvailable): Bail before calling the
        setEncodedDataStatusChangeCallback() method when the returned
        ImageDecoder object is null.

2019-01-06  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Take over CoordinatedGraphics-named implementation of async scrolling classes
        https://bugs.webkit.org/show_bug.cgi?id=193133

        Reviewed by Michael Catanzaro.

        Move the CoordinatedGraphics-specific files under
        page/scrolling/coordinatedgraphics/ to page/scrolling/nicosia/, along
        with renaming the files and classes accordingly. Implementation will
        only depend on the Nicosia-specific layer structure and is not specific
        to the CoordinatedGraphics system.

        * PlatformPlayStation.cmake:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * page/scrolling/nicosia/ScrollingCoordinatorNicosia.cpp: Renamed from Source/WebCore/page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp.
        * page/scrolling/nicosia/ScrollingCoordinatorNicosia.h: Renamed from Source/WebCore/page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.h.
        * page/scrolling/nicosia/ScrollingStateNodeNicosia.cpp: Renamed from Source/WebCore/page/scrolling/coordinatedgraphics/ScrollingStateNodeCoordinatedGraphics.cpp.
        * page/scrolling/nicosia/ScrollingTreeFixedNode.cpp: Renamed from Source/WebCore/page/scrolling/coordinatedgraphics/ScrollingTreeFixedNode.cpp.
        * page/scrolling/nicosia/ScrollingTreeFixedNode.h: Renamed from Source/WebCore/page/scrolling/coordinatedgraphics/ScrollingTreeFixedNode.h.
        * page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp: Renamed from Source/WebCore/page/scrolling/coordinatedgraphics/ScrollingTreeFrameScrollingNodeCoordinatedGraphics.cpp.
        * page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h: Renamed from Source/WebCore/page/scrolling/coordinatedgraphics/ScrollingTreeFrameScrollingNodeCoordinatedGraphics.h.
        * page/scrolling/nicosia/ScrollingTreeNicosia.cpp: Renamed from Source/WebCore/page/scrolling/coordinatedgraphics/ScrollingTreeCoordinatedGraphics.cpp.
        * page/scrolling/nicosia/ScrollingTreeNicosia.h: Renamed from Source/WebCore/page/scrolling/coordinatedgraphics/ScrollingTreeCoordinatedGraphics.h.
        * page/scrolling/nicosia/ScrollingTreeStickyNode.cpp: Renamed from Source/WebCore/page/scrolling/coordinatedgraphics/ScrollingTreeStickyNode.cpp.
        * page/scrolling/nicosia/ScrollingTreeStickyNode.h: Renamed from Source/WebCore/page/scrolling/coordinatedgraphics/ScrollingTreeStickyNode.h.
        * platform/TextureMapper.cmake:

2019-01-06  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import U2F command/response converters from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=193150
        <rdar://problem/47054028>

        Reviewed by Brent Fulgham.

        This patch imports Chromium's U2F command/response converters:
        https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-client-to-authenticator-protocol-v2.0-id-20180227.html#u2f-interoperability
        1. It directly imports the following files and suit them to WebKit's coding style:
        https://cs.chromium.org/chromium/src/device/fido/u2f_command_constructor.cc?l=1&rcl=db624110317d01efa78cd32e7be1524190e1beb0
        https://cs.chromium.org/chromium/src/device/fido/u2f_command_constructor.h?rcl=db624110317d01efa78cd32e7be1524190e1beb0
        https://cs.chromium.org/chromium/src/device/fido/u2f_command_constructor_unittest.cc?rcl=db624110317d01efa78cd32e7be1524190e1beb0
        2. It gathers the following methods into U2fResponseConverter:
        AuthenticatorMakeCredentialResponse::CreateFromU2fRegisterResponse()
        AuthenticatorGetAssertionResponse::CreateFromU2fSignResponse()
        3. It also updates FidoConstants.h, FidoTestData.h and CtapResponseTest.cpp accordingly.

        Besides importing stuff from Chroimum, it also gathers a bunch of constants and helper functions into WebAuthenticationConstants.h
        and WebAuthenticationUtils.h. It also fixes Bug 183534: 2) and 7).

        Covered by API tests.

        * Modules/webauthn/AuthenticatorCoordinator.cpp:
        (WebCore::AuthenticatorCoordinatorInternal::produceClientDataJsonHash):
        * Modules/webauthn/WebAuthenticationConstants.h: Copied from Source/WebCore/Modules/webauthn/COSEConstants.h.
        * Modules/webauthn/WebAuthenticationUtils.cpp: Added.
        (WebCore::convertBytesToVector):
        (WebCore::produceRpIdHash):
        (WebCore::encodeES256PublicKeyAsCBOR):
        (WebCore::buildAttestedCredentialData):
        (WebCore::buildAuthData):
        (WebCore::buildAttestationObject):
        * Modules/webauthn/WebAuthenticationUtils.h: Renamed from Source/WebCore/Modules/webauthn/COSEConstants.h.
        * Modules/webauthn/fido/DeviceResponseConverter.cpp:
        (fido::getCredentialId):
        (fido::readCTAPGetInfoResponse):
        * Modules/webauthn/fido/FidoConstants.h:
        * Modules/webauthn/fido/U2fCommandConstructor.cpp: Added.
        (fido::WebCore::constructU2fRegisterCommand):
        (fido::WebCore::constructU2fSignCommand):
        (fido::isConvertibleToU2fRegisterCommand):
        (fido::isConvertibleToU2fSignCommand):
        (fido::convertToU2fRegisterCommand):
        (fido::convertToU2fCheckOnlySignCommand):
        (fido::convertToU2fSignCommand):
        (fido::constructBogusU2fRegistrationCommand):
        * Modules/webauthn/fido/U2fCommandConstructor.h: Added.
        * Modules/webauthn/fido/U2fResponseConverter.cpp: Added.
        (fido::WebCore::extractECPublicKeyFromU2fRegistrationResponse):
        (fido::WebCore::extractCredentialIdFromU2fRegistrationResponse):
        (fido::WebCore::createAttestedCredentialDataFromU2fRegisterResponse):
        (fido::WebCore::parseX509Length):
        (fido::WebCore::createFidoAttestationStatementFromU2fRegisterResponse):
        (fido::readU2fRegisterResponse):
        (fido::readFromU2fSignResponse):
        * Modules/webauthn/fido/U2fResponseConverter.h: Added.
        * Modules/webgpu/WebGPUCommandBuffer.cpp:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-01-06  David Kilzer  <ddkilzer@apple.com>

        Leak of WTF::Function objects in WebCore::CryptoKeyRSA::generatePair() (64-80 bytes each) in com.apple.WebKit.WebContent running WebKit layout tests
        <https://webkit.org/b/193177>
        <rdar://problem/47072196>

        Reviewed by Saam Barati.

        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::generatePair): Fix the leak by changing
        raw pointers to heap-allocated __block variables to hold the
        WTF::Function objects until they are consumed within the block
        passed to dispatch_async().  The __block variables act like
        captured variables in a C++ lambda and have the same lifetime as
        the block that they are captured in.  Note that we would have to
        convert the source file from C++ to Objective-C++ to use a C++
        lambda functor with dispatch_async(), which creates its own
        issue because the comipiler requires a copy constructor to
        convert the C++ lambda to a block functor, but the copy
        constructor for the C++ lambda is implicitly deleted because the
        WTF::Function copy constructor is explicitly deleted.  Whew!

2019-01-06  Pablo Saavedra  <psaavedra@igalia.com>

        [WPE][GTK] Building with ENABLE_VIDEO=OFF fails trying to use Document MediaPlayback functions.
        https://bugs.webkit.org/show_bug.cgi?id=193174

        Reviewed by Michael Catanzaro.

        * page/Page.cpp:
        (WebCore::Page::stopAllMediaPlayback):
        (WebCore::Page::suspendAllMediaPlayback):
        (WebCore::Page::resumeAllMediaPlayback):

2019-01-05  David Kilzer  <ddkilzer@apple.com>

        Leak of two CCRSACryptorRef (4.0 Kbytes/1 page each) in com.apple.WebKit.WebContent running WebKit layout tests
        <https://webkit.org/b/193154>
        <rdar://problem/47052993>

        Reviewed by Brent Fulgham.

        Broadly:
        - Fix leaks by switching from using raw pointers to using
          std::unique_ptr<>.
        - Introduce PlatformRSAKeyContainer type to handle different
          std::unique_ptr<> on each platform.
        - Get rid of custom CryptoKeyRSA destructors since the
          std::unique_ptr<> handles that with a Deleter.
        - Initialize stack variables to nullptr.

        * crypto/gcrypt/CryptoKeyRSAGCrypt.cpp:
        (WebCore::CryptoKeyRSA::create):
        (WebCore::CryptoKeyRSA::CryptoKeyRSA):
        (WebCore::CryptoKeyRSA::keySizeInBits const):
        (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):
        (WebCore::CryptoKeyRSA::~CryptoKeyRSA): Deleted.
        * crypto/keys/CryptoKeyRSA.h:
        (WebCore::CCRSACryptorRefDeleter::operator() const):
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::getPublicKeyComponents):
        (WebCore::getPrivateKeyComponents):
        (WebCore::CryptoKeyRSA::CryptoKeyRSA):
        (WebCore::CryptoKeyRSA::create):
        (WebCore::CryptoKeyRSA::exportData const):
        (WebCore::CryptoKeyRSA::generatePair):
        (WebCore::CryptoKeyRSA::importSpki):
        (WebCore::CryptoKeyRSA::importPkcs8):
        (WebCore::CryptoKeyRSA::~CryptoKeyRSA): Deleted.

2019-01-05  Zalan Bujtas  <zalan@apple.com>

        Incorrect clipping across compositing boundary.
        https://bugs.webkit.org/show_bug.cgi?id=193172
        <rdar://problem/44693008>

        Reviewed by Simon Fraser.

        Use temporary cliprect type when crossing compositing boundary to prevent cliprect caching.

        The issue here is that RenderLayer::backgroundClipRect() could cross compositing boundary by calling parentClipRects() which triggers
        clip rect update using the wrong painting root. This happens when the layer hierarchy and the compositing context do not match.
        For clip rect computation, we need to climb up on the layer hierarchy (calling parent layer's cliprect functions)
        but we also need to make sure that the computed cliprects on any given layer are cached only when the painting root is correct.
        It ensures that when we paint a layer (with the painting root as entry point), the cached cliprects are always based on its onw painting root. 

        Test: compositing/clipping/cached-cliprect-with-compositing-boundary.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):

2019-01-05  Youenn Fablet  <youenn@apple.com>

        Service Worker fetch should obey its referrer policy
        https://bugs.webkit.org/show_bug.cgi?id=193152

        Reviewed by Chris Dumez.

        Pass referrer policy retrieved when fetching the service worker script to the SWServer.
        The SWServer then stores it persistently and sends it to the manager creating service workers.
        This manager will then set the referrer policy on the dummy Document of the corresponding service worker.

        Covered by rebased test.

        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::didReceiveResponse):
        * workers/WorkerScriptLoader.h:
        (WebCore::WorkerScriptLoader::referrerPolicy const):
        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::failedFetchingScript):
        * 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::encode const):
        (WebCore::ServiceWorkerFetchResult::decode):
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::notifyFinished):
        * workers/service/ServiceWorkerJobClient.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::createPageForServiceWorker):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::recordsTableSchema):
        (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:

2019-01-04  Simon Fraser  <simon.fraser@apple.com>

        Factor legacy WK1 code for fixed and scrolling layers into their own helper class
        https://bugs.webkit.org/show_bug.cgi?id=193165

        Reviewed by Frédéric Wang.

        RenderLayerCompositor has some code to handle registration of viewport-constrained
        and scrolling layers which is specific to iOS WK1. To reduce pollution, move this
        into its own helper class called LegacyWebKitScrollingLayerCoordinator, which is only
        allocated for iOS WK1.
        
        iOS WK1 never has a ScrollingCoordinator, so rather than the check for scrollingCoordinator(),
        we know that we only made a LegacyWebKitScrollingLayerCoordinator when there's a platform widget
        (i.e. WK1).
        
        * page/ChromeClient.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::updateCustomLayersAfterFlush):
        (WebCore::RenderLayerCompositor::didFlushChangesForLayer):
        (WebCore::RenderLayerCompositor::setIsInWindow):
        (WebCore::RenderLayerCompositor::willRemoveScrollingLayerWithBacking): No longer check the page cache state; now we
        destroy the render tree of pages in the page cache, so we should never hit this code path.
        (WebCore::RenderLayerCompositor::didAddScrollingLayer):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::registerAllViewportConstrainedLayers):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::unregisterAllViewportConstrainedLayers):
        (WebCore::scrollbarHasDisplayNone):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::updateScrollingLayer):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::registerAllScrollingLayers):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::registerScrollingLayersNeedingUpdate):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::unregisterAllScrollingLayers):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::addScrollingLayer):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::removeScrollingLayer):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::didFlushChangesForLayer):
        (WebCore::updateScrollingLayerWithClient): Deleted.
        (WebCore::RenderLayerCompositor::registerAllViewportConstrainedLayers): Deleted.
        (WebCore::RenderLayerCompositor::unregisterAllViewportConstrainedLayers): Deleted.
        (WebCore::RenderLayerCompositor::registerAllScrollingLayers): Deleted.
        (WebCore::RenderLayerCompositor::unregisterAllScrollingLayers): Deleted.
        * rendering/RenderLayerCompositor.h:
        (WebCore::LegacyWebKitScrollingLayerCoordinator::LegacyWebKitScrollingLayerCoordinator):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::~ServiceWorkerContainer):

2019-01-05  Zalan Bujtas  <zalan@apple.com>

        [LFC] VerticalMargin should only have the used values.
        https://bugs.webkit.org/show_bug.cgi?id=193168

        Reviewed by Antti Koivisto.

        Split VerticalMargin into ComputedVerticalMargin and UsedVerticalMargin.
        ComputedVerticalMargin holds the computed (optional) values while UsedVerticalMargin holds both the
        collapsed (optional) and the non-collapsed values.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedVerticalMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedVerticalMarginValue): Deleted.
        * layout/FormattingContextQuirks.cpp:
        (WebCore::Layout::FormattingContext::Quirks::heightValueOfNearestContainingBlockWithFixedHeight):
        * layout/LayoutUnits.h:
        * layout/MarginTypes.h:
        (WebCore::Layout::UsedVerticalMargin::before const):
        (WebCore::Layout::UsedVerticalMargin::after const):
        (WebCore::Layout::UsedVerticalMargin::nonCollapsedValues const):
        (WebCore::Layout::UsedVerticalMargin::collapsedValues const):
        (WebCore::Layout::UsedVerticalMargin::hasCollapsedValues const):
        (WebCore::Layout::UsedVerticalMargin::setCollapsedValues):
        (WebCore::Layout::UsedVerticalMargin::UsedVerticalMargin):
        (WebCore::Layout::VerticalMargin::nonCollapsedValues const): Deleted.
        (WebCore::Layout::VerticalMargin::collapsedValues const): Deleted.
        (WebCore::Layout::VerticalMargin::setCollapsedValues): Deleted.
        (WebCore::Layout::VerticalMargin::VerticalMargin): Deleted.
        (WebCore::Layout::VerticalMargin::usedValues const): Deleted.
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedHeight):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::computedNonCollapsedMarginBefore):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::computedNonCollapsedMarginAfter):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::setVerticalMargin):
        (WebCore::Display::Box::verticalMargin const):
        (WebCore::Display::Box::marginBefore const):
        (WebCore::Display::Box::marginAfter const):
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin const):

2019-01-04  Daniel Bates  <dabates@apple.com>

        REGRESSION (r238522): Erratic scrolling on Google flights search result page and vrbo.com
        https://bugs.webkit.org/show_bug.cgi?id=192996
        <rdar://problem/46573552>

        Reviewed by Simon Fraser.

        Only scroll a text field if its inner text size changes and it is the currently active and
        focused element on the page.

        Test: fast/scrolling/page-should-not-scroll-on-unfocused-text-field-layout.html

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):

2019-01-04  Alex Christensen  <achristensen@webkit.org>

        Progress towards fixing Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=193105

        Reviewed by Don Olmstead.

        * PlatformMac.cmake:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/GPURenderPassEncoder.h:

2019-01-04  Zalan Bujtas  <zalan@apple.com>

        [iOS] ERROR: post-layout: dirty renderer(s) in WebCore::RenderTreeNeedsLayoutChecker::~RenderTreeNeedsLayoutChecker()
        https://bugs.webkit.org/show_bug.cgi?id=189608
        <rdar://problem/44473299>

        Reviewed by Simon Fraser.

        When a frameset/iframe is hidden and we skip layout, clear the dirty flag on its subtree as well.

        Covered by fast/frames/invalid-frameset.html.

        * rendering/RenderFrameSet.cpp:
        (WebCore::clearSiblingSubtrees):
        (WebCore::RenderFrameSet::positionFrames):
        (WebCore::RenderFrameSet::positionFramesWithFlattening):

2019-01-04  Youenn Fablet  <youenn@apple.com>

        [Fetch API] Implement abortable fetch
        https://bugs.webkit.org/show_bug.cgi?id=174980
        <rdar://problem/46861402>

        Reviewed by Chris Dumez.

        Add an AbortSignal to FetchRequest.

        Add support for AbortSignal algorithm.
        The fetch request signal is added an algorithm to abort the fetch.
        Update clone algorithm to let signal of the cloned request be following the origin request.

        Update ReadableStream error handling to return an exception instead of a string.
        This allows passing an AbortError instead of a TypeError as previously done.

        Update FetchBodyOwner to store a loading error either as an exception or as a resource error.
        The latter is used for passing the error from service worker back to the page.
        The former is used to pass it to ReadableStream or body accessors.

        Covered by enabled tests.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::put):
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::consumeAsStream):
        (WebCore::FetchBody::loadingFailed):
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::FetchBodyConsumer::loadingFailed):
        * Modules/fetch/FetchBodyConsumer.h:
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::arrayBuffer):
        (WebCore::FetchBodyOwner::blob):
        (WebCore::FetchBodyOwner::cloneBody):
        (WebCore::FetchBodyOwner::formData):
        (WebCore::FetchBodyOwner::json):
        (WebCore::FetchBodyOwner::text):
        (WebCore::FetchBodyOwner::loadBlob):
        (WebCore::FetchBodyOwner::blobLoadingFailed):
        (WebCore::FetchBodyOwner::consumeBodyAsStream):
        (WebCore::FetchBodyOwner::setLoadingError):
        * Modules/fetch/FetchBodyOwner.h:
        (WebCore::FetchBodyOwner::loadingError const):
        (WebCore::FetchBodyOwner::loadingException const):
        * Modules/fetch/FetchBodySource.cpp:
        (WebCore::FetchBodySource::error):
        * Modules/fetch/FetchBodySource.h:
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::initializeWith):
        (WebCore::FetchRequest::clone):
        * Modules/fetch/FetchRequest.h:
        (WebCore::FetchRequest::FetchRequest):
        * Modules/fetch/FetchRequest.idl:
        * Modules/fetch/FetchRequestInit.h:
        (WebCore::FetchRequestInit::hasMembers const):
        * Modules/fetch/FetchRequestInit.idl:
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::clone):
        (WebCore::FetchResponse::fetch):
        (WebCore::FetchResponse::BodyLoader::didFail):
        * Modules/fetch/FetchResponse.h:
        * bindings/js/ReadableStreamDefaultController.h:
        (WebCore::ReadableStreamDefaultController::error):
        * dom/AbortSignal.cpp:
        (WebCore::AbortSignal::abort):
        (WebCore::AbortSignal::follow):
        * dom/AbortSignal.h:

2019-01-04  Brent Fulgham  <bfulgham@apple.com>

        Parsed protocol of javascript URLs with embedded newlines and carriage returns do not match parsed protocol in Chrome and Firefox
        https://bugs.webkit.org/show_bug.cgi?id=193155
        <rdar://problem/40230982>

        Reviewed by Chris Dumez.

        Test: fast/loader/comment-only-javascript-url.html

        Make a special case for URLs beginning with 'javascript:'. We should always
        treat these as JS URLs, even if the content contained within the URL
        string might match other parts of the URL parsing spec.

        * html/URLUtils.h:
        (WebCore::URLUtils<T>::protocol const):

2019-01-04  Jer Noble  <jer.noble@apple.com>

        [WebKitLegacy] Media playback pauses on scroll
        https://bugs.webkit.org/show_bug.cgi?id=192829

        Reviewed by Eric Carlson.

        New API tests:
            WebKitLegacy.ScrollingDoesNotPauseMedia
            WKWebView.StopAllMediaPlayback
            WKWebView.SuspendResumeAllMediaPlayback

        Do not use suspendActiveDOMObjects(ReasonForSuspension::PageWillBeSuspended) to pause
        video. Roll back the changes to HTMLMediaElement, and introduce a new set of Page calls
        suspendAllMediaPlayback() & resumeAllMediaPlayback() which replaces the removed bahavior.

        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::stopAllMediaPlayback):
        (WebCore::Document::suspendAllMediaPlayback):
        (WebCore::Document::resumeAllMediaPlayback):
        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::parseAttribute):
        (WebCore::HTMLMediaElement::didFinishInsertingNode):
        (WebCore::HTMLMediaElement::setSrcObject):
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        (WebCore::HTMLMediaElement::suspend):
        (WebCore::HTMLMediaElement::resume):
        (WebCore::HTMLMediaElement::webkitCurrentPlaybackTargetIsWireless const):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::webkitCurrentPlaybackTargetIsWireless const): Deleted.
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackPermitted const):
        * page/Page.cpp:
        (WebCore::Page::stopAllMediaPlayback):
        (WebCore::Page::suspendAllMediaPlayback):
        (WebCore::Page::resumeAllMediaPlayback):
        * page/Page.h:
        (WebCore::Page::mediaPlaybackIsSuspended):
        * platform/audio/PlatformMediaSession.h:
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::suspendAllMediaPlaybackForDocument):
        (WebCore::PlatformMediaSessionManager::resumeAllMediaPlaybackForDocument):
        * platform/audio/PlatformMediaSessionManager.h:

2019-01-04  Chris Dumez  <cdumez@apple.com>

        Add support for toggling device orientation API support per site
        https://bugs.webkit.org/show_bug.cgi?id=193143
        <rdar://problem/46605724>

        Reviewed by Alex Christensen.

        Add support for toggling device orientation API support per site via _WKWebsitePolicies.

        * dom/Document.cpp:
        (WebCore::Document::simulateDeviceOrientationChange):
        * dom/Document.h:
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::deviceOrientationEventEnabled const):
        (WebCore::DocumentLoader::setDeviceOrientationEventEnabled):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):

2019-01-04  Jer Noble  <jer.noble@apple.com>

        Web Content process main thread blocked beneath ImageDecoderAVFObjC::readSamples for many seconds on imgur.com
        https://bugs.webkit.org/show_bug.cgi?id=191806
        <rdar://problem/46151477>

        Reviewed by Dean Jackson.

        Test: http/tests/images/mp4-partial-load.html

        Rather than use an AVAssetReaderTrackOutput, which will load both sample metadata and sample data
        synchronously when a sample is requested, use AVAssetReaderSampleReferenceOutput, which only loads
        sample metadata, including the byte offset and byte length of the sample data. By waiting until the
        AVAsset signals that it's own metadata is loaded, we can safely parse all the sample metadata without
        blocking on network loads. Once enough data is loaded, we can replace the byte reference and offset
        attachements in the sample with actual data, and mark the sample as "complete".

        Because the existing ImageSource assumes that image data parsing will occur synchronously, and that
        synchronous parsing could cause a hang if the metadata is not loaded, add a new callback method which
        allows the ImageSource to be notified when the encodedDataStatus changes. The ImageSource notifies the
        CacheImage, which notifies the RenderImage, and thus the asynchronous parsing will kick off the
        renderer's animation loop.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImageObserver::encodedDataStatusChanged):
        (WebCore::CachedImage::encodedDataStatusChanged):
        * loader/cache/CachedImage.h:
        * platform/graphics/ImageDecoder.h:
        (WebCore::ImageDecoder::setEncodedDataStatusChangeCallback):
        * platform/graphics/ImageObserver.h:
        (WebCore::ImageObserver::encodedDataStatusChanged):
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::ensureDecoderAvailable):
        (WebCore::ImageSource::encodedDataStatusChanged):
        (WebCore::ImageSource::frameDecodingStatusAtIndex):
        * platform/graphics/ImageSource.h:
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.h:
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (-[WebCoreSharedBufferResourceLoaderDelegate data]):
        (WebCore::ImageDecoderAVFObjCSample::byteRange const):
        (WebCore::ImageDecoderAVFObjC::readSamples):
        (WebCore::ImageDecoderAVFObjC::setEncodedDataStatusChangeCallback):
        (WebCore::ImageDecoderAVFObjC::encodedDataStatus const):
        (WebCore::ImageDecoderAVFObjC::frameIsCompleteAtIndex const):
        (WebCore::ImageDecoderAVFObjC::createFrameImageAtIndex):
        (WebCore::ImageDecoderAVFObjC::sampleIsComplete const):

2019-01-04  Youenn Fablet  <youenn@apple.com>

        CSP violation reports should bypass CSP checks
        https://bugs.webkit.org/show_bug.cgi?id=192857
        <rdar://problem/46887236>

        Reviewed by Chris Dumez.

        For ping loads, pass the option to do CSP checks from PingLoader to LoaderStrategy.
        This new option is unused by WebKit Legacy.
        It is used by WebKit loader strategy to only send any CSP response header to network process
        in case CSP checks should be done.

        This option is used to disable CSP checks for Ping Loads that report CSP violations.

        Test: http/wpt/fetch/csp-reports-bypass-csp-checks.html

        * loader/LoaderStrategy.h:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::sendViolationReport):
        (WebCore::PingLoader::startPingLoad):
        * loader/PingLoader.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):

2019-01-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Merge WebEditCommandProxy::nameForEditAction and undoNameForEditAction into a single function
        https://bugs.webkit.org/show_bug.cgi?id=193129

        Reviewed by Tim Horton.

        Adds a new helper function that returns the undo/redo name for a given EditAction. No change in behavior.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/EditAction.cpp: Copied from Source/WebKit/UIProcess/WebEditCommandProxy.cpp.
        (WebCore::nameForUndoRedo):
        * editing/EditAction.h:
        * editing/Editor.cpp:

2019-01-03  Matt Rajca  <mrajca@apple.com>

        Make DidPlayMediaPreventedFromPlaying autoplay event more generic.
        https://bugs.webkit.org/show_bug.cgi?id=193128
        rdar://34554231

        Reviewed by Jer Noble.

        Today, the "DidPlayMediaPreventedFromPlaying" autoplay event is only sent for
        media prevented from autoplaying. It could be generalized to a "DidPlayMediaWithUserGesture"
        event along with a flag that indicates whether or not autoplay was actually prevented.
        Moreover, we can include a flag that indicates whether the media element in question
        is main content. Clients will then know in more cases when media was played with a user
        gesture, whether or not it has audio, as well as its main content status. While the main
        content heuristics may not be perfect, they covered the top 20 video-centric websites that
        this was tested with and are meant to be used by clients for data evaluation purposes.

        As part of this, the PlaybackWithoutUserGesture enum was renamed to AutoplayEventPlaybackState
        since it now also applies to cases where there is a user gesture. The
        `m_playbackWithoutUserGestureStartedTime` member variable was also removed in favor of
        `playbackStartedTime` which also covers all the cases we care about.

        Tests: existing API tests were updated to reflect the new names. New API tests
        were added for the new case in which the "DidPlayMediaWithUserGesture" event is sent.

        * html/HTMLMediaElement.cpp:
        (WebCore::convertEnumerationToString): Update to new enum cases.
        (WebCore::HTMLMediaElement::setReadyState): Ditto.
        (WebCore::HTMLMediaElement::play): Ditto.
        (WebCore::HTMLMediaElement::playInternal): Also cover the case where
         playback was not prevented but there was a user gesture.
        (WebCore::HTMLMediaElement::pauseInternal): Use new name.
        (WebCore::HTMLMediaElement::setVolume): Use new name.
        (WebCore::HTMLMediaElement::playbackProgressTimerFired): Dispatch the
         DidPlayMediaWithUserGesture event when playback was started with a user
         gesture as well.
        (WebCore::HTMLMediaElement::mediaPlayerDidAddAudioTrack): Use new name.
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged): Ditto.
        (WebCore::HTMLMediaElement::stopWithoutDestroyingMediaPlayer): Ditto.
        (WebCore::HTMLMediaElement::handleAutoplayEvent): Pass along new media state.
        (WebCore::HTMLMediaElement::userDidInterfereWithAutoplay): Use new name.
        (WebCore::HTMLMediaElement::setAutoplayEventPlaybackState): Stop setting
         m_playbackWithoutUserGestureStartedTime in favor of using playbackStartedTime.
        (WebCore::HTMLMediaElement::updateShouldPlay): Use new name.
        (WebCore::HTMLMediaElement::setPlaybackWithoutUserGesture): Renamed.
        * html/HTMLMediaElement.h:
        (WTF::LogArgument<WebCore::HTMLMediaElement::AutoplayEventPlaybackState>::toString): Renamed from...
        (WTF::LogArgument<WebCore::HTMLMediaElement::PlaybackWithoutUserGesture>::toString):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::isMainContentForPurposesOfAutoplayEvents const): Don't
         do the hit testing check for the purposes of autoplay events. It seems to fail on the
         basic Vimeo player due to overlapping divs.
        (WebCore::isElementMainContentForPurposesOfAutoplay):
        (WebCore::MediaElementSession::updateIsMainContent const): Keep the existing behavior
         here of hit testing.
        (WebCore::isMainContentForPurposesOfAutoplay): Renamed.
        * html/MediaElementSession.h:
        * page/AutoplayEvent.h:

2019-01-04  Youenn Fablet  <youenn@apple.com>

        Crash in WebCore::ServiceWorkerGlobalScope
        https://bugs.webkit.org/show_bug.cgi?id=192513
        <rdar://problem/46563880>

        Reviewed by Alex Christensen.

        Store the identifier in its own variable to make sure we do not use workerThread after being moved.

        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::skipWaiting):

2019-01-04  Chris Fleizach  <cfleizach@apple.com>

        AX: String check: "Rule" does not reflect the meaning of the <hr> html tag
        https://bugs.webkit.org/show_bug.cgi?id=193041
        <rdar://problem/46954090>

        Reviewed by Zalan Bujtas.

        * en.lproj/Localizable.strings:
        * platform/cocoa/LocalizedStringsCocoa.mm:
        (WebCore::AXHorizontalRuleDescriptionText):

2019-01-04  Zalan Bujtas  <zalan@apple.com>

        [LFC] ComputedHorizontalMargin should have optional members
        https://bugs.webkit.org/show_bug.cgi?id=193131

        Reviewed by Antti Koivisto.

        Split HorizontalMargin into UsedHorizontalMargin and ComputedHorizontalMargin. ComputedHorizontalMargin's members are optional.
        (see computed vs used values)

        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedHorizontalMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedHorizontalMarginValue): Deleted.
        * layout/LayoutUnits.h:
        * layout/MarginTypes.h:
        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBlockBoxInformationIfNeeded):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::setHorizontalMargin):
        (WebCore::Display::Box::setHorizontalComputedMargin):
        (WebCore::Display::Box::computedMarginStart const):
        (WebCore::Display::Box::computedMarginEnd const):
        * layout/floats/FloatAvoider.h:
        (WebCore::Layout::FloatAvoider::marginStart const):
        (WebCore::Layout::FloatAvoider::marginEnd const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::collectInlineContentForSubtree const):
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin):

2019-01-04  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Use computedValue and usedValue consistently
        https://bugs.webkit.org/show_bug.cgi?id=193059

        Reviewed by Antti Koivisto.

        https://www.w3.org/TR/CSS22/cascade.html#value-stages

        6.1.2 Computed values
        Specified values are resolved to computed values during the cascade; for example URIs are made absolute and 'em' and 'ex' units
        are computed to pixel or absolute lengths. Computing a value never requires the user agent to render the document...

        6.1.3 Used values
        Computed values are processed as far as possible without formatting the document. Some values, however, can only be determined when the document
        is being laid out. For example, if the width of an element is set to be a certain percentage of its containing block, the width cannot be determined
        until the width of the containing block has been determined. The used value is the result of taking the computed value and resolving any remaining
        dependencies into an absolute value.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::LayoutState):
        * layout/LayoutUnits.h:
        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBlockBoxInformationIfNeeded):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::Box):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::setHasValidHorizontalComputedMargin):
        (WebCore::Display::Box::setHorizontalComputedMargin):
        (WebCore::Display::Box::computedMarginStart const):
        (WebCore::Display::Box::computedMarginEnd const):
        (WebCore::Display::Box::setHasValidHorizontalNonComputedMargin): Deleted.
        (WebCore::Display::Box::setHorizontalNonComputedMargin): Deleted.
        (WebCore::Display::Box::nonComputedMarginStart const): Deleted.
        (WebCore::Display::Box::nonComputedMarginEnd const): Deleted.
        * layout/floats/FloatAvoider.h:
        (WebCore::Layout::FloatAvoider::marginStart const):
        (WebCore::Layout::FloatAvoider::marginEnd const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin const):

2019-01-03  Zalan Bujtas  <zalan@apple.com>

        REGRESSION: -webkit-appearance test case crashes
        https://bugs.webkit.org/show_bug.cgi?id=189302
        <rdar://problem/44143049>

        Reviewed by Wenson Hsieh.

        The painting and the layout positions of the cancel button need to match in order to be able to interact with it.
        This patch removes the previous position inlining attempts.

        Test: fast/forms/webkit-appearance-searchfield-cancel-button-crash.html

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):

2019-01-03  David Kilzer  <ddkilzer@apple.com>

        Leak of WebCore::LibWebRTCCertificateGenerator::RTCCertificateGeneratorCallback (48 bytes) in com.apple.WebKit.WebContent running WebKit layout tests
        <https://webkit.org/b/193122>
        <rdar://problem/47022987>

        Reviewed by Youenn Fablet.

        * Modules/mediastream/libwebrtc/LibWebRTCCertificateGenerator.cpp:
        (WebCore::LibWebRTCCertificateGenerator::RTCCertificateGeneratorCallback::AddRef const):
        (WebCore::LibWebRTCCertificateGenerator::RTCCertificateGeneratorCallback::Release const):
        - Remove `final` keyword so that
          `new rtc::RefCountedObject<RTCCertificateGeneratorCallback>()`
          can be called.
        (WebCore::LibWebRTCCertificateGenerator::generateCertificate):
        - To fix the leak call
          `new rtc::RefCountedObject<RTCCertificateGeneratorCallback>()`
          to create the object.

2019-01-03  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r238090): After showing the Find banner or tab bar, hit tests are vertically offset (or painting is not offset)
        https://bugs.webkit.org/show_bug.cgi?id=193124
        rdar://problem/46755409

        Reviewed by Tim Horton.

        Top content inset feeds into scrolling tree geometry, so when it changes we need to trigger
        an update of the root scrolling node, which happens via RenderLayerBacking::updateGeometry().
        So set a dirty bit on the root layer in frameViewDidChangeSize(), which is called from the code
        path that runs when top content inset changes.

        Find banner behavior is not easily testable. platform/mac/fast/events/content-inset-hit-testing.html did not detect the regression.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):

2019-01-03  Chris Dumez  <cdumez@apple.com>

        Potential infinite recursion in isFrameFamiliarWith(Frame&, Frame&)
        https://bugs.webkit.org/show_bug.cgi?id=192997
        <rdar://problem/46217271>

        Reviewed by Antti Koivisto.

        isFrameFamiliarWith(Frame&, Frame&) was called recursively using the passed frames' openers.
        The issue is that a Frame can be its opener. There could also be a cycle in the opener chain.

        To address the issue, simplify isFrameFamiliarWith() so that it is no longer recursive. We now
        only check if the frames belong to the same pages or if their openers do. We no longer check
        openers' opener and up.

        Note that this function is used to check if a frame is allowed to target another. In practice,
        it is unlikely to be useful to navigate an opener's opener and an openee's openee.

        Tests: fast/dom/Window/window-open-opener-cycle.html
               fast/dom/Window/window-open-self-as-opener.html

        * page/FrameTree.cpp:
        (WebCore::isFrameFamiliarWith):

2019-01-02  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r239306): Don't disable font smoothing in transparent layers on macOS Mojave and later
        https://bugs.webkit.org/show_bug.cgi?id=193095
        <rdar://problem/47014944>

        Reviewed by Zalan Bujtas.
        
        In r239306 we stopped making CALayers for font-smoothed text when not necessary on macOS Mojave
        and later. However, we still turned off smoothing for non-opaque layers (setShouldSmoothFonts(false)),
        which continues to affect the appearance of text.
        
        Fix by only calling setShouldSmoothFonts(false) when the OS supports font smoothing.

        Test: compositing/contents-format/subpixel-antialiased-text.html

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayer::drawLayerContents):

2019-01-02  David Kilzer  <ddkilzer@apple.com>

        Leak of CMSampleBuffer (752 bytes) in com.apple.WebKit.WebContent running WebKit layout tests
        <https://webkit.org/b/193016>
        <rdar://problem/46925703>

        Reviewed by Simon Fraser.

        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::copySampleBufferWithCurrentTimeStamp):
        - Change to return RetainPtr<CMSampleBufferRef>.
        - Check return value of CMSampleBufferCreateCopyWithNewTiming().
        (WebCore::MediaRecorderPrivateWriter::appendVideoSampleBuffer):
        - Check return value of copySampleBufferWithCurrentTimeStamp().
        - Fix leak by using RetainPtr<CMSampleBufferRef> returned from
          copySampleBufferWithCurrentTimeStamp() instead of leaking
          `bufferWithCurrentTime` by using retainPtr().
        (WebCore::createAudioFormatDescription):
        - Extract method from appendAudioSampleBuffer() to return
          RetainPtr<CMFormatDescriptionRef> after calling
          CMAudioFormatDescriptionCreate().
        - Check return value of CMAudioFormatDescriptionCreate().
        (WebCore::createAudioSampleBufferWithPacketDescriptions):
        - Extract method from appendAudioSampleBuffer() to return
          RetainPtr<CMSampleBufferRef> after calling
          CMAudioSampleBufferCreateWithPacketDescriptions().
        (WebCore::MediaRecorderPrivateWriter::appendAudioSampleBuffer):
        - Check return values of createAudioFormatDescription() and
          createAudioSampleBufferWithPacketDescriptions().
        - Fix leaks by extracting code into helper methods that return
          RetainPtr<> objects instead of leaking CMFormatDescriptionRef
          directly or leaking `sampleBuffer` by using retainPtr().

2019-01-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for using the current text selection as the find string on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193034
        <rdar://problem/45138739>

        Reviewed by Tim Horton.

        Add support for "TakeFindStringFromSelection" on iOS. Unlike macOS, iOS does not have a notion of a "find
        pasteboard" like macOS; instead, we handle this editing command by sending the selection string to the UI
        process, where it is exposed via WebKit SPI so that clients that present find-in-page UI (i.e. MobileSafari) are
        able to trigger find-in-page with this string.

        Test: WebKit.UseSelectionAsFindString

        * editing/Editor.cpp:
        (WebCore::Editor::canCopyExcludingStandaloneImages const):

        Make this helper function cross-platform.

        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap):
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::takeFindStringFromSelection):

        Move this from EditorMac to EditorCocoa, and implement it on iOS by calling into the editor client to update the
        find string (see WebKit/ChangeLog for more details).

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::canCopyExcludingStandaloneImages): Deleted.
        (WebCore::Editor::takeFindStringFromSelection): Deleted.
        * loader/EmptyClients.cpp:
        * page/EditorClient.h:

        Add a new editor client method to send the string for find-in-page to the UI process.

2019-01-02  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Implement `queryObjects` Command Line API
        https://bugs.webkit.org/show_bug.cgi?id=176766
        <rdar://problem/34890689>

        Reviewed by Joseph Pecoraro.

        Test: inspector/console/queryObjects.html

        * inspector/CommandLineAPIModuleSource.js:
        (CommandLineAPI):
        (CommandLineAPIImpl.prototype.queryObjects): Added.

2019-01-02  Charles Vazac  <cvazac@gmail.com>

        Fix resourcetimingbufferfull bubbles attribute
        https://bugs.webkit.org/show_bug.cgi?id=193087

        Reviewed by Chris Dumez.

        This change is covered by web-platform-tests [1].

        [1] https://github.com/web-platform-tests/wpt/blob/master/resource-timing/buffer-full-when-populate-entries.html#L20

        * page/Performance.cpp:
        (WebCore::Performance::resourceTimingBufferFullTimerFired):

2019-01-02  Simon Fraser  <simon.fraser@apple.com>

        Rename LayerScrollCoordinationRole to ScrollCoordinationRole and make an enum class
        https://bugs.webkit.org/show_bug.cgi?id=193010

        Reviewed by Zalan Bujtas.

        Move the enum LayerScrollCoordinationRole from RenderLayer.h to RenderLayerCompositor.h,
        and make it an enum class.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollLayerID const):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::~RenderLayerBacking):
        (WebCore::RenderLayerBacking::detachFromScrollingCoordinator):
        (WebCore::operator<<):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedStatus):
        (WebCore::RenderLayerCompositor::removeFromScrollCoordinatedLayers):
        (WebCore::scrollCoordinationRoleForNodeType):
        (WebCore::RenderLayerCompositor::attachScrollingNode):
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayer):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):
        (WebCore::RenderLayerCompositor::willRemoveScrollingLayerWithBacking):
        * rendering/RenderLayerCompositor.h:

2019-01-02  Simon Fraser  <simon.fraser@apple.com>

        Don't spin up a CalcParser if the current token is not a function token
        https://bugs.webkit.org/show_bug.cgi?id=193067

        Reviewed by Zalan Bujtas.

        Various functions in CSSPropertyParserHelpers fall back to trying to parse
        a calc expression if the normal parsing fails. Don't do this unless the
        current token is a function token, which should be slightly more efficient.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeInteger):
        (WebCore::CSSPropertyParserHelpers::consumePositiveIntegerRaw):
        (WebCore::CSSPropertyParserHelpers::consumeNumberRaw):
        (WebCore::CSSPropertyParserHelpers::consumeNumber):
        (WebCore::CSSPropertyParserHelpers::consumeFontWeightNumber):
        (WebCore::CSSPropertyParserHelpers::consumeLength):
        (WebCore::CSSPropertyParserHelpers::consumePercent):
        (WebCore::CSSPropertyParserHelpers::consumeLengthOrPercent):
        (WebCore::CSSPropertyParserHelpers::consumeAngle):
        (WebCore::CSSPropertyParserHelpers::consumeAngleOrPercent):
        (WebCore::CSSPropertyParserHelpers::consumeTime):

2019-01-02  Simon Fraser  <simon.fraser@apple.com>

        Support css-color-4 rgb functions
        https://bugs.webkit.org/show_bug.cgi?id=192321

        Reviewed by Zalan Bujtas.
        
        Support the new rgb()/rgba() syntax described in https://drafts.csswg.org/css-color/#rgb-functions.
        The differences are:
        1. There is a new comma-free syntax, where the optional alpha is separated by a slash:
            rgb(128 34 56)
            rgb(128 34 56 / 50%)
        2. Floating point values are allowed, and rounded:
            rgb(128.5 34.2 56.5) becomes rgb(129 34 57)
        3. rgba() is a pure alias for rgb(), so these are equivalent:
            rgb(128 34 56 / 50%)
            rgba(128 34 56 / 50%)
            
        hsl()/hsla() parsing was already updated to this new syntax in r230861.

        Tested by tests in imported/w3c/web-platform-tests/css/css-color/

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::clampRGBComponent):
        (WebCore::CSSPropertyParserHelpers::parseRGBParameters):
        (WebCore::CSSPropertyParserHelpers::parseColorFunction):

2019-01-02  Simon Fraser  <simon.fraser@apple.com>

        Handle calc() expressions in gradient color stops
        https://bugs.webkit.org/show_bug.cgi?id=193066
        rdar://problem/46961985

        Reviewed by Sam Weinig.
        
        Fix two issues that prevented calc() expressions from working in conic-gradient color stops,
        for the angle or percent value. First, consumeAngleOrPercent() needs to look for CalculationCategory::Percent
        calc values as well as angle ones.

        Second, CSSPrimitiveValue::isAngle() needs to use primitiveType() (which takes calc into account),
        just as isPx() etc do.

        Test: fast/gradients/conic-calc-stop-position.html

        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isAngle const):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeAngleOrPercent):
        (WebCore::CSSPropertyParserHelpers::consumeGradientColorStops):

2018-12-31  Keith Miller  <keith_miller@apple.com>

        SourceProviders should use an actual URL instead of a string
        https://bugs.webkit.org/show_bug.cgi?id=192734

        Reviewed by Yusuke Suzuki.

        Remove ScriptSourceCode's URL member and make the url() method
        reference the URL on the SourceProvider. Also, avoid some
        ref count churn.

        Additionally, this patch fixes an existing bug in
        WorkletGlobalScope() that would use a ScriptSourceCode after
        WTFMoving it.

        * bindings/js/CachedScriptSourceProvider.h:
        (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeScriptInWorld):
        (WebCore::ScriptController::executeScript):
        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        (WebCore::ScriptSourceCode::m_code):
        (WebCore::ScriptSourceCode::url const):
        (WebCore::ScriptSourceCode::m_url): Deleted.
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::prepareScript):
        (WebCore::ScriptElement::requestModuleScript):
        (WebCore::ScriptElement::executePendingScript):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript):
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScriptImmediately):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::importScripts):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):
        * worklets/WorkletGlobalScope.cpp:
        (WebCore::WorkletGlobalScope::WorkletGlobalScope):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::endElementNs):

2019-01-01  Jeff Miller  <jeffm@apple.com>

        Update user-visible copyright strings to include 2019
        https://bugs.webkit.org/show_bug.cgi?id=192811

        Reviewed by Mark Lam.

        * Info.plist:

2018-12-30  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: Save 8 padding bytes on WebCore::BorderEdge
        <https://webkit.org/b/193058>
        <rdar://problem/46979275>

        Reviewed by Yusuke Suzuki.

        * rendering/BorderEdge.cpp:
        (WebCore::BorderEdge::BorderEdge): Reorder initialization to
        match new instance variable order.
        * rendering/BorderEdge.h: Reorder instance variables to save
        8 padding bytes.

2018-12-28  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Remove one indirection in JSObject::toStringName
        https://bugs.webkit.org/show_bug.cgi?id=193037

        Reviewed by Keith Miller.

        Use old JSObject::toStringName function here.

        * bindings/js/JSDOMConstructorBase.cpp:
        (WebCore::JSDOMConstructorBase::className):
        (WebCore::JSDOMConstructorBase::toStringName):
        * bindings/js/JSDOMConstructorBase.h:
        (WebCore::JSDOMConstructorBase::className): Deleted.

2018-12-27  Alex Christensen  <achristensen@webkit.org>

        Resurrect Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=192658

        Reviewed by Yusuke Suzuki.

        This makes it so JSC and most of WebCore builds.
        WebCore's use of ARC seems inconsistent, so I'll fix that later.

        * PlatformMac.cmake:
        * config.h:

2018-12-26  Jim Mason  <jmason@ibinx.com>

        [FreeType] Restore conditional compilation logic for recent HarfBuzz refactoring
        https://bugs.webkit.org/show_bug.cgi?id=193036

        Reviewed by Michael Catanzaro.

        * platform/graphics/FontPlatformData.h:
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:

2018-12-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        Remove "using namespace std;"
        https://bugs.webkit.org/show_bug.cgi?id=192973
        <rdar://problem/46937309>

        Unreviewed Windows port Debug builds fix.

        No new tests since no behavior changes.

        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::postPlatformNotification): Add "std::" prefix to numeric_limits in ASSERT macro.

2018-12-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        Remove "using namespace std;"
        https://bugs.webkit.org/show_bug.cgi?id=192973

        Reviewed by Alex Christensen.

        Removed "using namespace std" statement, and use std:: prefix.

        No new tests since no behavior changes.

        * accessibility/win/AXObjectCacheWin.cpp:
        * platform/graphics/GraphicsContext3DPrivate.cpp:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        * platform/graphics/win/FontWin.cpp:
        (WebCore::FontCascade::floatWidthForComplexText const):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        * platform/graphics/win/GraphicsContextWin.cpp:
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::UniscribeController):
        (WebCore::UniscribeController::shapeAndPlaceItem):
        * platform/image-decoders/ScalableImageDecoder.cpp:
        * platform/text/LocaleICU.cpp:
        * platform/text/win/LocaleWin.cpp:
        * platform/win/ScrollbarThemeWin.cpp:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::layoutBlock):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustMenuListButtonStyle const):
        (WebCore::RenderThemeWin::paintSearchFieldCancelButton):
        (WebCore::RenderThemeWin::adjustSearchFieldCancelButtonStyle const):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsDecorationPartStyle const):
        (WebCore::RenderThemeWin::paintSearchFieldResultsDecorationPart):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsButtonStyle const):
        (WebCore::RenderThemeWin::paintSearchFieldResultsButton):

2018-12-24  Simon Fraser  <simon.fraser@apple.com>

        Change ScrollingNodeType to an enum class
        https://bugs.webkit.org/show_bug.cgi?id=193009

        Reviewed by Zalan Bujtas.

        Change the ScrollingNodeType enum to an enum class.
        
        No behavior change.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::ensureRootStateNodeForFrameView):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::operator<<):
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::ScrollingStateFixedNode):
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::isFixedNode const):
        (WebCore::ScrollingStateNode::isStickyNode const):
        (WebCore::ScrollingStateNode::isFrameScrollingNode const):
        (WebCore::ScrollingStateNode::isOverflowScrollingNode const):
        * page/scrolling/ScrollingStateOverflowScrollingNode.cpp:
        (WebCore::ScrollingStateOverflowScrollingNode::ScrollingStateOverflowScrollingNode):
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::ScrollingStateStickyNode):
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::createNode):
        (WebCore::ScrollingStateTree::attachNode):
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::isFixedNode const):
        (WebCore::ScrollingTreeNode::isStickyNode const):
        (WebCore::ScrollingTreeNode::isFrameScrollingNode const):
        (WebCore::ScrollingTreeNode::isOverflowScrollingNode const):
        * page/scrolling/ScrollingTreeOverflowScrollingNode.cpp:
        (WebCore::ScrollingTreeOverflowScrollingNode::ScrollingTreeOverflowScrollingNode):
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::createScrollingTreeNode):
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::ScrollingTreeFixedNode):
        * page/scrolling/mac/ScrollingTreeMac.cpp:
        (ScrollingTreeMac::createScrollingTreeNode):
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::ScrollingTreeStickyNode):
        * platform/graphics/GraphicsLayerClient.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::reattachSubframeScrollLayers):
        (WebCore::scrollCoordinationRoleForNodeType):
        (WebCore::RenderLayerCompositor::updateScrollCoordinationForThisFrame):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):

2018-12-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [HarfBuzz] Width not correctly reported as 0 for zero font size
        https://bugs.webkit.org/show_bug.cgi?id=192986

        Reviewed by Michael Catanzaro.

        Fixes test fast/text/font-size-zero.html

        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Use empty advances for glyphs when the font
        size is zero.

2018-12-20  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Use Ref<> as much as possible
        https://bugs.webkit.org/show_bug.cgi?id=192808

        Reviewed by Alex Christensen.

        * Modules/encryptedmedia/NavigatorEME.cpp:
        (WebCore::NavigatorEME::requestMediaKeySystemAccess):
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::bodyAsFormData const):
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::getCurrentPosition):
        (WebCore::Geolocation::watchPosition):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::objectStoreNames const):
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::indexNames const):
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::scheduleOperation):
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/client/TransactionOperation.h:
        (WebCore::IDBClient::createTransactionOperation):
        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::getUserMedia const):
        (WebCore::MediaDevices::getDisplayMedia const):
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::create):
        * Modules/mediastream/UserMediaRequest.h:
        * Modules/webaudio/AudioParam.cpp:
        (WebCore::AudioParam::calculateFinalValues):
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::initialize):
        * Modules/webdatabase/SQLStatement.cpp:
        (WebCore::SQLStatement::execute):
        * Modules/webgpu/WebGPU.cpp:
        (WebCore::WebGPU::requestAdapter const):
        * Modules/webgpu/WebGPUAdapter.cpp:
        (WebCore::WebGPUAdapter::create):
        * Modules/webgpu/WebGPUAdapter.h:
        * Modules/webgpu/WebGPUBuffer.cpp:
        (WebCore::WebGPUBuffer::create):
        * Modules/webgpu/WebGPUBuffer.h:
        * Modules/webgpu/WebGPUCommandBuffer.cpp:
        (WebCore::WebGPUCommandBuffer::create):
        (WebCore::WebGPUCommandBuffer::beginRenderPass):
        * Modules/webgpu/WebGPUCommandBuffer.h:
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::create):
        (WebCore::WebGPUDevice::createBuffer const):
        (WebCore::WebGPUDevice::createShaderModule const):
        (WebCore::WebGPUDevice::createRenderPipeline const):
        (WebCore::WebGPUDevice::createCommandBuffer const):
        * Modules/webgpu/WebGPURenderPassEncoder.cpp:
        (WebCore::WebGPURenderPassEncoder::create):
        * Modules/webgpu/WebGPURenderPassEncoder.h:
        * Modules/webgpu/WebGPURenderPipeline.cpp:
        (WebCore::WebGPURenderPipeline::create):
        * Modules/webgpu/WebGPURenderPipeline.h:
        * Modules/webgpu/WebGPUShaderModule.cpp:
        (WebCore::WebGPUShaderModule::create):
        * Modules/webgpu/WebGPUShaderModule.h:
        * Modules/webgpu/WebGPUTexture.cpp:
        (WebCore::WebGPUTexture::createDefaultTextureView):
        * Modules/webgpu/WebGPUTextureView.cpp:
        (WebCore::WebGPUTextureView::create):
        * Modules/webgpu/WebGPUTextureView.h:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::rangeMatchesTextNearRange):
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification):
        * accessibility/atk/WebKitAccessibleHyperlink.cpp:
        (webkitAccessibleHyperlinkGetStartIndex):
        (webkitAccessibleHyperlinkGetEndIndex):
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getSelectionOffsetsForObject):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _convertToNSRange:]):
        * bindings/js/JSDOMGlobalObjectTask.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::queueTaskToEventLoop):
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::queueTaskToEventLoop):
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readTerminal):
        (WebCore::SerializedScriptValue::create):
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::create):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::currentColorOrValidColor const):
        (WebCore::ComputedStyleExtractor::getCSSPropertyValuesForShorthandProperties):
        (WebCore::ComputedStyleExtractor::getCSSPropertyValuesForGridShorthand):
        (WebCore::ComputedStyleExtractor::getBackgroundShorthandValue):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::load):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::rules):
        * css/FontFace.cpp:
        (WebCore::FontFace::unicodeRange const):
        (WebCore::FontFace::featureSettings const):
        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::collectFromStyleSheetContents):
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::strokeDashArrayToCSSValueList):
        (WebCore::ComputedStyleExtractor::adjustSVGPaintForCurrentColor const):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createFilterOperations):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::createCSSOMWrapper const):
        * css/StyleRule.h:
        * dom/ChildListMutationScope.cpp:
        (WebCore::ChildListMutationAccumulator::getOrCreate):
        * dom/ChildListMutationScope.h:
        * dom/DocumentMarkerController.cpp:
        (WebCore::updateRenderedRectsForMarker):
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::createSheet):
        * dom/PointerEvent.h:
        * dom/UserGestureIndicator.h:
        (WebCore::UserGestureToken::create):
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::applyAlternativeTextToRange):
        (WebCore::AlternativeTextController::respondToUnappliedSpellCorrection):
        (WebCore::AlternativeTextController::respondToUnappliedEditing):
        (WebCore::AlternativeTextController::markPrecedingWhitespaceForDeletedAutocorrectionAfterCommand):
        (WebCore::AlternativeTextController::respondToMarkerAtEndOfWord):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::targetRanges const):
        (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        * editing/Editing.cpp:
        (WebCore::visiblePositionForIndexUsingCharacterIterator):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::removeStyleConflictingWithStyleOfNode):
        (WebCore::EditingStyle::conflictsWithInlineStyleOfElement const):
        (WebCore::EditingStyle::prepareToApplyAt):
        (WebCore::EditingStyle::mergeInlineAndImplicitStyleOfElement):
        (WebCore::EditingStyle::mergeStyleFromRulesForSerialization):
        (WebCore::EditingStyle::removeStyleFromRulesAndContext):
        (WebCore::extractPropertiesNotIn):
        * editing/Editor.cpp:
        (WebCore::Editor::setBaseWritingDirection):
        (WebCore::Editor::setComposition):
        * editing/EditorCommand.cpp:
        (WebCore::executeApplyParagraphStyle):
        (WebCore::executeMakeTextWritingDirectionLeftToRight):
        (WebCore::executeMakeTextWritingDirectionNatural):
        (WebCore::executeMakeTextWritingDirectionRightToLeft):
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::formatRange):
        * editing/RemoveFormatCommand.cpp:
        (WebCore::RemoveFormatCommand::doApply):
        * editing/ReplaceRangeWithTextCommand.cpp:
        (WebCore::ReplaceRangeWithTextCommand::targetRanges const):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        (WebCore::handleStyleSpansBeforeInsertion):
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::targetRanges const):
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::willAddTypingToOpenCommand):
        * editing/VisibleUnits.cpp:
        (WebCore::distanceBetweenPositions):
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::selectionInWebArchiveFormat):
        * editing/ios/DictationCommandIOS.cpp:
        (WebCore::DictationCommandIOS::doApply):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setTextAlignmentForChangedBaseWritingDirection):
        (WebCore::Editor::removeUnchangeableStyles):
        (WebCore::Editor::writeImageToPasteboard):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::replaceNodeFromPasteboard):
        (WebCore::Editor::imageInWebArchiveFormat):
        * editing/markup.cpp:
        (WebCore::styleFromMatchedRulesAndInlineDecl):
        (WebCore::createFragmentForTransformToFragment):
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::didFinishLoading):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::createTemplateDocumentData):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::scheduleEvent):
        (WebCore::HTMLMediaElement::createMediaControls):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::createSharedCellStyle):
        * html/HTMLTableElement.h:
        * html/URLUtils.h:
        (WebCore::URLUtils<T>::origin const):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::createHTMLElementOrFindCustomElementInterface):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::resolveCustomStyle):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::createNewCue):
        * inspector/DOMPatchSupport.cpp:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildInitialState):
        (WebCore::InspectorCanvas::buildAction):
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::openInNewTab):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::asCSSRuleList):
        (WebCore::InspectorStyle::styleWithProperties const):
        (WebCore::InspectorStyleSheet::ensureSourceData):
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::didCreateCanvasRenderingContext):
        * inspector/agents/InspectorIndexedDBAgent.cpp:
        (WebCore::Inspector::keyPathFromIDBKeyPath):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::archive):
        * loader/EmptyClients.cpp:
        (WebCore::EmptyStorageNamespaceProvider::createSessionStorageNamespace):
        (WebCore::EmptyStorageNamespaceProvider::createLocalStorageNamespace):
        (WebCore::EmptyStorageNamespaceProvider::createEphemeralLocalStorageNamespace):
        (WebCore::EmptyStorageNamespaceProvider::createTransientLocalStorageNamespace):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::shouldInterruptLoadForXFrameOptions):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::loadResourceSynchronously):
        * loader/archive/mhtml/MHTMLParser.cpp:
        (WebCore::MHTMLParser::addResourceToArchive):
        (WebCore::MHTMLParser::parseNextPart):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::addImageToCache):
        (WebCore::MemoryCache::removeResourcesWithOrigin):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules const):
        (WebCore::DOMWindow::createWindow):
        * page/EventHandler.cpp:
        (WebCore::textDistance):
        * page/Page.cpp:
        (WebCore::Page::userStyleSheet const):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFilterOperations):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::initWithSimpleHTMLDocument):
        (WebCore::Frame::interpretationsForCurrentRoot const):
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::fadeIn):
        (WebCore::ServicesOverlayController::Highlight::fadeOut):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::tryCreateArrayBuffer const):
        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::calculateKernelsForAzimuthElevation):
        * platform/audio/SincResampler.cpp:
        (WebCore::SincResampler::consumeSource):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::createBus):
        * platform/audio/mac/AudioFileReaderMac.cpp:
        (WebCore::AudioFileReader::createBus):
        * platform/graphics/Icon.h:
        (WebCore::Icon::create):
        * platform/graphics/InbandTextTrackPrivate.h:
        (WebCore::InbandTextTrackPrivate::create):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::shouldWaitForLoadingOfResource):
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::fulfillRequestWithKeyData):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::create):
        (WebCore::MediaSourcePrivateAVFObjC::addSourceBuffer):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::create):
        (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::createTileLayer):
        * platform/graphics/ca/TileController.h:
        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::acceleratedCompositingAvailable):
        (WebCore::CACFLayerTreeHost::create):
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::create):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::updateTracks):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfText):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::processMpegTsSection):
        (WebCore::MediaPlayerPrivateGStreamer::loadNextLocation):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::paint):
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::appsinkNewSample):
        * platform/graphics/iso/ISOProtectionSystemSpecificHeaderBox.cpp:
        (WebCore::ISOProtectionSystemSpecificHeaderBox::parse):
        * platform/graphics/iso/ISOTrackEncryptionBox.cpp:
        (WebCore::ISOTrackEncryptionBox::parse):
        * platform/graphics/texmap/TextureMapperAnimation.cpp:
        (WebCore::applyFilterAnimation):
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.cpp:
        (WebCore::TextureMapperPlatformLayerBuffer::clone):
        * platform/graphics/transforms/TransformOperations.cpp:
        (WebCore::TransformOperations::blendByMatchingOperations const):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::setDataForPNGDecoderAtIndex):
        * platform/mock/mediasource/MockBox.cpp:
        (WebCore::MockInitializationBox::MockInitializationBox):
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::create):
        (WebCore::MockSourceBufferPrivate::append):
        * platform/mock/mediasource/MockSourceBufferPrivate.h:
        * platform/mock/mediasource/MockTracks.h:
        (WebCore::MockTextTrackPrivate::create):
        (WebCore::MockVideoTrackPrivate::create):
        * platform/network/FormData.h:
        (WebCore::FormData::decode):
        * platform/network/cocoa/CookieStorageObserver.h:
        * platform/network/cocoa/CookieStorageObserver.mm:
        (WebCore::CookieStorageObserver::create):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::appendEncodedBlobItemToSoupMessageBody):
        (WebCore::ResourceRequest::updateSoupMessageBody const):
        * platform/text/hyphen/HyphenationLibHyphen.cpp:
        (WebCore::HyphenationDictionary::createNull):
        (WebCore::HyphenationDictionary::create):
        * platform/win/SearchPopupMenuWin.cpp:
        (WebCore::SearchPopupMenuWin::SearchPopupMenuWin):
        (WebCore::SearchPopupMenuWin::popupMenu):
        * platform/win/SearchPopupMenuWin.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::applyCommonButtonPaddingToStyle):
        (WebCore::RenderThemeIOS::paintProgressBar):
        (WebCore::RenderThemeIOS::adjustButtonStyle const):
        (WebCore::paintAttachmentIcon):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGResourceContainer):
        * storage/Storage.cpp:
        (WebCore::Storage::create):
        (WebCore::Storage::Storage):
        * storage/Storage.h:
        (WebCore::Storage::area const):
        * storage/StorageNamespace.h:
        * storage/StorageNamespaceProvider.cpp:
        (WebCore::StorageNamespaceProvider::localStorageArea):
        * storage/StorageNamespaceProvider.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::getPresentationAttribute):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::build):
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::build):
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::build):
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::build):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::build):
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::build):
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::build):
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::build):
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::build):
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::build):
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::build):
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::build):
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::build):
        * testing/GCObservation.h:
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::parseDocumentFragment):

2018-12-21  Chris Dumez  <cdumez@apple.com>

        navigator.userAgent in service workers does not reflect customUserAgent set by client
        https://bugs.webkit.org/show_bug.cgi?id=192951

        Reviewed by Youenn Fablet.

        Whenever a service worker client registers itself, also pass its effective user agent.
        In the network process, for each origin, we store the latest client's user agent and
        use it when starting the service worker.

        * dom/Document.cpp:
        (WebCore::Document::setServiceWorkerConnection):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::registerTemporaryServiceWorkerClient):
        * workers/service/SWClientConnection.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::serviceWorkerClientUserAgent const):
        (WebCore::SWServer::installContextData):
        (WebCore::SWServer::runServiceWorker):
        (WebCore::SWServer::registerServiceWorkerClient):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerToContextConnection.h:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::userAgent const):
        * workers/service/server/SWServerWorker.h:

2018-12-21  Youenn Fablet  <youenn@apple.com>

        RTCRtpSender.setParameters() does set active parameter
        https://bugs.webkit.org/show_bug.cgi?id=192848

        Reviewed by Eric Carlson.

        Covered by updated test.

        * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
        (WebCore::updateRTCRtpSendParameters):
        The routine was updating the local value, not the out parameter.

2018-12-21  Eric Carlson  <eric.carlson@apple.com>

        'ended' Event doesn't fire on MediaStreamTrack when a USB camera is unplugged
        https://bugs.webkit.org/show_bug.cgi?id=187896
        <rdar://problem/42681445>

        Reviewed by Jer Noble.

        No new tests, tested manually.

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::deviceDisconnected):
        (-[WebCoreAVVideoCaptureSourceObserver addNotificationObservers]):
        (-[WebCoreAVVideoCaptureSourceObserver removeNotificationObservers]):
        (-[WebCoreAVVideoCaptureSourceObserver deviceConnectedDidChange:]):
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:
        (WebCore::deviceHasInputStreams):
        (WebCore::isValidCaptureDevice):
        (WebCore::CoreAudioCaptureDeviceManager::coreAudioCaptureDevices):
        (WebCore::CoreAudioCaptureDeviceManager::refreshAudioCaptureDevices):
        (WebCore::CoreAudioCaptureDeviceManager::devicesChanged): Deleted.
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.h:
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::setCaptureDevice):
        (WebCore::CoreAudioSharedUnit::devicesChanged):
        (WebCore::CoreAudioSharedUnit::startProducingData):
        (WebCore::CoreAudioSharedUnit::startInternal):
        (WebCore::CoreAudioSharedUnit::verifyIsCapturing):
        (WebCore::CoreAudioSharedUnit::captureFailed):
        (WebCore::CoreAudioCaptureSourceFactory::devicesChanged):
        (WebCore::CoreAudioCaptureSource::CoreAudioCaptureSource):
        (WebCore::CoreAudioSharedUnit::setCaptureDeviceID): Deleted.
        * platform/mediastream/mac/CoreAudioCaptureSource.h:

2018-12-20  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r239353): iOS WK1 Assertion failure in notifyChildNodeRemoved while running
        TestWebKitAPI.QuickLook.LegacyQuickLookContent
        https://bugs.webkit.org/show_bug.cgi?id=192859
        <rdar://problem/46887237>

        Reviewed by Antti Koivisto.

        After r239353, ScriptDisallowedScope::InMainThread::isScriptAllowed() may return false when the web thread
        is inside a delegate callback even when there is a ScriptDisallowedScope defined.

        Replace the existign debug assertions which assert !ScriptDisallowedScope::InMainThread::isScriptAllowed()
        by a newly added ScriptDisallowedScope::InMainThread::hasDisallowedScope to avoid hitting this assertion.

        Tests: TestWebKitAPI.QuickLook.LegacyQuickLookContent

        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::notifyChildNodeInserted):
        (WebCore::notifyChildNodeRemoved):
        * dom/Document.cpp:
        (WebCore::Document::nodeChildrenWillBeRemoved):
        (WebCore::Document::nodeWillBeRemoved):
        * dom/ScriptDisallowedScope.h:
        (WebCore::ScriptDisallowedScope::InMainThread::hasDisallowedScope):
        * html/HTMLFormElement.cpp:
        (WebCore:: const):

2018-12-21  Joseph Pecoraro  <pecoraro@apple.com>

        Update status of some WebCore features in features.json
        https://bugs.webkit.org/show_bug.cgi?id=192998

        Reviewed by Tim Horton.

        * features.json:
        - Variation Fonts: Supported
        - Conic Gradients: Supported in Preview
        - Web Share: Supported in Preview
        - <datalist>: Supported in Preview
        - Intersection Observers: Supported in Preview

2018-12-21  Zalan Bujtas  <zalan@apple.com>

        [iOS] Using file upload can trigger a crash under RenderThemeIOS::paintFileUploadIconDecorations()
        https://bugs.webkit.org/show_bug.cgi?id=192357
        <rdar://problem/42852260>

        Reviewed by Simon Fraser.

        Do not try to paint the file picker when painting is disabled.

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):

2018-12-21  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] userPresence should always be true
        https://bugs.webkit.org/show_bug.cgi?id=192835
        <rdar://problem/46538788>

        Reviewed by Brent Fulgham.

        In the current spec as of 7 August 2018, userPresence is suggested to set to the inverse of userVerification.
        This doesn't comply with the CTAP spec. Details in: https://github.com/w3c/webauthn/issues/1123.
        After discussing with other members of the working group, we decided to make userPresence always default to true.

        Covered by exisiting tests.

        * Modules/webauthn/fido/DeviceRequestConverter.cpp:
        (fido::encodeGetAssertionRequestAsCBOR):

2018-12-21  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import an APDU coder from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=192949
        <rdar://problem/46879933>

        Reviewed by Brent Fulgham.

        This patch imports an APDU coder from Chromium. Here is the documentation:
        https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-raw-message-formats-v1.2-ps-20170411.html#u2f-message-framing
        APDU is a binary format to frame any U2F requests/responses into binaries. It is equivalent to CBOR in CTAP2.

        Here is a list of files that are imported from Chromium:
        https://cs.chromium.org/chromium/src/components/apdu/apdu_command.cc?rcl=a2f290c10d132f53518e7f99d5635ee814ff8090
        https://cs.chromium.org/chromium/src/components/apdu/apdu_command.h?rcl=867b103481f6f4ccc79a69bba16c11eefac3cdb6
        https://cs.chromium.org/chromium/src/components/apdu/apdu_response.cc?rcl=867b103481f6f4ccc79a69bba16c11eefac3cdb6
        https://cs.chromium.org/chromium/src/components/apdu/apdu_response.h?rcl=867b103481f6f4ccc79a69bba16c11eefac3cdb6
        https://cs.chromium.org/chromium/src/components/apdu/apdu_unittest.cc?rcl=867b103481f6f4ccc79a69bba16c11eefac3cdb6

        Covered by API tests.

        * Modules/webauthn/apdu/ApduCommand.cpp: Added.
        (apdu::ApduCommand::createFromMessage):
        (apdu::ApduCommand::ApduCommand):
        (apdu::ApduCommand::getEncodedCommand const):
        * Modules/webauthn/apdu/ApduCommand.h: Added.
        * Modules/webauthn/apdu/ApduResponse.cpp: Added.
        (apdu::ApduResponse::createFromMessage):
        (apdu::ApduResponse::ApduResponse):
        (apdu::ApduResponse::getEncodedResponse const):
        * Modules/webauthn/apdu/ApduResponse.h: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2018-12-21  Jer Noble  <jer.noble@apple.com>

        Convert raw CDMSessionMediaSourceAVFObjC pointer in MediaPlayerPrivateMediaSourceAVFObjC
        https://bugs.webkit.org/show_bug.cgi?id=192985
        <rdar://problem/46750743>

        Reviewed by Eric Carlson.

        Make m_session a RefPtr; drive-by fix: make m_mediaElement in WebKitMediaKeys a WeakPtr.

        * Modules/encryptedmedia/legacy/WebKitMediaKeys.cpp:
        (WebCore::WebKitMediaKeys::setMediaElement):
        * Modules/encryptedmedia/legacy/WebKitMediaKeys.h:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setCDMSession):

2018-12-21  Justin Michaud  <justin_michaud@apple.com>

        CSS variables don't work for colors in "border" property
        https://bugs.webkit.org/show_bug.cgi?id=192922

        Reviewed by Simon Fraser.

        ParseColorFunction no longer consumes anything if the color was not valid.

        Test: css-custom-properties-api/border-variable-parsing.html

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseColorFunction):

2018-12-21  Justin Fan  <justin_fan@apple.com>

        [WebGPU] GPUBindGroupLayout refactoring: no HashMap, and failure logging
        https://bugs.webkit.org/show_bug.cgi?id=192990

        Reviewed by Myles C. Maxfield.

        Refactor away the unnecessary HashMaps when creating MTLArgumentEncoders in GPUBindGroupLayout creation.
        Also update GPUBindGroupLayout::create -> tryCreate, in order to better handle Objective-C exceptions.

        No new tests; no change in behavior.

        * Modules/webgpu/WebGPUBindGroupLayout.cpp:
        (WebCore::WebGPUBindGroupLayout::create):
        (WebCore::WebGPUBindGroupLayout::WebGPUBindGroupLayout):
        * Modules/webgpu/WebGPUBindGroupLayout.h:
        (WebCore::WebGPUBindGroupLayout::bindGroupLayout const):
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createBindGroupLayout const):
        * platform/graphics/gpu/GPUBindGroupLayout.h:
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::tryCreateBindGroupLayout const): Renamed from ::create*. Now returning a RefPtr. 
        (WebCore::GPUDevice::createBindGroupLayout const): Deleted.
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/cocoa/GPUBindGroupLayoutMetal.mm:
        (WebCore::appendArgumentToArray):
        (WebCore::newEncoder):
        (WebCore::GPUBindGroupLayout::tryCreate): Renamed from ::create. Now returning a RefPtr.
        (WebCore::GPUBindGroupLayout::GPUBindGroupLayout):
        (WebCore::appendArgumentToArrayInMap): Deleted.
        (WebCore::GPUBindGroupLayout::create): Deleted.

        Deleted unneeded GPUBindGroupLayout.cpp:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/GPUBindGroupLayout.cpp: Removed.

2018-12-21  Alejandro G. Castro  <alex@igalia.com>

        [GTK][WPE] Add DeviceIdHashSaltStorage disk persistence
        https://bugs.webkit.org/show_bug.cgi?id=190466

        Reviewed by Youenn Fablet.

        Added persistency to the DeviceIdHashSaltStorage.

        * platform/glib/FileSystemGlib.cpp:
        (WebCore::FileSystem::getFileSize): Implemented this function to
        allow sharing code with the statistics storage class.
        * platform/glib/KeyedDecoderGlib.cpp:
        (WebCore::KeyedDecoderGlib::dictionaryFromGVariant): Added a
        condition to control situations where the key is empty, it can
        happen if the user modifies the file in the disk.
        * Modules/indexeddb/shared/IDBResourceIdentifier.cpp: Add include
        to make work compilation with debug, unified builds.

2018-12-21  Zalan Bujtas  <zalan@apple.com>

        Synchronous media query evaluation could destroy current Frame/FrameView.
        https://bugs.webkit.org/show_bug.cgi?id=192781
        <rdar://problem/34416793>

        Reviewed by Chris Dumez.

        Protect Frame and FrameView when coming back from printing and check if the current Frame/FrameView/FrameLoader objects are still valid.

        Test: printing/print-with-media-query-destory.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading):
        * page/Frame.cpp:
        (WebCore::Frame::setPrinting):
        * page/FrameView.cpp:
        (WebCore::FrameView::forceLayoutForPagination):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::PrintContext):
        (WebCore::PrintContext::computePageRects):
        (WebCore::PrintContext::computePageRectsWithPageSizeInternal):
        (WebCore::PrintContext::begin):
        (WebCore::PrintContext::computeAutomaticScaleFactor):
        (WebCore::PrintContext::spoolPage):
        (WebCore::PrintContext::spoolRect):
        (WebCore::PrintContext::end):
        * page/PrintContext.h:
        (WebCore::PrintContext::frame const): Deleted.

2018-12-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Setting the file wrapper and content type of an attachment to a PDF should update its image
        https://bugs.webkit.org/show_bug.cgi?id=192984
        <rdar://problem/46798028>

        Reviewed by Tim Horton.

        Allow PDF data to be used to update enclosing image elements when setting the file wrapper for an attachment.
        Covered by a new API test: WKAttachmentTests.SetFileWrapperForPDFImageAttachment.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::mimeTypeIsSuitableForInlineImageAttachment):
        (WebCore::HTMLAttachmentElement::updateEnclosingImageWithData):

2018-12-21  Justin Michaud  <justin_michaud@apple.com>

        Repeated background images with zero size should display the background color
        https://bugs.webkit.org/show_bug.cgi?id=192962

        Reviewed by Antti Koivisto.

        Test: fast/backgrounds/background-repeat-with-zero-size.html

        * platform/LengthSize.h:
        (WebCore::LengthSize::isEmpty const):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::isEmpty const):

2018-12-21  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Fix percentages in relative offsets for grid items
        https://bugs.webkit.org/show_bug.cgi?id=190492

        Reviewed by Sergio Villar Senin.

        The method RenderBoxModelObject::relativePositionOffset() was not considering the case of grid items,
        where the containing block is the grid area.
        The patch modifies the method so the new code uses overrideContainingBlockContentWidth|Height when required.

        Test: imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-relative-offsets-002.html

        * rendering/RenderBox.cpp: Implement the physical versions of the already existent methods.
        (WebCore::RenderBox::overrideContainingBlockContentWidth const):
        (WebCore::RenderBox::overrideContainingBlockContentHeight const):
        (WebCore::RenderBox::hasOverrideContainingBlockContentWidth const):
        (WebCore::RenderBox::hasOverrideContainingBlockContentHeight const):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::relativePositionOffset const): Modified method
        to take into account overrideContainingBlockContentWidth|Height for grid items.
        * rendering/RenderBoxModelObject.h: Added new headers for physical virtual methods
        that will be overridden in RenderBox.
        (WebCore::RenderBoxModelObject::overrideContainingBlockContentWidth const):
        (WebCore::RenderBoxModelObject::overrideContainingBlockContentHeight const):
        (WebCore::RenderBoxModelObject::hasOverrideContainingBlockContentWidth const):
        (WebCore::RenderBoxModelObject::hasOverrideContainingBlockContentHeight const):

2018-12-20  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Convert WebGPUBindGroups into MTLArgumentEncoders
        https://bugs.webkit.org/show_bug.cgi?id=192956

        Reviewed by Myles Maxfield.

        No testable behavior change. Existing tests cover possible crashing.

        Add GPUBindGroupLayoutMetal.mm:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:

        Flesh out GPUBindGroupLayout::create:
        * platform/graphics/gpu/GPUBindGroupLayout.cpp:
        * platform/graphics/gpu/GPUBindGroupLayout.h:
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::createBindGroupLayout const):
        * platform/graphics/gpu/cocoa/GPUBindGroupLayoutMetal.mm: Added.
        (WebCore::appendArgumentToArrayInMap): Added.
        (WebCore::GPUBindGroupLayout::create):
        (WebCore::GPUBindGroupLayout::GPUBindGroupLayout):
        (WebCore::MTLDataTypeForBindingType): Added.

2018-12-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, remove stray #pragma once added to .cpp file

        * svg/properties/SVGAttributeOwnerProxy.cpp:

2018-12-20  Justin Michaud  <justin_michaud@apple.com>

        Adding runtime-enabled attribute to Element prevents inlining property access
        https://bugs.webkit.org/show_bug.cgi?id=192901

        Add a call to flattenDictionaryObject after disabling runtime-enabled attributes.

        Reviewed by Ryosuke Niwa.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::JSTestEnabledBySettingPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachablePrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodePrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjPrototype::finishCreation):

2018-12-20  Chris Dumez  <cdumez@apple.com>

        Use Optional::hasValue() instead of Optional::has_value()
        https://bugs.webkit.org/show_bug.cgi?id=192948

        Reviewed by Tim Horton.

        * bindings/js/DOMPromiseProxy.h:
        (WebCore::DOMPromiseProxy<IDLType>::isFulfilled const):
        (WebCore::DOMPromiseProxy<IDLVoid>::isFulfilled const):
        (WebCore::DOMPromiseProxyWithResolveCallback<IDLType>::isFulfilled const):
        * dom/DataTransferItemList.h:
        (WebCore::DataTransferItemList::hasItems const):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::addEventListener):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::captionDisplayMode):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::wouldTaintOrigin const):
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::parseDemuxerSrcPadCaps):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::trackDetected):
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcUpdatePresentationSize):
        * platform/mac/NSScrollerImpDetails.mm:
        (WebCore::ScrollerStyle::recommendedScrollerStyle):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::setExplicitValue):

2018-12-20  Chris Dumez  <cdumez@apple.com>

        Move HTTPS_UPGRADE code behind a runtime flag, off by default
        https://bugs.webkit.org/show_bug.cgi?id=192937

        Reviewed by Youenn Fablet.

        Move HTTPS_UPGRADE code behind a runtime flag, off by default and drop the build time flag.

        * page/Settings.yaml:

2018-12-20  Youenn Fablet  <youenn@apple.com>

        Remove custom constructors of ReadableStreamDefaultReader and ReadableStreamBYOBReader
        https://bugs.webkit.org/show_bug.cgi?id=192838

        Reviewed by Chris Dumez.

        Generate constructor code in case of a Private but not Public constructor.
        Make sure this is correctly exposed in global objects.
        Add JS built-in constructor implementations for those two objects.

        Also add JS built-in constructors for controller and byob request.
        To keep existing behavior, JS built-ins calling these constructors need to pass
        an additional parameter that allows making the difference between a JS builtin caller or a JS caller.
        In the latter case, the constructor will throw.

        Covered by existing tests, no observable change of behavior.

        * Modules/streams/ReadableByteStreamController.idl:
        * Modules/streams/ReadableByteStreamController.js:
        (initializeReadableByteStreamController):
        (getter.byobRequest):
        * Modules/streams/ReadableByteStreamInternals.js:
        (privateInitializeReadableByteStreamController): Deleted.
        (privateInitializeReadableStreamBYOBRequest): Deleted.
        * Modules/streams/ReadableStream.js:
        (initializeReadableStream):
        * Modules/streams/ReadableStreamBYOBReader.js:
        (initializeReadableStreamBYOBReader):
        * Modules/streams/ReadableStreamBYOBRequest.idl:
        * Modules/streams/ReadableStreamBYOBRequest.js:
        (initializeReadableStreamBYOBRequest):
        * Modules/streams/ReadableStreamDefaultController.idl:
        * Modules/streams/ReadableStreamDefaultController.js:
        (initializeReadableStreamDefaultController):
        (enqueue):
        * Modules/streams/ReadableStreamDefaultReader.js:
        (initializeReadableStreamDefaultReader):
        * Modules/streams/ReadableStreamInternals.js:
        (readableStreamDefaultControllerError): Deleted.
        * Sources.txt:
        * UnifiedSources-input.xcfilelist:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBuiltinConstructor.h:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):
        * bindings/js/JSReadableStreamPrivateConstructors.cpp: Removed.
        * bindings/js/JSReadableStreamPrivateConstructors.h: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GeneratePropertiesHashTable):
        * bindings/scripts/preprocess-idls.pl:
        (shouldExposeInterface):

2018-12-20  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Remove hash from Client Data
        https://bugs.webkit.org/show_bug.cgi?id=192727
        <rdar://problem/46746673>

        Reviewed by Brent Fulgham.

        The hash algorithm for hashing the client data is enforced to SHA_256 in the latest spec:
        https://www.w3.org/TR/webauthn/#sec-client-data. Therefore, we should remove it.

        Covered by existing tests.

        * Modules/webauthn/AuthenticatorCoordinator.cpp:
        (WebCore::AuthenticatorCoordinatorInternal::produceClientDataJson):

2018-12-20  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Add a runtime flag for local authenticator
        https://bugs.webkit.org/show_bug.cgi?id=192792
        <rdar://problem/46798738>

        Reviewed by Brent Fulgham.

        No tests.

        This patch adds a runtime flag for local authenticator and removes ways to
        set the runtime flag for web authentication in LegacyWebKit.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebAuthenticationLocalAuthenticatorEnabled):
        (WebCore::RuntimeEnabledFeatures::webAuthenticationLocalAuthenticatorEnabled const):

2018-12-20  Jeremy Jones  <jeremyj@apple.com>

        Pointer lock causes abandoned documents
        https://bugs.webkit.org/show_bug.cgi?id=188727
        rdar://problem/44248197
        
        Reviewed by Simon Fraser.

        Fixes --world-leaks in these tests:

        pointer-lock/locked-element-removed-from-dom.html
        pointer-lock/mouse-event-delivery.html
        fast/shadow-dom/pointerlockelement-in-slot.html

        PointerLockController now uses WeakPtr instead of RefPtr because it has no need to extend the lifetime of a document.

        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::elementRemoved):
        (WebCore::PointerLockController::documentDetached):
        (WebCore::PointerLockController::didAcquirePointerLock):
        * page/PointerLockController.h:

2018-12-20  Chris Dumez  <cdumez@apple.com>

        Use Optional::valueOr() instead of Optional::value_or()
        https://bugs.webkit.org/show_bug.cgi?id=192933

        Reviewed by Geoffrey Garen.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::convert):
        (WebCore::ApplePayPaymentHandler::didAuthorizePayment):
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::load):
        * Modules/indexeddb/IDBDatabaseIdentifier.h:
        (WebCore::IDBDatabaseIdentifier::hash const):
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::open):
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::applyConstraints):
        * Modules/mediastream/RTCDTMFSender.cpp:
        (WebCore::RTCDTMFSender::insertDTMF):
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::executeSql):
        * Modules/webvr/VRFrameData.cpp:
        (WebCore::VRFrameData::update):
        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::updateCSSTransitionsForElement):
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::cancel):
        (WebCore::DeclarativeAnimation::invalidateDOMEvents):
        * animation/KeyframeEffect.cpp:
        (WebCore::computeMissingKeyframeOffsets):
        (WebCore::KeyframeEffect::applyPendingAcceleratedActions):
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::runPendingPlayTask):
        (WebCore::WebAnimation::runPendingPauseTask):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::write):
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey):
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
        * crypto/gcrypt/CryptoKeyRSAGCrypt.cpp:
        (WebCore::CryptoKeyRSA::importSpki):
        (WebCore::CryptoKeyRSA::importPkcs8):
        * crypto/keys/CryptoKeyRSA.cpp:
        (WebCore::CryptoKeyRSA::importJwk):
        * crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::importSpki):
        (WebCore::CryptoKeyRSA::importPkcs8):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::counterToCSSValue):
        * css/CSSFontFace.cpp:
        (WebCore::calculateItalicRange):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::doubleValue const):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::addRule):
        * css/DOMMatrix.cpp:
        (WebCore::DOMMatrix::rotateSelf):
        * css/DOMMatrixReadOnly.cpp:
        (WebCore::DOMMatrixReadOnly::validateAndFixup):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueCounter):
        * css/parser/MediaQueryParser.cpp:
        (WebCore::MediaQueryParser::commitMediaQuery):
        * dom/Document.h:
        (WebCore::Document::referrerPolicy const):
        * dom/Element.cpp:
        (WebCore::toScrollAlignment):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::addEventListener):
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::observe):
        * editing/cocoa/FontAttributeChangesCocoa.mm:
        (WebCore::FontChanges::platformFontFamilyNameForCSS const):
        * fileapi/File.cpp:
        (WebCore::File::File):
        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::toggle):
        * html/HTMLOListElement.h:
        * html/ImageBitmap.cpp:
        (WebCore::croppedSourceRectangleWithFormatting):
        * html/canvas/CanvasPattern.cpp:
        (WebCore::CanvasPattern::setTransform):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::setTransform):
        (WebCore::CanvasRenderingContext2DBase::isPointInPathInternal):
        (WebCore::CanvasRenderingContext2DBase::isPointInStrokeInternal):
        * html/canvas/Path2D.cpp:
        (WebCore::Path2D::addPath):
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildAction):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::populateContextMenu):
        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::validateGeometryConstraintsAfterLayout const):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inFlowPositionedPositionOffset):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedHorizontalMarginValue):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedVerticalMarginValue):
        * layout/FormattingContextQuirks.cpp:
        (WebCore::Layout::FormattingContext::Quirks::heightValueOfNearestContainingBlockWithFixedHeight):
        * layout/MarginTypes.h:
        (WebCore::Layout::VerticalMargin::usedValues const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::instrinsicWidthConstraints):
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedHeight):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::width const):
        (WebCore::Display::Box::height const):
        (WebCore::Display::Box::contentBoxTop const):
        (WebCore::Display::Box::contentBoxLeft const):
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::Iterator::set):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::appendContentToLine const):
        (WebCore::Layout::InlineFormattingContext::placeInFlowPositionedChildren const):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected):
        * loader/NavigationAction.cpp:
        * page/FrameView.cpp:
        (WebCore::FrameView::setLayoutViewportOverrideRect):
        (WebCore::FrameView::documentToAbsoluteScaleFactor const):
        (WebCore::FrameView::viewportSizeForCSSViewportUnits const):
        * page/Page.cpp:
        (WebCore::Page::setLowPowerModeEnabledOverrideForTesting):
        * page/SecurityOriginData.cpp:
        (WebCore::SecurityOriginData::databaseIdentifier const):
        * page/SecurityOriginData.h:
        (WebCore::SecurityOriginDataHash::hash):
        * page/SecurityOriginHash.h:
        (WebCore::SecurityOriginHash::hash):
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::setViewLayoutSize):
        * page/WindowFeatures.cpp:
        (WebCore::parseDialogFeatures):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded):
        (WebCore::AnimationBase::getTimeToNextEvent const):
        (WebCore::AnimationBase::freezeAtTime):
        (WebCore::AnimationBase::getElapsedTime const):
        * page/animation/CSSAnimationController.cpp:
        (WebCore::CSSAnimationControllerPrivate::updateAnimationTimer):
        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::ResourceUsageThread::platformThreadBody):
        * page/linux/ResourceUsageThreadLinux.cpp:
        (WebCore::ResourceUsageThread::platformThreadBody):
        * platform/graphics/ComplexTextController.cpp:
        (WebCore::ComplexTextController::offsetForPosition):
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::computeHash const):
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::drawText const):
        (WebCore::FontCascade::drawEmphasisMarks const):
        (WebCore::FontCascade::displayListForTextRun const):
        (WebCore::FontCascade::adjustSelectionRectForText const):
        (WebCore::FontCascade::codePath const):
        * platform/graphics/FontSelectionAlgorithm.cpp:
        (WebCore::FontSelectionAlgorithm::styleDistance const):
        * platform/graphics/FontSelectionAlgorithm.h:
        (WebCore::operator<<):
        (WebCore::FontSelectionSpecifiedCapabilities::computeWeight const):
        (WebCore::FontSelectionSpecifiedCapabilities::computeWidth const):
        (WebCore::FontSelectionSpecifiedCapabilities::computeSlope const):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::calculateLayerBoundingRect):
        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:
        (WebCore::WebCoreAVCFResourceLoader::startLoading):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::naturalSize):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setVisibleAndCoverageRects):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont):
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::fillRegion const):
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::initializeGStreamer):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintSelfAndChildrenWithReplica):
        (WebCore::TextureMapperLayer::replicaTransform):
        (WebCore::TextureMapperLayer::syncAnimations):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::transformedVisibleRect):
        (WebCore::CoordinatedGraphicsLayer::computeTransformedVisibleRect):
        * platform/graphics/transforms/TransformState.cpp:
        (WebCore::TransformState::mappedPoint const):
        (WebCore::TransformState::mapQuad const):
        (WebCore::TransformState::flattenWithTransform):
        * platform/network/CacheValidation.cpp:
        (WebCore::computeCurrentAge):
        (WebCore::computeFreshnessLifetimeForHTTPFamily):
        * platform/network/NetworkStateNotifier.cpp:
        (WebCore::NetworkStateNotifier::onLine):
        * rendering/FloatingObjects.cpp:
        (WebCore::FindNextFloatLogicalBottomAdapter::nextLogicalBottom const):
        (WebCore::FindNextFloatLogicalBottomAdapter::nextShapeLogicalBottom const):
        * rendering/GridBaselineAlignment.cpp:
        (WebCore::GridBaselineAlignment::ascentForChild const):
        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrack::setGrowthLimit):
        (WebCore::GridTrackSizingAlgorithm::initialBaseSize const):
        (WebCore::GridTrackSizingAlgorithm::initialGrowthLimit const):
        (WebCore::GridTrackSizingAlgorithm::sizeTrackToFitNonSpanningItem):
        (WebCore::sortByGridTrackGrowthPotential):
        (WebCore::GridTrackSizingAlgorithm::estimatedGridAreaBreadthForChild const):
        (WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const):
        (WebCore::GridTrackSizingAlgorithm::initializeTrackSizes):
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::applyTransform):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalHeight const):
        * rendering/RenderCounter.cpp:
        (WebCore::planCounter):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::baselinePosition const):
        (WebCore::RenderFlexibleBox::marginBoxAscentForChild):
        (WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::gridGap const):
        (WebCore::RenderGrid::baselinePosition const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerByApplyingTransform):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItem):
        (WebCore::RenderListBox::listIndexIsVisible):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::calculateMaxColumnHeight const):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::convertStyleLogicalHeightToComputedHeight):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::cellBaselinePosition const):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::firstLineBaseline const):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths):
        (WebCore::RenderText::previousOffset const):
        (WebCore::RenderText::previousOffsetForBackwardDeletion const):
        (WebCore::RenderText::nextOffset const):
        (WebCore::RenderText::stringView const):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::baselinePosition const):
        * rendering/mathml/RenderMathMLBlock.h:
        (WebCore::RenderMathMLBlock::ascentForChild):
        * rendering/style/GridPosition.cpp:
        (WebCore::GridPosition::max):
        * rendering/style/TextUnderlineOffset.h:
        (WebCore::TextUnderlineOffset::lengthOr const):
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::nodeAtFloatPoint):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::nodeAtFloatPoint):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::nodeAtFloatPoint):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::hitTestClipContent):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::nodeAtPoint):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::nodeAtFloatPoint):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::nodeAtFloatPoint):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::clipToImageBuffer):
        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::processGlyphElement):
        (WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter):

2018-12-20  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r239419): heap-use-after-free in AudioSourceProviderAVFObjC::finalizeCallback()
        https://bugs.webkit.org/show_bug.cgi?id=192941
        <rdar://problem/46874096>

        Reviewed by Brent Fulgham.

        Don't delete the locked lock before unlocking the lock. 

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::finalizeCallback):

2018-12-20  Keith Rollin  <krollin@apple.com>

        Improve release-level page-load logging
        https://bugs.webkit.org/show_bug.cgi?id=192872
        <rdar://problem/46850309>

        Reviewed by Chris Dumez.

        There are a number of reported bugs that are difficult or impossible
        to track down with our current level of logging. Additionally, some
        software groups lower in the page-loading stack have requested logging
        sufficient for tracking a user-visible error message down to the
        requested resource that caused the message. Add more-comprehensive
        logging to address these issues/requests.

        No new tests -- no changed functionality.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setMainDocumentError):
        (WebCore::DocumentLoader::mainReceivedError):
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::notifyFinished):
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        (WebCore::DocumentLoader::startLoadingMainResource):
        (WebCore::DocumentLoader::loadMainResource):
        (WebCore::DocumentLoader::cancelMainResourceLoad):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::loadArchive):
        (WebCore::FrameLoader::loadInSameDocument):
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::reloadWithOverrideEncoding):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::setState):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressItem::ProgressItem):
        (WebCore::ProgressTracker::reset):
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::progressCompleted):
        (WebCore::ProgressTracker::finalProgressComplete):
        (WebCore::ProgressTracker::incrementProgress):
        (WebCore::ProgressTracker::completeProgress):
        (WebCore::ProgressTracker::isAlwaysOnLoggingAllowed const):
        * loader/ProgressTracker.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::loadDataURL):
        (WebCore::ResourceLoader::willSendRequestInternal):
        (WebCore::ResourceLoader::didFinishLoading):
        (WebCore::ResourceLoader::didFail):
        (WebCore::ResourceLoader::willSendRequestAsync):
        (WebCore::ResourceLoader::wasBlocked):
        (WebCore::ResourceLoader::cannotShowURL):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):
        (WebCore::=):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::willCancel):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):

2018-12-20  Jeremy Jones  <jeremyj@apple.com>

        Switch tabs before retuning PiP video to inline.
        https://bugs.webkit.org/show_bug.cgi?id=192767
        rdar://problem/46006046

        Reviewed by Jer Noble.

        No new tests because this code path only happens with a user action on system UI.

        When exiting PiP, notify the fullscreen change observer so it can restore client UI state before exiting.

        * platform/mac/VideoFullscreenInterfaceMac.mm:
        (-[WebVideoFullscreenInterfaceMacObjC pipShouldClose:]):

2018-12-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix GTK build after r239410

        It added a new file to the build, breaking the unified sources magic that obscured a bug in
        URLSoup.h. It forward-declares URL, but this never worked unless the URL.h header was
        included via another source file in the unified source bundle.

        * platform/network/soup/URLSoup.h:

2018-12-19  Chris Dumez  <cdumez@apple.com>

        wtf/Optional.h: move-constructor and move-assignment operator should disengage the value being moved from
        https://bugs.webkit.org/show_bug.cgi?id=192728
        <rdar://problem/46746779>

        Reviewed by Geoff Garen.

        * Modules/*:
        * animation/*:
        * bindings/*:
        * crypto/*:
        * css/*:
        * dom/*:
        * editing/*:
        * fileapi/*:
        * html/*:
        * inspector/*:
        * layout/*:
        * loader/*:
        * mathml/*:
        * page/*:
        * platform/*:
        * plugins/*:
        * rendering/*:
        * testing/*:
        * workers/*:
        * xml/*:

2018-12-19  Jer Noble  <jer.noble@apple.com>

        Leak of MTAudioProcessingTap (304 bytes) in com.apple.WebKit.WebContent running WebKit layout tests
        https://bugs.webkit.org/show_bug.cgi?id=192896
        <rdar://46732186>

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::initCallback):

2018-12-19  Timothy Hatcher  <timothy@apple.com>

        REGRESSION (r232991): Switching to dark mode in Mail does not update the message view to be transparent
        https://bugs.webkit.org/show_bug.cgi?id=188891
        rdar://problem/42344352

        Reviewed by Simon Fraser.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rootBackgroundColorOrTransparencyChanged):
        Don't return early when m_layerForOverhangAreas is null to avoid skipping
        setRootLayerConfigurationNeedsUpdate() and scheduleCompositingLayerUpdate().

2018-12-19  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Add stubs for WebGPUPipelineLayout/Descriptor and device::createPipelineLayout
        https://bugs.webkit.org/show_bug.cgi?id=192843
        <rdar://problem/46820395>

        Reviewed by Myles Maxfield.

        Test: webgpu/pipeline-layouts.html

        Implement the emtpy WebGPUPipelineLayout interface, and enable creation via WebGPUDevice::createPipelineLayout:
        * Modules/webgpu/WebGPUBindGroupLayout.cpp:
        (WebCore::WebGPUBindGroupLayout::WebGPUBindGroupLayout):
        * Modules/webgpu/WebGPUBindGroupLayout.h:
        (WebCore::WebGPUBindGroupLayout::bindGroupLayout const): Added getter.
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createPipelineLayout const): Added.
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDevice.idl: Enable createPipelineLayout.
        * Modules/webgpu/WebGPUPipelineLayout.cpp: Added.
        (WebCore::WebGPUPipelineLayout::create):
        (WebCore::WebGPUPipelineLayout::WebGPUPipelineLayout):
        * Modules/webgpu/WebGPUPipelineLayout.h: Added.
        * Modules/webgpu/WebGPUPipelineLayout.idl: Added.
        * Modules/webgpu/WebGPUPipelineLayoutDescriptor.h: Added.
        * Modules/webgpu/WebGPUPipelineLayoutDescriptor.idl: Added.
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::createPipelineLayout const): Added.
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/GPUPipelineLayout.cpp: Added.
        (WebCore::GPUPipelineLayout::create):
        (WebCore::GPUPipelineLayout::GPUPipelineLayout):
        * platform/graphics/gpu/GPUPipelineLayout.h: Added.
        * platform/graphics/gpu/GPUPipelineLayoutDescriptor.h: Added.

        Add files and symbols to project:
        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

        Add missing include:
        * Modules/webgpu/WebGPUQueue.h:

2018-12-18  Ryosuke Niwa  <rniwa@webkit.org>

        SVGUseElement::findTarget should return nullptr when there is a cycle
        https://bugs.webkit.org/show_bug.cgi?id=192840

        Reviewed by Tim Horton.

        r233366 added an early return to updateShadowTree() when there is a cycle between an use element and its target.
        Consolidate this cycle detection code with the one in SVGUseElement::findTarget which detected cycles when
        the SVG use element itself had a corresponding element.

        No new tests since there should be no behavioral change.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::updateShadowTree):
        (WebCore::SVGUseElement::findTarget const):

2018-12-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Add a handwritten lexer
        https://bugs.webkit.org/show_bug.cgi?id=192294

        Reviewed by Jon Lee.

        This is infrastructure necessary for https://bugs.webkit.org/show_bug.cgi?id=192355. The
        implementation matches the lexing rules in the spec (specifically, the rules that start
        with an uppercase letter). The spec is at
        https://github.com/gpuweb/WHLSL/blob/master/Spec/WHLSL.g4.

        This patch also modifies the lexer according to https://github.com/gpuweb/WHLSL/pull/283.

        No new tests because the lexer isn't hooked up yet; there are tests in the parser,
        once that gets committed.

        * Modules/webgpu/WHLSL/WHLSLLexer.cpp: Added.
        (WebCore::WHLSL::Lexer::Token::typeName):
        (WebCore::WHLSL::Lexer::recognizeKeyword):
        (WebCore::WHLSL::Lexer::consumeTokenFromStream):
        (WebCore::WHLSL::Lexer::skipWhitespaceAndComments):
        (WebCore::WHLSL::isWhitespace):
        (WebCore::WHLSL::isNewline):
        (WebCore::WHLSL::Lexer::skipWhitespace):
        (WebCore::WHLSL::Lexer::skipLineComment):
        (WebCore::WHLSL::Lexer::skipLongComment):
        (WebCore::WHLSL::Lexer::coreDecimalIntLiteral const):
        (WebCore::WHLSL::Lexer::decimalIntLiteral const):
        (WebCore::WHLSL::Lexer::decimalUintLiteral const):
        (WebCore::WHLSL::isHexadecimalCharacter):
        (WebCore::WHLSL::Lexer::coreHexadecimalIntLiteral const):
        (WebCore::WHLSL::Lexer::hexadecimalIntLiteral const):
        (WebCore::WHLSL::Lexer::hexadecimalUintLiteral const):
        (WebCore::WHLSL::Lexer::intLiteral const):
        (WebCore::WHLSL::Lexer::uintLiteral const):
        (WebCore::WHLSL::Lexer::digit const):
        (WebCore::WHLSL::Lexer::digitStar const):
        (WebCore::WHLSL::Lexer::character const):
        (WebCore::WHLSL::Lexer::coreFloatLiteralType1 const):
        (WebCore::WHLSL::Lexer::coreFloatLiteral const):
        (WebCore::WHLSL::Lexer::floatLiteral const):
        (WebCore::WHLSL::Lexer::validIdentifier const):
        (WebCore::WHLSL::Lexer::identifier const):
        (WebCore::WHLSL::Lexer::operatorName const):
        * Modules/webgpu/WHLSL/WHLSLLexer.h: Added.
        (WebCore::WHLSL::Lexer::Lexer):
        (WebCore::WHLSL::Lexer::consumeToken):
        (WebCore::WHLSL::Lexer::unconsumeToken):
        (WebCore::WHLSL::Lexer::state const):
        (WebCore::WHLSL::Lexer::setState):
        (WebCore::WHLSL::Lexer::isFullyConsumed const):
        (WebCore::WHLSL::Lexer::errorString):
        (WebCore::WHLSL::Lexer::string const):
        (WebCore::WHLSL::Lexer::anyCharacter const):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2018-12-18  Simon Fraser  <simon.fraser@apple.com>

        Web Inspector: Timelines: correctly label Intersection Observer callbacks
        https://bugs.webkit.org/show_bug.cgi?id=192669
        <rdar://problem/46702490>

        Reviewed by Joseph Pecoraro.

        Add InspectorInstrumentation::willFireObserverCallback() and use it to wrap calls
        to Intersection Observer, Performance Observer and Mutation Observer callbacks so 
        that they get correctly labeled in the Inspector timeline.

        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::deliver):
        * en.lproj/Localizable.strings:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willFireObserverCallbackImpl):
        (WebCore::InspectorInstrumentation::didFireObserverCallbackImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willFireObserverCallback):
        (WebCore::InspectorInstrumentation::didFireObserverCallback):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createObserverCallbackData):
        * inspector/TimelineRecordFactory.h:
        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willFireObserverCallback):
        (WebCore::InspectorTimelineAgent::didFireObserverCallback):
        (WebCore::toProtocol):
        * inspector/agents/InspectorTimelineAgent.h:
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::notify):
        * page/PerformanceObserver.cpp:
        (WebCore::PerformanceObserver::deliver):

2018-12-19  Claudio Saavedra  <csaavedra@igalia.com>

        ContentExtensions: DFANode.cpp:66:44: error: narrowing conversion of '-1' from 'int' to 'char' inside { }
        https://bugs.webkit.org/show_bug.cgi?id=192854

        Reviewed by Alex Christensen.

        * contentextensions/DFANode.h: Define CharRange's chars as signed

2018-12-19  Youenn Fablet  <youenn@apple.com>

        Remove RTCRtpTransceiver.setDirection
        https://bugs.webkit.org/show_bug.cgi?id=192869

        Reviewed by Alex Christensen.

        Covered by rebased test.

        * Modules/mediastream/RTCRtpTransceiver.idl:

2018-12-19  Jer Noble  <jer.noble@apple.com>

        Force synchronous decode in WebCoreDecompressionSession::decodeSampleSync()
        https://bugs.webkit.org/show_bug.cgi?id=192856
        <rdar://problem/46843245>

        Reviewed by Alex Christensen.

        Some decoders exposed through VideoToolbox will decode asynchronously even when 
        kVTDecodeInfo_Asynchronous is not set. Force synchronous behavior with a Semaphore.

        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::decodeSampleSync):

2018-12-19  Megan Gardner  <megan_gardner@apple.com>

        Allow clients to set the navigator platform
        https://bugs.webkit.org/show_bug.cgi?id=192735

        Reviewed by Tim Horton.

        Expanded TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm.

        Lots of piping to allow the setting of a custom navigator platform.

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setCustomNavigatorPlatform):
        (WebCore::DocumentLoader::customNavigatorPlatform const):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::navigatorPlatform const):
        * loader/FrameLoader.h:
        * page/Navigator.cpp:
        (WebCore::Navigator::platform const):
        * page/Navigator.h:
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::platform const):
        (WebCore::NavigatorBase::platform): Deleted.
        * page/NavigatorBase.h:

2018-12-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r239347.

        Caused the leaks bot to hit an exception and the new test
        crashes on certain configurations.

        Reverted changeset:

        "Synchronous media query evaluation could destroy current
        Frame/FrameView."
        https://bugs.webkit.org/show_bug.cgi?id=192781
        https://trac.webkit.org/changeset/239347

2018-12-19  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r239358.

        Revision caused imported/w3c/web-platform-tests/IndexedDB/ to
        crash on Debug bots

        Reverted changeset:

        "Clean up IndexedDB files between tests"
        https://bugs.webkit.org/show_bug.cgi?id=192796
        https://trac.webkit.org/changeset/239358

2018-12-19  Don Olmstead  <don.olmstead@sony.com>

        Sync some include directories in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=192819

        Reviewed by Michael Catanzaro.

        Added missing include directories around features that have only been enabled on
        Apple ports. Removes obsolete directories from list and moves harfbuzz directories
        into the freetype cmake file.

        * CMakeLists.txt:
        * platform/FreeType.cmake:

2018-12-19  Alicia Boya García  <aboya@igalia.com>

        [MSE] Remove unused method: stopAskingForMoreSamples()
        https://bugs.webkit.org/show_bug.cgi?id=192754

        Reviewed by Xabier Rodriguez-Calvar.

        The stopAskingForMoreSamples() method from SourceBufferPrivate is not
        being used by anyone. SourceBuffer is not calling it and no
        SourceBufferPrivate is implementing it. Let's remove that noise.

        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::setActive):
        (WebCore::SourceBufferPrivate::stopAskingForMoreSamples): Deleted.
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::stopAskingForMoreSamples): Deleted.
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h:

2018-12-19  Alicia Boya García  <aboya@igalia.com>

        [MSE] Remove dead code: sourceBufferPrivateSeekToTime()
        https://bugs.webkit.org/show_bug.cgi?id=192827

        Reviewed by Xabier Rodriguez-Calvar.

        This patch makes two dead code removal changes in
        SourceBufferPrivateClient:

        First, sourceBufferPrivateFastSeekTimeForMediaTime() is made pure
        virtual in SourceBufferPrivateClient. Since SourceBufferPrivateClient
        is only inherited by SourceBuffer, it makes no sense to have default
        implementations there (they will never be used), moreso it being a
        client interface.

        Second, sourceBufferPrivateSeekToTime() is removed entirely. It used
        to had an empty implementation, which SourceBuffer did not overwrite,
        therefore making any calls to it useless.

        All calls to sourceBufferPrivateSeekToTime() have been removed:

        SourceBufferPrivateAVFObjC::seekToTime(), which was also dead code
        itself, used to call this method. This patch deletes it completely.

        MockSourceBufferPrivate::seekToTime(), which only called this empty
        method, has also been removed along with its only usage in
        MockMediaSourcePrivate::seekToTime().

        * platform/graphics/SourceBufferPrivateClient.h:
        (WebCore::SourceBufferPrivateClient::sourceBufferPrivateFastSeekTimeForMediaTime): Deleted.
        (WebCore::SourceBufferPrivateClient::sourceBufferPrivateSeekToTime): Deleted.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::seekToTime): Deleted.
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::seekToTime):
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::seekToTime): Deleted.
        * platform/mock/mediasource/MockSourceBufferPrivate.h:

2018-12-19  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [EME] MediaKeySystemConfiguration distinctiveIdentifier and persistentState should default to optional
        https://bugs.webkit.org/show_bug.cgi?id=192815

        Reviewed by Jer Noble.

        https://www.w3.org/TR/encrypted-media/#dom-mediakeysystemconfiguration
        says that distinctiveIdentifier and persistentState default to
        optional. Our implementation does not define a default leaving it
        to the first option of the enum, which currently is Required.

        * platform/encryptedmedia/CDMKeySystemConfiguration.h:

2018-12-19  Rob Buis  <rbuis@igalia.com>

        Merge parseAccessControlExposeHeadersAllowList into parseAccessControlAllowList
        https://bugs.webkit.org/show_bug.cgi?id=192288

        Reviewed by Frédéric Wang.

        Prefer return value to out parameter for parseAccessControlAllowList.

        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCacheItem::parse):
        * platform/network/HTTPParsers.h:
        (WebCore::parseAccessControlAllowList):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::filter):
        (WebCore::ResourceResponseBase::sanitizeHTTPHeaderFieldsAccordingToTainting):

2018-12-18  Zan Dobersek  <zdobersek@igalia.com>

        REGRESSION(r235165): [GTK][WPE] Garbled rendering on GitLab
        https://bugs.webkit.org/show_bug.cgi?id=192230

        Reviewed by Carlos Garcia Campos.

        Single tile can after r235165 be assigned multiple content updates
        without a commit occurring between each update, whereas before these
        commits were done for each update.

        To avoid repeating updates for a single tile purging information about
        the previous update, these updates are now accumulated inside a Vector
        and then iterated over during the commit phase.

        * platform/graphics/texmap/coordinated/CoordinatedBackingStore.cpp:
        (WebCore::CoordinatedBackingStoreTile::addUpdate):
        (WebCore::CoordinatedBackingStoreTile::swapBuffers):
        (WebCore::CoordinatedBackingStore::updateTile):
        (WebCore::CoordinatedBackingStoreTile::setBackBuffer): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedBackingStore.h:
        (WebCore::CoordinatedBackingStoreTile::scale const):

2018-12-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] A copied text selection is pasted as a web archive attachment in the entry view in Messages
        https://bugs.webkit.org/show_bug.cgi?id=192842
        <rdar://problem/46823586>

        Reviewed by Tim Horton.

        Temporarily revert a behavior change introduced by r238661, where we now add "com.apple.webarchive" as a
        registered UTI when dragging or copying a text selection. This broke the Messages app on iOS, which currently
        inserts a copied or dragged text selection from WebKit-based views as a web archive file attachment. A fix for
        this is internally tracked in <rdar://problem/46830277>.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write):

2018-12-18  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, add a missing UNUSED_PARAM()

        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::getPrivateImpl):

2018-12-18  Justin Michaud  <justin_michaud@apple.com>

        Update CSS Properties and Values API to use new cycle fallback behaviour
        https://bugs.webkit.org/show_bug.cgi?id=192800

        Reviewed by Antti Koivisto.

        Make CSS variables that are registered and involved in a cycle be treated as invalid. This also fixes a crash in the
        wpt tests where relative units and calc() in a registered property's initial value would break things instead of failing. 

        * css/CSSCustomPropertyValue.h:
        * css/CSSVariableReferenceValue.cpp:
        (WebCore::resolveVariableReference):
        * css/DOMCSSRegisterCustomProperty.cpp:
        (WebCore::DOMCSSRegisterCustomProperty::registerProperty):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyCascadedCustomProperty):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseTypedCustomPropertyValue):

2018-12-18  Daniel Bates  <dabates@apple.com>

        Wrong value for key property in keydown and keyup events generated holding Control key
        https://bugs.webkit.org/show_bug.cgi?id=192788
        <rdar://problem/46795214>

        Reviewed by Wenson Hsieh.

        Similar to what we do on Mac, compute the DOM key property from the characters ignoring
        modifier keys input string when the Control key is held down.

        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::keyForKeyEvent):
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::keyForKeyEvent):

2018-12-18  Sihui Liu  <sihui_liu@apple.com>

        Clean up IndexedDB files between tests
        https://bugs.webkit.org/show_bug.cgi?id=192796

        Reviewed by Geoffrey Garen.

        We should clean up the IndexedDB files between tests to make sure each test is independent of others.

        This patch also fixes some issues in IDB.

        Covered by existing tests.

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesModifiedSince):
        We should shut down all open databases instead of databases from open database connections before deleting 
        files, because database starts accessing files before connection to database is established.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::shutdownForClose):
        We should shutdown database after tasks in queue are completed, because tasks have pointer of UniqueIDBDatabase 
        and UniqueIDBDatabase can be destructed after shutdown.

        (WebCore::IDBServer::UniqueIDBDatabase::didDeleteBackingStore):
        didDeleteBackingStore can be posted to main thread after immediateCloseForUserDelete, and timer should not be 
        invoked during the hard close.

        (WebCore::IDBServer::UniqueIDBDatabase::handleDatabaseOperations):
        Tasks like didOpenBackingStore could be posted from database thread to main thread after 
        immediateCloseForUserDelete, but we know the backing store will be deleted soon, so no need to handle any 
        database operation. 

        (WebCore::IDBServer::UniqueIDBDatabase::performPrefetchCursor):
        performPrefetchCursor needs to be aware of whether UniqueIDBDatabase is being closed, so that it will not access 
        m_backingStore when m_backingStore may already be deleted. 

        (WebCore::IDBServer::UniqueIDBDatabase::immediateCloseForUserDelete):
        immediateCloseForUserDelete does not handle transactions that are in the process of commit or abort. 
        m_objectStoreTransactionCounts and m_objectStoreWriteTransactions may be used by those transactions in 
        transactionCompleted, so they do not need to be cleared here.

2018-12-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Thick overlines and line-throughs grow in the wrong direction
        https://bugs.webkit.org/show_bug.cgi?id=192264

        Reviewed by Dean Jackson.

        Overlines should grow upward, and line-throughs should stay centered.

        Test: fast/css3-text/css3-text-decoration/text-decoration-thicknes-overline-grow-direction.html

        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::paintTextDecoration):
        * style/InlineTextBoxStyle.cpp:
        (WebCore::visualOverflowForDecorations):

2018-12-18  Ryosuke Niwa  <rniwa@webkit.org>

        Some iOS app crash in FrameLoader::checkCompleted
        https://bugs.webkit.org/show_bug.cgi?id=192804
        <rdar://problem/44240573>

        Reviewed by Tim Horton.

        It's possible for the main thread to call into WebCore / UIWebView selectors while Web thread
        is trying to send a delegate message. Disable the release assertion while this is happening
        so that iOS app would not crash.

        Unfortunately no new test as there is no way to easily test UIWebView in iOS,
        and this requires a race between the web thread & the main thread.

        * dom/ScriptDisallowedScope.h:
        (WebCore::ScriptDisallowedScope::InMainThread::isScriptAllowed):
        * platform/ios/wak/WebCoreThread.h:
        * platform/ios/wak/WebCoreThread.mm:
        (WebThreadDelegateMessageScope::WebThreadDelegateMessageScope):
        (WebThreadDelegateMessageScope::~WebThreadDelegateMessageScope):
        (SendDelegateMessage):

2018-12-18  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: Use const reference for MediaTime parameter to prevent object copy
        <https://webkit.org/b/192814>

        Reviewed by Mark Lam.

        * bindings/js/JSDOMConvertNumbers.h:
        (WebCore::JSConverter<IDLUnrestrictedDouble>::convert):

2018-12-18  Justin Fan  <justin_fan@apple.com>

        [WebGPU] BindGroupLayout and Device::createBindGroupLayout
        https://bugs.webkit.org/show_bug.cgi?id=192817

        Reviewed by Dean Jackson.

        Update bind-group-layouts to test new functionality.

        Implement the emtpy WebGPUBindGroupLayout interface, and enable creation via WebGPUDevice::createBindGroupLayout:
        * Modules/webgpu/WebGPUBindGroupLayout.cpp: Added.
        (WebCore::WebGPUBindGroupLayout::create):
        (WebCore::WebGPUBindGroupLayout::WebGPUBindGroupLayout):
        * Modules/webgpu/WebGPUBindGroupLayout.h: Added.
        * Modules/webgpu/WebGPUBindGroupLayout.idl: Added. Empty interface for now.
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createBindGroupLayout const): Added.
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDevice.idl:
        * platform/graphics/gpu/GPUBindGroupLayout.cpp: Added.
        (WebCore::GPUBindGroupLayout::tryCreate):
        (WebCore::GPUBindGroupLayout::GPUBindGroupLayout):
        * platform/graphics/gpu/GPUBindGroupLayout.h: Added.
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::tryCreateBindGroupLayout const): Added.
        * platform/graphics/gpu/GPUDevice.h:

        Add files and symbols to project:
        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

        Missing includes that were previously provided via UnifiedSources:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/sql/SQLiteFileSystem.h:

2018-12-18  Youenn Fablet  <youenn@apple.com>

        Make ReadableStreamXX constructs use PrivateIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=192771

        Reviewed by Chris Dumez.

        PrivateIdentifier is a better name for making sure a given construct does not show up in the global scope.
        Covered by existing binding tests.

        * Modules/streams/ReadableByteStreamController.idl:
        * Modules/streams/ReadableStreamBYOBReader.idl:
        * Modules/streams/ReadableStreamBYOBRequest.idl:
        * Modules/streams/ReadableStreamDefaultController.idl:
        * Modules/streams/ReadableStreamDefaultReader.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (NeedsConstructorProperty):
        * bindings/scripts/preprocess-idls.pl:
        (shouldExposeInterface):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp: Removed.
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h: Removed.
        * bindings/scripts/test/TestCustomConstructor.idl: Removed.

2018-12-18  Zalan Bujtas  <zalan@apple.com>

        Synchronous media query evaluation could destroy current Frame/FrameView.
        https://bugs.webkit.org/show_bug.cgi?id=192781
        <rdar://problem/34416793>

        Reviewed by Chris Dumez.

        Protect Frame and FrameView when coming back from printing and check if the current Frame/FrameView/FrameLoader objects are still valid.

        Test: printing/print-with-media-query-destory.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading):
        * page/Frame.cpp:
        (WebCore::Frame::setPrinting):
        * page/FrameView.cpp:
        (WebCore::FrameView::forceLayoutForPagination):

2018-12-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: m3u8 content not shown, it should be text
        https://bugs.webkit.org/show_bug.cgi?id=192731
        <rdar://problem/46747728>

        Reviewed by Devin Rousso.

        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::setResourceContent):
        Don't clobber data if setting empty content on a resource that has content.

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::shouldTreatAsText):
        Additional non-"text/" mime types that can be treated as text.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::isTextMediaPlaylistMIMEType):
        * platform/MIMETypeRegistry.h:
        Detect media playlist mime types that are text (m3u8/m3u).

2018-12-18  Daniel Bates  <dabates@apple.com>

        Remove <meta http-equiv=set-cookie> support
        https://bugs.webkit.org/show_bug.cgi?id=185077
        <rdar://problem/41791397>

        Reviewed by Brent Fulgham.

        Remove support for the HTTP-equiv. pragma Set-Cookie to set a cookie. In <https://github.com/whatwg/html/pull/3649>
        the HTML living standard was ammended to define this pragma as no-op. Chrome and Edge have also
        removed support for this pragma and Firefox has an open bug to remove it.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv): Emit a message that the Set-Cookie pragma is obsolete and
        was ignored instead of setting the cookie.
        * html/parser/XSSAuditor.cpp:
        (WebCore::isDangerousHTTPEquiv): We no longer need to consider the Set-Cookie pragma
        as dangerous and erase attribute http-equiv when we find it because we no longer honor
        this pragma.

2018-12-18  Justin Michaud  <justin_michaud@apple.com>

        CSS Typed OM should expose attributeStyleMap
        https://bugs.webkit.org/show_bug.cgi?id=192671

        Reviewed by Ryosuke Niwa.

        Exposes element.attributeStyleMap, adds a stub for the StylePropertyMap class, and updates the existing
        TypedOMCSSImageValue to not require a RenderObject so that it can still work inside attributeStyleMap.

        Test: css-typedom/attributeStyleMap.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * css/ElementCSSInlineStyle.idl:
        * css/typedom/StylePropertyMap.h: Copied from Source/WebCore/css/typedom/StylePropertyMapReadOnly.h.
        * css/typedom/StylePropertyMap.idl: Copied from Source/WebCore/css/typedom/StylePropertyMapReadOnly.idl.
        * css/typedom/StylePropertyMapReadOnly.cpp: Added.
        (WebCore::StylePropertyMapReadOnly::reifyValue):
        (WebCore::StylePropertyMapReadOnly::customPropertyValueOrDefault):
        * css/typedom/StylePropertyMapReadOnly.h:
        (WebCore::StylePropertyMapReadOnly::create): Deleted.
        (WebCore::StylePropertyMapReadOnly::get const): Deleted.
        (WebCore::StylePropertyMapReadOnly::StylePropertyMapReadOnly): Deleted.
        * css/typedom/StylePropertyMapReadOnly.idl:
        * css/typedom/TypedOMCSSImageValue.h:
        * dom/Element.cpp:
        (WebCore::Element::attributeStyleMap):
        (WebCore::Element::setAttributeStyleMap):
        * dom/Element.h:
        * dom/ElementRareData.cpp:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::attributeStyleMap):
        (WebCore::ElementRareData::setAttributeStyleMap):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::ensureAttributeStyleMap):
        * dom/StyledElement.h:
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::size):
        (WebCore::CanvasRenderingContext2DBase::drawImage):
        * platform/graphics/CustomPaintImage.cpp:
        (WebCore::extractComputedProperty):
        (WebCore::CustomPaintImage::doCustomPaint):

2018-12-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Calling setValue() while typing should invoke -textDidChangeInTextField in the injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=192785
        <rdar://problem/45321184>

        Reviewed by Tim Horton.

        Makes a minor adjustment in `TextFieldInputType::setValue` to consider value changes as "user editing", if we're
        currently processing a keystroke from the user. This is useful for certain private clients, such as Safari, that
        need to know when the user is typing in a text form control, but the page is preventing default text insertion
        behavior and instead updating values programmatically.

        Test: fast/forms/call-text-did-change-in-text-field-when-typing.html

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::setValue):

2018-12-18  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Implement marginBeforeCollapsesWithParentMarginAfter
        https://bugs.webkit.org/show_bug.cgi?id=192801

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginBeforeCollapsesWithParentMarginAfter):

2018-12-18  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Implement marginAfterCollapsesWithSiblingMarginBeforeWithClearance
        https://bugs.webkit.org/show_bug.cgi?id=192799

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginAfterCollapsesWithSiblingMarginBeforeWithClearance):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginAfterCollapsesWithParentMarginAfter):

2018-12-18  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Implement marginAfterCollapsesWithParentMarginBefore
        https://bugs.webkit.org/show_bug.cgi?id=192798

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::collapsedMarginAfterFromLastChild):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginAfterCollapsesWithParentMarginBefore):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginAfterCollapsesWithParentMarginAfter):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginAfter):

2018-12-18  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Expand marginsCollapseThrough collapsing logic
        https://bugs.webkit.org/show_bug.cgi?id=192794

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginsCollapseThrough):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginBefore):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginAfter):

2018-12-18  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Expand marginAfterCollapsesWithNextSibling and marginBeforeCollapsesWithPreviousSibling collapsing logic
        https://bugs.webkit.org/show_bug.cgi?id=192791

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginBeforeCollapsesWithPreviousSibling):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginAfterCollapsesWithNextSibling):

2018-12-18  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Expand marginAfterCollapsesWithParentMarginAfter and marginBeforeCollapsesWithParentMarginBefore collapsing logic
        https://bugs.webkit.org/show_bug.cgi?id=192787

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::hasClearance):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginBeforeCollapsesWithParentMarginBefore):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginAfterCollapsesWithSiblingMarginBeforeWithClearance):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginAfterCollapsesWithParentMarginBefore):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginAfterCollapsesWithParentMarginAfter):

2018-12-17  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] Fix compilation warnings WebCore/platform/graphics directory
        https://bugs.webkit.org/show_bug.cgi?id=192752

        Reviewed by Don Olmstead.

        No new tests, no behavior changes.

        * platform/graphics/win/DIBPixelData.cpp:
        Enclosed bitmapType and bitmapPixelsPerMeter with #ifndef NDEBUG.
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::openTypeTable const): Use ASSERT_UNUSED instead of ASSERT.
        * platform/graphics/win/GraphicsContextWin.cpp: Removed unused variable 'deg2rad'.
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        Removed unused soft links MFCreateSampleGrabberSinkActivate, MFCreateMemoryBuffer and MFCreateSample.
        (WebCore::MediaPlayerPrivateMediaFoundation::MediaPlayerPrivateMediaFoundation):
        Reorder the initializer list.
        (WebCore::MediaPlayerPrivateMediaFoundation::seek): Use ASSERT_UNUSED instead of ASSERT.
        (WebCore::MediaPlayerPrivateMediaFoundation::setAllChannelVolumes): Ditto.
        (WebCore::MediaPlayerPrivateMediaFoundation::createSession): Ditto.
        (WebCore::MediaPlayerPrivateMediaFoundation::endSession): Ditto.
        (WebCore::MediaPlayerPrivateMediaFoundation::onCreatedMediaSource): Ditto.
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::paintCurrentFrame): Added default case.
        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        (WebCore::Font::platformBoundsForGlyph const): Use inner braces to initialize subobjects of MAT2.
        * platform/graphics/win/SimpleFontDataWin.cpp: Removed unused 'cSmallCapsFontSizeMultiplier'.
        (WebCore::Font::initGDIFont): Use inner braces to initialize subobjects of MAT2.
        (WebCore::Font::boundsForGDIGlyph const): Ditto.
        (WebCore::Font::widthForGDIGlyph const): Ditto.
        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::UniscribeController):
        Reorder the initializer list.
        (WebCore::UniscribeController::offsetForPosition): Use parentheses to combine && and ||.
        (WebCore::UniscribeController::shapeAndPlaceItem): Removed unused 'glyphCount'.

2018-12-17  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] A stream's first video frame should be rendered
        https://bugs.webkit.org/show_bug.cgi?id=192629
        <rdar://problem/46664353>

        Reviewed by Youenn Fablet.

        Test: fast/mediastream/media-stream-renders-first-frame.html

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayers):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode const):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext):
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::size const):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::processNewFrame):
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::processNewSample):

2018-12-17  Justin Michaud  <justin_michaud@apple.com>

        Bindings generator should support Conditional= along with CachedAttribute
        https://bugs.webkit.org/show_bug.cgi?id=192721

        Reviewed by Ryosuke Niwa.

        Fix a bug where specifying both attributes causes compilation errors because the compile-time
        condition is not included in the derived code.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjCachedAttribute3Getter):
        (WebCore::jsTestObjCachedAttribute3):
        (WebCore::JSTestObj::visitChildren):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/TestObj.idl:

2018-12-17  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: Fix unnecessary object copy in CPUMonitor::setCPULimit()
        <https://webkit.org/b/192707>
        <rdar://problem/46734926>

        Reviewed by Daniel Bates.

        * platform/CPUMonitor.cpp:
        (WebCore::CPUMonitor::setCPULimit):
        * platform/CPUMonitor.h:
        (WebCore::CPUMonitor::setCPULimit):
        - Change parameter to const reference to fix unnecessary copies.

2018-12-17  Ryosuke Niwa  <rniwa@webkit.org>

        offsetLeft and offsetParent should adjust across shadow boundaries
        https://bugs.webkit.org/show_bug.cgi?id=157437
        <rdar://problem/26154021>

        Reviewed by Simon Fraser.

        Update the WebKit's treatment of shadow boundaries in offsetLeft, offsetTop, and offsetParent to match
        the latest discussion in CSS WG. See https://github.com/w3c/webcomponents/issues/497
        and https://github.com/w3c/webcomponents/issues/763

        The latest consensus is to use the retargeting algorithm (https://dom.spec.whatwg.org/#retarget).
        In practice, this would mean that we need to keep walking up the offset parent ancestors until we find
        the one which is in the same tree as a shadow-inclusive ancestor of the context object.

        For example, if a node (the context object of offsetTop, offsetLeft, offsetParent) was assigned to a slot
        inside a shadow tree and its offset parent was in the shadow tree, we need to walk up to its offset parent,
        then its offset parent, etc... until we find the offset parent in the same tree as the context object.

        Note it's possible that the context object is inside a shadow tree which does not have its own offset parent.
        (e.g. all elements have position: static) For this reason, we need to consider not just offset parent in
        the same tree as the context object but as well as any offset parent which is in its ancestor trees.

        Test: fast/shadow-dom/offsetParent-across-shadow-boundaries.html

        * dom/Element.cpp:
        (WebCore::adjustOffsetForZoomAndSubpixelLayout): Extracted to share code between offsetLeft and offsetTop.
        (WebCore::collectAncestorTreeScopeAsHashSet): Added.
        (WebCore::Element::offsetLeftForBindings): Added. Sums up offsetLeft's until it finds the first offset parent
        which is a shadow-including ancestor (https://dom.spec.whatwg.org/#concept-shadow-including-ancestor).
        (WebCore::Element::offsetLeft): Now uses adjustOffsetForZoomAndSubpixelLayout.
        (WebCore::Element::offsetTopForBindings): Added. Like offsetLeftForBindings, this function sums up offsetTop's
        until it finds the first offset parent which is a shadow-including ancestor.
        (WebCore::Element::offsetTop): Now uses adjustOffsetForZoomAndSubpixelLayout.
        (WebCore::Element::offsetParentForBindings): Renamed from bindingsOffsetParent to be consistent with other
        functions meant to be used for bindings code.
        * dom/Element.h:
        * html/HTMLElement.idl:

2018-12-17  Simon Fraser  <simon.fraser@apple.com>

        Don't use more expensive layer backing store formats when subpixel text antialiasing is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=192780
        rdar://problem/43394387

        Reviewed by Tim Horton.
        
        macOS Mojave disabled text subpixel antialiasing by default, so we no longer need to use the
        memory-hungry "linear glyph mask" CALayer backing store formats for non-opaque with text in them.
        
        Add FontCascade::isSubpixelAntialiasingAvailable() which reports whether subpixel antialiasing is available,
        and consult it when making decisions that affect layer backing store format.

        Tested by new results for existing tests.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::isSubpixelAntialiasingAvailable):
        * platform/graphics/FontCascade.h:
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::isSubpixelAntialiasingAvailable): CGFontRenderingGetFontSmoothingDisabled() isn't super cheap, so fetch
        it once.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterDescendants):
        * testing/Internals.cpp:
        (WebCore::Internals::setFontSmoothingEnabled): Remove a WebCore::

2018-12-17  Daniel Bates  <dabates@apple.com>

        Make DocumentMarker::allMarkers() constexpr
        https://bugs.webkit.org/show_bug.cgi?id=192634

        Reviewed by Simon Fraser.

        The result of DocumentMarker::allMarkers() can be computed at compile time. We should annotate
        it constexpr to do just that.

        * dom/DocumentMarker.h:
        (WebCore::DocumentMarker::allMarkers):

2018-12-17  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Implement WebGPUBindGroupLayoutDescriptor and its supporting dictionaries
        https://bugs.webkit.org/show_bug.cgi?id=192726

        Reviewed by Myles C. Maxfield.

        Test: webgpu/bind-group-layouts.html
        Implement the WebGPUBindGroupLayoutDescriptor struct and its sub-structs:
        * Modules/streams/WebGPUBindGroupLayoutDescriptor.h: Added.
        * Modules/streams/WebGPUBindGroupLayoutDescriptor.idl: Added.
        * Modules/webgpu/WebGPUBindGroupLayoutBinding.h: Added.
        * Modules/webgpu/WebGPUBindGroupLayoutBinding.idl: Added.
        * Modules/webgpu/WebGPUShaderStageBit.h: Added.
        * Modules/webgpu/WebGPUShaderStageBit.idl: Added.
        * platform/graphics/gpu/GPUBindGroupLayoutBinding.h: Added.
        * platform/graphics/gpu/GPUBindGroupLayoutDescriptor.h: Added.

        Add the new symbols and files to the project:
        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

        Small FIXME update for later:
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::GPURenderPassEncoder::setVertexBuffers):

2018-12-17  Zalan Bujtas  <zalan@apple.com>

        Unreviewed build fix.

        * page/ios/FrameIOS.mm:
        (WebCore::Frame::interpretationsForCurrentRoot const):

2018-12-17  Zalan Bujtas  <zalan@apple.com>

        Reproducible ASSERTion failure when toggling layer borders with find-in-page up
        https://bugs.webkit.org/show_bug.cgi?id=192762
        <rdar://problem/46676873>

        Reviewed by Simon Fraser.

        DocumentMarkerController::markersFor() should take a reference instead of a Node*.

        Test: editing/document-marker-null-check.html

        * dom/DocumentMarkerController.cpp:
        (DocumentMarkerController::hasMarkers):
        * dom/DocumentMarkerController.h:
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::respondToChangedSelection):
        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartHasMarkerFor const):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::collectMarkedTextsForDocumentMarkers const):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::draggedContentRangesBetweenOffsets const):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForWithReason):
        * testing/Internals.cpp:
        (WebCore::Internals::markerCountForNode):

2018-12-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239265 and r239274.
        https://bugs.webkit.org/show_bug.cgi?id=192765

        unorm_normalize is deprecated, and broke an internal build
        (Requested by Truitt on #webkit).

        Reverted changesets:

        "[GTK][WPE] Need a function to convert internal URI to display
        ("pretty") URI"
        https://bugs.webkit.org/show_bug.cgi?id=174816
        https://trac.webkit.org/changeset/239265

        "Fix the Apple Internal Mac build with a newer SDK"
        https://trac.webkit.org/changeset/239274

2018-12-17  Daniel Bates  <dabates@apple.com>

        [iOS] Remove -[WebEvent initWithKeyEventType:...:characterSet:]
        https://bugs.webkit.org/show_bug.cgi?id=192633

        Reviewed by Wenson Hsieh.

        UIKit has long adopted the newer -[WebEvent initWithKeyEventType:] initializer that takes an
        input manager hint. We no longer need to keep the variant -[WebEvent initWithKeyEventType:...:characterSet:]
        for binary compatibility.

        * platform/ios/WebEvent.h:
        * platform/ios/WebEvent.mm:
        (-[WebEvent initWithKeyEventType:timeStamp:characters:charactersIgnoringModifiers:modifiers:isRepeating:withFlags:keyCode:isTabKey:characterSet:]): Deleted.

2018-12-17  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r239254.

        This broke the Windows 10 Debug build

        Reverted changeset:

        "Replace many uses of String::format with more type-safe
        alternatives"
        https://bugs.webkit.org/show_bug.cgi?id=192742
        https://trac.webkit.org/changeset/239254

2018-12-17  Antoine Quint  <graouts@apple.com>

        [Web Animations] Remove the redundant m_scheduledMicrotask from WebAnimation
        https://bugs.webkit.org/show_bug.cgi?id=192758

        Reviewed by Dean Jackson.

        We tracked whether we had a pending microtask twice so we remove the m_scheduledMicrotask flag as m_finishNotificationStepsMicrotaskPending
        gives us enough information as it is. Additionally, we remove the scheduleMicrotaskIfNeeded() and performMicrotask() functions since there is
        less bookkeeping to perform.

        No new test since there is no user-observable change.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::updateFinishedState):
        (WebCore::WebAnimation::scheduleMicrotaskIfNeeded): Deleted.
        (WebCore::WebAnimation::performMicrotask): Deleted.
        * animation/WebAnimation.h:

2018-12-17  Antoine Quint  <graouts@apple.com>

        [Web Animations] Ensure we don't update an animation's finished state twice when updating animations
        https://bugs.webkit.org/show_bug.cgi?id=192757

        Reviewed by Dean Jackson.

        When animations are udpated and DocumentTimeline::updateAnimationsAndSendEvents() is called, we used to update an animation's finished state
        twice since we'd do it once when calling tick() and once again when calling resolve() in the ensuing style invalidation. We now keep track of
        whether we've already updated an animation's finished state during animation update in the call to tick() and avoid updating in the immediate
        next call to resolve(), unless any of the timing properties have changed in the meantime.

        No new test since there is no user-observable change.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::timingDidChange):
        (WebCore::WebAnimation::tick):
        (WebCore::WebAnimation::resolve):
        * animation/WebAnimation.h:

2018-12-17  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r233268): Elements animated in from offscreen sometimes don't display
        https://bugs.webkit.org/show_bug.cgi?id=192725
        rdar://problem/46011418

        Reviewed by Antoine Quint.

        There were two problems with backing store attachment and animation.
        
        First, animations are an input into the "backing store attached" logic, so when they change
        we should set the CoverageRectChanged bit on GraphicsLayerCA.
        
        Secondly, when an ancestor has unknown animation extent, all its descendants need to
        get backing store, so we need to set childCommitState.ancestorWithTransformAnimationIntersectsCoverageRect when
        the current layer has no animation extent.

        Tests: compositing/backing/animate-into-view-with-descendant.html
               compositing/backing/animate-into-view.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::addAnimation):
        (WebCore::GraphicsLayerCA::removeAnimation):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):

2018-12-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Unify margin collapse function naming
        https://bugs.webkit.org/show_bug.cgi?id=192747

        Reviewed by Antti Koivisto.

        Rename some margin collapse getters.

        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::computedNonCollapsedMarginBefore):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::computedNonCollapsedMarginAfter):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::nonCollapsedMarginBefore):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::nonCollapsedMarginAfter):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::collapsedMarginBeforeFromFirstChild):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::collapsedMarginAfterFromLastChild):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginBeforeCollapsesWithParentMarginAfter):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginBeforeCollapsesWithParentMarginBefore):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginAfterCollapsesWithParentMarginAfter):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginBeforeCollapsesWithPreviousSibling):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginAfterCollapsesWithNextSibling):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginsCollapseThrough):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginBefore):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginAfter):
        (WebCore::Layout::isMarginBeforeCollapsedWithSibling): Deleted.
        (WebCore::Layout::isMarginAfterCollapsedWithSibling): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginBeforeCollapsedWithParent): Deleted.
        (WebCore::Layout::isMarginAfterCollapsedThrough): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginAfterCollapsedWithParent): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginBeforeCollapsedWithParentMarginAfter): Deleted.

2018-12-17  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: loop variable is copied but only used as const reference in WebCore, WebKit, Tools
        <https://webkit.org/b/192751>
        <rdar://problem/46771623>

        Reviewed by Daniel Bates.

        Change loop variables to const references to avoid unnecessary
        copies.

        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::abort):
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::populateIndexWithExistingRecords):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::maybeNotifyConnectionsOfVersionChange):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::objectStoreIdentifiers):
        * Modules/indexeddb/shared/IDBDatabaseInfo.cpp:
        (WebCore::IDBDatabaseInfo::IDBDatabaseInfo):
        (WebCore::IDBDatabaseInfo::loggingString const):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::removeSamplesFromTrackBuffer):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::targetElementForActiveDescendant const):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::headerObject):
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::computedNeedsForcedLayout):
        * crypto/keys/CryptoKeyRSA.cpp:
        (WebCore::CryptoKeyRSA::importJwk):
        (WebCore::CryptoKeyRSA::exportJwk const):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::OrderedNamedLinesCollector::appendLines const):
        * dom/DataTransfer.cpp:
        (WebCore::readURLsFromPasteboardAsString):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::elementsFromPoint):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::checkAndStoreRegion):
        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::setInstruments):
        * page/Page.cpp:
        (WebCore::Page::updateIntersectionObservations):
        * page/TextIndicator.cpp:
        (WebCore::estimatedBackgroundColorForRange):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::computeLayoutDependency):
        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::displayWasUpdated):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::moveOrCopyAnimations):
        (WebCore::GraphicsLayerCA::updateAnimations):
        (WebCore::GraphicsLayerCA::isRunningTransformAnimation const):
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::BitmapImage::tiffRepresentation):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::append):
        * testing/Internals.cpp:
        (WebCore::Internals::acceleratedAnimationsForElement):

2018-12-17  Ms2ger  <Ms2ger@igalia.com>

        [GTK][WPE] Need a function to convert internal URI to display ("pretty") URI
        https://bugs.webkit.org/show_bug.cgi?id=174816

        Reviewed by Michael Catanzaro.

        Tests: enabled fast/url/user-visible/.

        * testing/Internals.cpp:
        (WebCore::Internals::userVisibleString): Enable method on all platforms.

2018-12-15  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Null pointer dereference in JSC::WriteBarrierBase()
        https://bugs.webkit.org/show_bug.cgi?id=191252

        Reviewed by Keith Miller.

        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::JSCustomElementRegistry::whenDefined):
        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::createDeferredPromise):
        * bindings/js/JSDOMPromiseDeferred.h:
        (WebCore::DeferredPromise::create):
        (WebCore::callPromiseFunction):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::moduleLoaderFetch):
        (WebCore::JSDOMWindowBase::moduleLoaderImportModule):
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::fetch):
        (WebCore::rejectPromise):

2018-12-15  Darin Adler  <darin@apple.com>

        Use warning-ignoring macros more consistently and simply
        https://bugs.webkit.org/show_bug.cgi?id=192743

        Reviewed by Mark Lam.

        * bridge/objc/WebScriptObject.mm: Use IGNORE_WARNINGS_BEGIN rather than
        IGNORE_CLANG_WARNINGS_BEGIN here. There is no need to compile Objective-C++
        files like this one with non-clang compilers, and no need to worry about
        them when choosing the macro.

        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::getPublicKeyComponents): Use ALLOW_DEPRECATED_DECLARATIONS_BEGIN/END.

        * css/makeprop.pl: Use IGNORE_WARNINGS_BEGIN/END, obviating the need for
        the "unknown-pragmas" trick, which the macro should take care of.
        * css/makevalues.pl: Ditto.
        * platform/ColorData.gperf: Ditto.

        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::update): Use IGNORE_WARNINGS_BEGIN/END
        (see rationale above for Objective-C++).

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::videoPlaybackQualityMetrics): Use
        ALLOW_NEW_API_WITHOUT_GUARDS_BEGIN/END.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::videoPlaybackQualityMetrics): Ditto.

        * platform/ios/DragImageIOS.mm: Use IGNORE_WARNINGS_BEGIN/END
        (see rationale above for Objective-C++).

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerViewController setWebKitOverrideRouteSharingPolicy:routingContextUID:]):
        Use ALLOW_NEW_API_WITHOUT_GUARDS_BEGIN/END.

        * platform/mac/WebPlaybackControlsManager.mm: Use IGNORE_WARNINGS_BEGIN/END
        (see rationale above for Objective-C++).

        * platform/network/cocoa/ResourceResponseCocoa.mm:
        (WebCore::ResourceResponse::platformCertificateInfo const): Use
        ALLOW_DEPRECATED_DECLARATIONS_BEGIN/END.

2018-12-15  Darin Adler  <darin@apple.com>

        Replace many uses of String::format with more type-safe alternatives
        https://bugs.webkit.org/show_bug.cgi?id=192742

        Reviewed by Mark Lam.

        A while back, String::format was more efficient than string concatenation,
        but that is no longer true, and we should prefer String::number, makeString,
        or concatenation with the "+" operator to String::format for new code.

        This is not as good for programmers who are fond of printf formatting
        style, and in some cases it's a little harder to read the strings
        interspersed with variables rather than a format string, but it's better
        in a few ways:

        - more efficient (I didn't measure the difference, but it's definitely
          slower to use String::Format which calls vsnprintf twice than to use
          the WTF code)
        - works in a type-safe way without a need to use a format specifier such
          as "%" PRIu64 or "%tu" making it much easier to avoid problems due to
          subtle differences between platforms
        - allows us to use StringView in some cases to sidestep the need to
          allocate temporary WTF::String objects
        - does not require converting each WTF::String to a C string, allowing
          us to remove many cases of ".utf8().data()" and similar expressions,
          eliminating the allocation of temporary WTF::CString objects

        This patch covers a batch of easiest-to-convert call sites.
        Later patches will allow us to deprecate or remove String::format.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::addRecord): Use makeString.
        * Modules/indexeddb/shared/IDBCursorInfo.cpp:
        (WebCore::IDBCursorInfo::loggingString const): Ditto.
        * Modules/indexeddb/shared/IDBGetAllRecordsData.cpp:
        (WebCore::IDBGetAllRecordsData::loggingString const): Ditto.
        * Modules/indexeddb/shared/IDBGetRecordData.cpp:
        (WebCore::IDBGetRecordData::loggingString const): Ditto.
        * Modules/indexeddb/shared/IDBIndexInfo.cpp:
        (WebCore::IDBIndexInfo::loggingString const): Ditto.
        (WebCore::IDBIndexInfo::condensedLoggingString const): Ditto.
        * Modules/indexeddb/shared/IDBIterateCursorData.cpp:
        (WebCore::IDBIterateCursorData::loggingString const): Ditto.
        * Modules/indexeddb/shared/IDBObjectStoreInfo.cpp:
        (WebCore::IDBObjectStoreInfo::condensedLoggingString const): Ditto.
        * Modules/indexeddb/shared/IDBResourceIdentifier.cpp:
        (WebCore::IDBResourceIdentifier::loggingString const): Ditto.
        * Modules/webdatabase/Database.cpp:
        (WebCore::formatErrorMessage): Ditto.
        * Modules/webdatabase/SQLError.h:
        (WebCore::SQLError::create): Ditto.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): Use makeString.

        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        * bindings/scripts/test/JS/JSMapLike.cpp:
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        * bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        Updated expected results.
:
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseHexColor): Use String::number
        and makeString.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setLength): Use makeString.
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::imageUpdated): Ditto.
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init): Ditto.
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::setDockingUnavailable): Ditto.
        (WebCore::InspectorFrontendClientLocal::setAttachedWindow): Ditto.
        (WebCore::InspectorFrontendClientLocal::setDebuggingEnabled): Ditto.
        (WebCore::InspectorFrontendClientLocal::setTimelineProfilingEnabled): Ditto.
        (WebCore::InspectorFrontendClientLocal::showMainResourceForFrame): Ditto.
        * inspector/agents/InspectorCSSAgent.cpp: Ditto.
        * inspector/agents/InspectorIndexedDBAgent.cpp: Ditto.
        * page/MemoryRelease.cpp:
        (WebCore::logMemoryStatisticsAtTimeOfDeath): Ditto.

        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::formatByteNumber): Use String::number.
        (WebCore::ResourceUsageOverlay::platformDraw): Use string concatenation.

        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::logFootprintComparison): Use makeString.
        * platform/animation/TimingFunction.cpp:
        (WebCore::TimingFunction::cssText const): Ditto.

        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::AVTrackPrivateAVFObjCImpl::id const): Use AtomicString::number.
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h:
        (WebCore::MediaSampleAVFObjC::MediaSampleAVFObjC): Ditto.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setContentsToSolidColor): Use makeString.
        (WebCore::GraphicsLayerCA::updateContentsImage): Ditto.
        (WebCore::GraphicsLayerCA::updateContentsRects): Ditto.
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): Ditto.
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::drawText): Ditto.

        * platform/mock/mediasource/MockSourceBufferPrivate.cpp: Use String::number.

        * platform/network/ParsedContentRange.cpp:
        (WebCore::ParsedContentRange::headerValue const): Use makeString.

        * platform/network/cf/NetworkStorageSessionCFNet.cpp: Removed some unnecessary
        compiler conditionals and reorganized the start/stop of namespaces.
        (WebCore::NetworkStorageSession::switchToNewTestingSession): Use makeString.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::unauthorizedSQLFunction): Use makeString.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo): Ditto.
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::ensureValidRecordsTable): Ditto.
        (WebCore::RegistrationDatabase::importRecords): Ditto.

2018-12-15  Youenn Fablet  <youenn@apple.com>

        Make RTCRtpSender.setParameters to activate specific encodings
        https://bugs.webkit.org/show_bug.cgi?id=192732

        Reviewed by Eric Carlson.

        The conversion between libwebrtc and WebCore is lossy for send parameters.
        Libwebrtc checking the differences of values, call to setParameters will often fail.

        Given some parameters cannot be exposed, the sender backend keeps the
        current set of parameters when gathered and reuses them when parameters are set.

        For encodings, we only change activate/maxBitRate/maxFrameRate as
        these are the most important parameters to be able to modify.

        Covered by added tests in webrtc/video.html.

        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        (WebCore::LibWebRTCRtpSenderBackend::getParameters const):
        (WebCore::LibWebRTCRtpSenderBackend::setParameters):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
        (WebCore::fromRTCRtpSendParameters):
        (WebCore::fromRTCEncodingParameters): Deleted.
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.h:

2018-12-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Avoid creating and evaluating in the InspectorOverlay page on iOS as it is unused
        https://bugs.webkit.org/show_bug.cgi?id=192724
        <rdar://problem/46745911>

        Reviewed by Devin Rousso.

        iOS never installs the InspectorOverlay page as a page overlay.
        It also uses its own node highlighting painting. Avoid any work
        and resources associated with the overlay page for iOS.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::paint):
        (WebCore::InspectorOverlay::update):
        (WebCore::InspectorOverlay::overlayPage):
        (WebCore::evaluateCommandInOverlay):

2018-12-14  Youenn Fablet  <youenn@apple.com>

        MediaRecorderPrivateAVFImpl should have a Ref<MediaRecorderPrivateWriter> as member
        https://bugs.webkit.org/show_bug.cgi?id=192720

        Reviewed by Eric Carlson.

        Make sure that MediaRecorderPrivateAVFImpl takes a Ref<MediaRecorderPrivateWriter> as member,
        as the latter is a ref counted object.
        Made some refactoring to return early in case of error.

        Also made sure that in the case of a MediaRecorder stopped by a track removal in the recorded stream
        the MediaRecorder will stop listening for its tracks.
        Otherwise, the tracks will continue calling the MediaRecorder even after it is dead.

        Test: http/wpt/mediarecorder/MediaRecorder-onremovetrack.html

        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::didAddOrRemoveTrack):
        (WebCore::MediaRecorder::setNewRecordingState): Deleted.
        * Modules/mediarecorder/MediaRecorder.h:
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp:
        (WebCore::MediaRecorderPrivateAVFImpl::create):
        (WebCore::MediaRecorderPrivateAVFImpl::MediaRecorderPrivateAVFImpl):
        (WebCore::MediaRecorderPrivateAVFImpl::sampleBufferUpdated):
        (WebCore::MediaRecorderPrivateAVFImpl::audioSamplesAvailable):
        (WebCore::MediaRecorderPrivateAVFImpl::stopRecording):
        (WebCore::MediaRecorderPrivateAVFImpl::fetchData):
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::create):
        (WebCore::MediaRecorderPrivateWriter::MediaRecorderPrivateWriter):
        (WebCore::MediaRecorderPrivateWriter::appendAudioSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::setupWriter): Deleted.

2018-12-14  Youenn Fablet  <youenn@apple.com>

        getSenders/getReceivers() should not return closed transceiver senders/receivers
        https://bugs.webkit.org/show_bug.cgi?id=192706

        Reviewed by Eric Carlson.

        Updated as per https://github.com/w3c/webrtc-pc/commit/85284b76baebf9e149d194e692be16a21768a91a
        This forces us to compute the sender/receiver list at getter call time.
        Updated the internal call sites of senders to use the list of transceivers instead.

        Covered by updated WPT tests.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addTrack):
        (WebCore::RTCPeerConnection::getSenders const):
        (WebCore::RTCPeerConnection::getReceivers const):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCRtpTransceiver.cpp:
        (WebCore::RTCRtpTransceiver::stopped const):
        (WebCore::RtpTransceiverSet::append):
        (WebCore::RtpTransceiverSet::senders const):
        (WebCore::RtpTransceiverSet::receivers const):
        * Modules/mediastream/RTCRtpTransceiver.h:
        (WebCore::RtpTransceiverSet::senders const): Deleted.
        (WebCore::RtpTransceiverSet::receivers const): Deleted.
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::findExistingSender):
        (WebCore::LibWebRTCPeerConnectionBackend::addTrack):

2018-12-14  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: Fix unnecessary copy of objects for operator==() methods
        <https://webkit.org/b/192712>
        <rdar://problem/46739332>

        Reviewed by Andy Estes.

        * contentextensions/HashableActionList.h:
        (WebCore::ContentExtensions::HashableActionList::operator== const):
        (WebCore::ContentExtensions::HashableActionList::operator!= const):
        * platform/network/FormData.h:
        (WebCore::FormDataElement::EncodedFileData::operator== const):
        (WebCore::FormDataElement::EncodedBlobData::operator== const):
        - Change arguments from const to const reference to avoid
          copies.

2018-12-14  Jer Noble  <jer.noble@apple.com>

        CRASH in CDMInstanceSessionFairPlayStreamingAVFObjC::closeSession(WTF::String const&, WTF::Function<void ()>&&)
        https://bugs.webkit.org/show_bug.cgi?id=192713
        <rdar://problem/46739706>

        Reviewed by Eric Carlson.

        A callback is being called twice, and the second time has a null Promise. Instead of these
        callbacks being WTF::Function, make them WTF::CompletionHandlers, which self-nullify and
        have ASSERTS() that they are called once-and-only-once.

        * platform/encryptedmedia/CDMInstanceSession.h:
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMInstanceSessionClearKey::closeSession):
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::closeSession):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvideRequest):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvideRenewingRequest):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didFailToProvideRequest):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::requestDidSucceed):

2018-12-14  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: Fix unnecessary object copies in WebCore/platform/graphics/avfoundation/objc/
        <https://webkit.org/b/192708>
        <rdar://problem/46735907>

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::toSample):
        - Make argument a const reference.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        - Update method signatures for implementation changes.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setAsset):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::loadedTimeRangesDidChange):
        - Make RetainPtr<> argument an rvalue reference and use WTFMove().
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksDidChange):
        - Make RetainPtr<> argument a const reference.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVolume):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setMuted):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setPreservesPitch):
        - Change for loop keys to be const references.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        - Update method signatures for implementation changes.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::fastSeekTimeForMediaTime):
        (WebCore::SourceBufferPrivateAVFObjC::seekToTime):
        - Make Mediatime arguments a const reference.

2018-12-14  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r233268): contents of an animated element inside overflow:hidden disappear
        https://bugs.webkit.org/show_bug.cgi?id=188655
        rdar://problem/43382687

        Reviewed by Antoine Quint.

        The logic that computes animation extent, used by backing store attachment code, failed
        to account for the behavior where a keyframe animation with a missing 0% keyframe uses
        the transform from the unanimated style. This resulted in the computed extent being wrong,
        which caused us to remove the layer's backing store in some scenarios.

        Fix both animation code paths to use the renderer style if the first keyframe doesn't
        contain a transform.

        Tests: compositing/backing/backing-store-attachment-empty-keyframe.html
               legacy-animation-engine/compositing/backing/backing-store-attachment-empty-keyframe.html

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::computeExtentOfTransformAnimation const):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::computeExtentOfTransformAnimation const):

2018-12-14  Chris Dumez  <cdumez@apple.com>

        [PSON] Stop exposing PolicyAction::Suspend to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=192701

        Reviewed by Brady Eidson.

        Drop PolicyAction::Suspend enum value and stop dealing with it in WebCore.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        * loader/FrameLoaderTypes.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        (WebCore::PolicyChecker::checkNewWindowPolicy):

2018-12-14  Youenn Fablet  <youenn@apple.com>

        IDB should store RTCCertificate
        https://bugs.webkit.org/show_bug.cgi?id=192599

        Reviewed by Brady Eidson.

        In case there is no script execution context, do not create a JS DOM wrapper for RTCCertificate.
        Instead, create an empty object so that the deserialization can still succeed.
        This should only impact IDB deserialization in the Network Process which does not need the actual JS DOM wrapper.

        Test: webrtc/certificates-indexeddb.html

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readTerminal):

2018-12-14  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Transition to logical margin types.
        https://bugs.webkit.org/show_bug.cgi?id=192699

        Reviewed by Antti Koivisto.

        This is in preparation for moving over to logical types.
        (This patch also transitions to singlular margin naming (verticalMargins -> VerticalMargin))

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        (WebCore::Layout::FormattingContext::validateGeometryConstraintsAfterLayout const):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::staticVerticalPositionForOutOfFlowPositioned):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedHorizontalMarginValue):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedVerticalMarginValue):
        * layout/FormattingContextQuirks.cpp:
        (WebCore::Layout::FormattingContext::Quirks::heightValueOfNearestContainingBlockWithFixedHeight):
        * layout/MarginTypes.h:
        (WebCore::Layout::VerticalMargin::usedValues const):
        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBlockBoxInformationIfNeeded):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginBefore const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginBeforeForAncestors const):
        (WebCore::Layout::BlockFormattingContext::precomputeVerticalPositionForFormattingRootIfNeeded const):
        (WebCore::Layout::hasPrecomputedMarginBefore):
        (WebCore::Layout::BlockFormattingContext::computeFloatingPosition const):
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats const):
        (WebCore::Layout::BlockFormattingContext::computeVerticalPositionForFloatClear const):
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginTop const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginTopForAncestors const): Deleted.
        (WebCore::Layout::hasPrecomputedMarginTop): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::instrinsicWidthConstraints):
        (WebCore::Layout::BlockFormattingContext::Geometry::estimatedMarginBefore):
        (WebCore::Layout::BlockFormattingContext::Geometry::estimatedMarginAfter):
        (WebCore::Layout::BlockFormattingContext::Geometry::estimatedMarginTop): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::estimatedMarginBottom): Deleted.
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::hasMarginBeforeQuirkValue):
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedHeight):
        (WebCore::Layout::BlockFormattingContext::Quirks::shouldIgnoreMarginBefore):
        (WebCore::Layout::hasMarginTopQuirkValue): Deleted.
        (WebCore::Layout::BlockFormattingContext::Quirks::shouldIgnoreMarginTop): Deleted.
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::isMarginBeforeCollapsedWithSibling):
        (WebCore::Layout::isMarginAfterCollapsedWithSibling):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginBeforeCollapsedWithParent):
        (WebCore::Layout::isMarginAfterCollapsedThrough):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::collapsedMarginBeforeFromFirstChild):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::nonCollapsedMarginBefore):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::computedNonCollapsedMarginBefore):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::computedNonCollapsedMarginAfter):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginBefore):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginAfter):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginAfterCollapsedWithParent):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginBeforeCollapsedWithParentMarginAfter):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::collapsedMarginAfterFromLastChild):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::nonCollapsedMarginAfter):
        (WebCore::Layout::isMarginTopCollapsedWithSibling): Deleted.
        (WebCore::Layout::isMarginBottomCollapsedWithSibling): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginTopCollapsedWithParent): Deleted.
        (WebCore::Layout::isMarginBottomCollapsedThrough): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::collapsedMarginTopFromFirstChild): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::nonCollapsedMarginTop): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::computedNonCollapsedMarginTop): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::computedNonCollapsedMarginBottom): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginTop): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginBottom): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginBottomCollapsedWithParent): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginTopCollapsedWithParentMarginBottom): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::collapsedMarginBottomFromLastChild): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::nonCollapsedMarginBottom): Deleted.
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::Box):
        (WebCore::Display::Box::marginBox const):
        (WebCore::Display::Box::nonCollapsedMarginBox const):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::rectWithMargin const):
        (WebCore::Display::Box::estimatedMarginBefore const):
        (WebCore::Display::Box::setEstimatedMarginBefore):
        (WebCore::Display::Box::top const):
        (WebCore::Display::Box::topLeft const):
        (WebCore::Display::Box::setVerticalMargin):
        (WebCore::Display::Box::marginBefore const):
        (WebCore::Display::Box::marginStart const):
        (WebCore::Display::Box::marginAfter const):
        (WebCore::Display::Box::marginEnd const):
        (WebCore::Display::Box::nonCollapsedMarginBefore const):
        (WebCore::Display::Box::nonCollapsedMarginAfter const):
        (WebCore::Display::Box::nonComputedMarginStart const):
        (WebCore::Display::Box::nonComputedMarginEnd const):
        (WebCore::Display::Box::estimatedMarginTop const): Deleted.
        (WebCore::Display::Box::setEstimatedMarginTop): Deleted.
        (WebCore::Display::Box::marginTop const): Deleted.
        (WebCore::Display::Box::marginLeft const): Deleted.
        (WebCore::Display::Box::marginBottom const): Deleted.
        (WebCore::Display::Box::marginRight const): Deleted.
        (WebCore::Display::Box::nonCollapsedMarginTop const): Deleted.
        (WebCore::Display::Box::nonCollapsedMarginBottom const): Deleted.
        (WebCore::Display::Box::nonComputedMarginLeft const): Deleted.
        (WebCore::Display::Box::nonComputedMarginRight const): Deleted.
        * layout/floats/FloatAvoider.cpp:
        (WebCore::Layout::FloatAvoider::setHorizontalConstraints):
        (WebCore::Layout::FloatAvoider::initialHorizontalPosition const):
        (WebCore::Layout::FloatAvoider::overflowsContainingBlock const):
        * layout/floats/FloatAvoider.h:
        (WebCore::Layout::FloatAvoider::marginBefore const):
        (WebCore::Layout::FloatAvoider::marginAfter const):
        (WebCore::Layout::FloatAvoider::marginStart const):
        (WebCore::Layout::FloatAvoider::marginEnd const):
        (WebCore::Layout::FloatAvoider::marginBoxWidth const):
        (WebCore::Layout::FloatAvoider::marginTop const): Deleted.
        (WebCore::Layout::FloatAvoider::marginBottom const): Deleted.
        (WebCore::Layout::FloatAvoider::marginLeft const): Deleted.
        (WebCore::Layout::FloatAvoider::marginRight const): Deleted.
        * layout/floats/FloatBox.cpp:
        (WebCore::Layout::FloatBox::rect const):
        (WebCore::Layout::FloatBox::horizontalPositionCandidate):
        (WebCore::Layout::FloatBox::verticalPositionCandidate):
        (WebCore::Layout::FloatBox::initialVerticalPosition const):
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::collectInlineContentForSubtree const):

2018-12-14  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Introduce VerticalMargin and HorizontalMargin types.
        https://bugs.webkit.org/show_bug.cgi?id=192692

        Reviewed by Antti Koivisto.

        This is in preparation for completing block margin collapsing.

        * WebCore.xcodeproj/project.pbxproj:
        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedHorizontalMarginValue):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedVerticalMarginValue):
        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::LayoutState):
        * layout/LayoutUnits.h:
        (WebCore::Layout::HeightAndMargin::usedMarginValues const): Deleted.
        * layout/MarginTypes.h: Added.
        (WebCore::Layout::VerticalMargin::nonCollapsedValues const):
        (WebCore::Layout::VerticalMargin::collapsedValues const):
        (WebCore::Layout::VerticalMargin::setCollapsedValues):
        (WebCore::Layout::VerticalMargin::VerticalMargin):
        (WebCore::Layout::VerticalMargin::usedValues const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedHeight):
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::Box):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::setHorizontalMargin):
        (WebCore::Display::Box::setVerticalMargin):
        (WebCore::Display::Box::setHorizontalNonComputedMargin):
        (WebCore::Display::Box::verticalMargin const):
        (WebCore::Display::Box::marginTop const):
        (WebCore::Display::Box::marginLeft const):
        (WebCore::Display::Box::marginBottom const):
        (WebCore::Display::Box::marginRight const):
        (WebCore::Display::Box::nonCollapsedMarginTop const):
        (WebCore::Display::Box::nonCollapsedMarginBottom const):
        (WebCore::Display::Box::setVerticalNonCollapsedMargin): Deleted.
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin const):

2018-12-14  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] Fix compilation warnings under Source/WebCore/platform/win
        https://bugs.webkit.org/show_bug.cgi?id=192693

        Reviewed by Ross Kirsling.

        No new tests, no behavior changes.

        * platform/win/ClipboardUtilitiesWin.cpp: Reordered ClipboardDataItem members to match with the initializer list.
        * platform/win/CursorWin.cpp:
        (WebCore::loadCursorByName): Changed the argument type of 'name' to const char*.
        * platform/win/DefWndProcWindowClass.cpp:
        (WebCore::defWndProcWindowClassName): Removed an unused variable 'atom'.
        * platform/win/DragImageWin.cpp: Removed an unused variable 'MinDragLabelWidthBeforeClip'.
        * platform/win/PasteboardWin.cpp:
        (WebCore::createGlobalImageFileDescriptor): Removed an unused variable 'hr'.
        (WebCore::createGlobalHDropContent): Use reinterpret_cast to suppress warning.
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent): Reordered the initializer list.
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::paint): Removed an unused variable 'itemCount'.
        * platform/win/PopupMenuWin.h: Marked override methods with 'override'.
        * platform/win/SSLKeyGeneratorWin.cpp:
        (WebCore::getSupportedKeySizes): Removed WebCore namespace prefix in WebCore namespace.
        (WebCore::signedPublicKeyAndChallengeString): Ditto.
        * platform/win/SearchPopupMenuDB.cpp:
        (WebCore::SearchPopupMenuDB::createPreparedStatement): Use ASSERT_UNUSED instead of ASSERT.
        * platform/win/StructuredExceptionHandlerSuppressor.h: Enclosed m_savedExceptionRegistration with #if defined(_M_IX86).
        * platform/win/SystemInfo.cpp:
        (WebCore::osVersionForUAString): Added default case.

2018-12-13  Youenn Fablet  <youenn@apple.com>

        RTCRtpTransceiver.stopped should be true when applying a remote description with the corresponding m section rejected
        https://bugs.webkit.org/show_bug.cgi?id=192685

        Reviewed by Eric Carlson.

        In case the remote description contains a rejected m section,
        the corresponding transceiver should be marked as stopped.
        Libwebrtc backend has that information so pipe it up to JS.

        Covered by updated WPT test.

        * Modules/mediastream/RTCRtpTransceiver.cpp:
        (WebCore::RTCRtpTransceiver::stopped const):
        * Modules/mediastream/RTCRtpTransceiver.h:
        (WebCore::RTCRtpTransceiver::stopped const): Deleted.
        * Modules/mediastream/RTCRtpTransceiverBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpTransceiverBackend.cpp:
        (WebCore::LibWebRTCRtpTransceiverBackend::stopped const):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpTransceiverBackend.h:

2018-12-13  Mark Lam  <mark.lam@apple.com>

        Ensure that StructureFlags initialization always starts with Base::StructureFlags.
        https://bugs.webkit.org/show_bug.cgi?id=192686

        Reviewed by Keith Miller.

        No new tests needed because there's no new functionality.  Just refactoring.

        * bindings/js/JSDOMWindowProperties.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GeneratePrototypeDeclaration):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestEnabledBySetting.h:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestGlobalObject.h:
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.h:
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.h:
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.h:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.h:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.h:
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.h:
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.h:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
        * bindings/scripts/test/JS/JSTestPluginInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.h:

2018-12-13  Ryosuke Niwa  <rniwa@webkit.org>

        Make HTMLConverter work across shadow boundaries
        https://bugs.webkit.org/show_bug.cgi?id=192640

        Reviewed by Wenson Hsieh.

        Made HTMLConverter work with shadow boundaries by replacing the various tree traversal functions.

        Tests: editing/mac/attributed-string/attributed-string-across-shadow-boundaries-1.html
               editing/mac/attributed-string/attributed-string-across-shadow-boundaries-2.html
               editing/mac/attributed-string/attributed-string-across-shadow-boundaries-3.html
               editing/mac/attributed-string/attributed-string-across-shadow-boundaries-4.html
               editing/mac/attributed-string/attributed-string-across-shadow-boundaries-5.html
               editing/mac/attributed-string/attributed-string-across-shadow-boundaries-with-style-1.html
               editing/mac/attributed-string/attributed-string-across-shadow-boundaries-with-style-2.html
               editing/mac/attributed-string/attributed-string-across-shadow-boundaries-with-style-3.html

        * dom/Position.cpp:
        (WebCore::commonShadowIncludingAncestor): Moved from markup.cpp to be shared between HTMLConverter
        and serializePreservingVisualAppearanceInternal.
        * dom/Position.h:
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::convert):
        (HTMLConverterCaches::propertyValueForNode):
        (HTMLConverterCaches::floatPropertyValueForNode):
        (HTMLConverter::_blockLevelElementForNode):
        (HTMLConverterCaches::colorPropertyValueForNode):
        (HTMLConverter::aggregatedAttributesForAncestors):
        (HTMLConverter::aggregatedAttributesForElementAndItsAncestors):
        (HTMLConverter::_processElement):
        (HTMLConverter::_traverseNode):
        (HTMLConverter::_traverseFooterNode):
        (HTMLConverterCaches::cacheAncestorsOfStartToBeConverted):
        (WebCore::attributedStringFromSelection):
        * editing/markup.cpp:
        (WebCore::commonShadowIncludingAncestor): Moved to Position.cpp.

2018-12-13  Youenn Fablet  <youenn@apple.com>

        Trying to play a media element synchronously after setting srcObject should succeed without user gesture
        https://bugs.webkit.org/show_bug.cgi?id=192679

        Reviewed by Eric Carlson.

        Check the srcObject mediaProvider value which is set synchronously.
        Covered by updated fast/mediastream/local-audio-playing-event.html.

        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::hasMediaStreamSrcObject const):

2018-12-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Support dropping contact card data (public.vcard) in editable content
        https://bugs.webkit.org/show_bug.cgi?id=192570
        <rdar://problem/35626913>

        Reviewed by Tim Horton.

        Adds support for accepting vCard (.vcf) data via drop on iOS. See below for more details.

        Tests:  DragAndDropTests.ExternalSourceContactIntoEditableAreas
                DragAndDropTests.ExternalSourceMapItemAndContactToUploadArea
                DragAndDropTests.ExternalSourceMapItemIntoEditableAreas
                WKAttachmentTestsIOS.InsertDroppedContactAsAttachment
                WKAttachmentTestsIOS.InsertDroppedMapItemAsAttachment

        * editing/WebContentReader.h:
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::attachmentForFilePath):

        Pull out logic to create an attachment from a file path out into a static helper. Use this in `readFilePaths`
        as well as `readVirtualContactFile`.

        (WebCore::WebContentReader::readFilePaths):
        (WebCore::WebContentReader::readVirtualContactFile):

        Add a pasteboard reading method that reads a vCard file (with an optional URL) as web content. The resulting
        fragment consists of either an anchor and an attachment element, or just an attachment element if the URL is
        empty. In the case of an `MKMapItem`, the URL is populated, so we generate both elements; when dragging a
        contact, there is no associated URL, so we only have an attachment.

        * platform/Pasteboard.h:
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::readPasteboardWebContentDataForType):

        Augment this to take the current `PasteboardItemInfo` as well; use this item information to get a file path for
        "public.vcard" data, which is then passed on to the web content reader. Additionally, by returning
        `ReaderResult::DidNotReadType` here, we prevent the web content reader from extracting the plain text contents
        of the vCard and dumping it as plain text in the editable element (this would otherwise happen, since
        "public.vcard" conforms to "public.text").

        (WebCore::Pasteboard::read):
        (WebCore::Pasteboard::readRespectingUTIFidelities):
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[NSItemProvider web_fileUploadContentTypes]):

        Prevent the "com.apple.mapkit.map-item" UTI from being considered as file upload content. This special case is
        tricky, since "com.apple.mapkit.map-item" conforms to "public.content", yet its corresponding data is only
        suitable for deserialization into an `MKMapItem`.

2018-12-13  Devin Rousso  <drousso@apple.com>

        Web Inspector: remove DOM.BackendNodeId and associated commands/events
        https://bugs.webkit.org/show_bug.cgi?id=192478

        Reviewed by Matt Baker.

        Removing unused code, so no change in functionality.

        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::backendNodeIdForNode): Deleted.
        (WebCore::InspectorDOMAgent::releaseBackendNodeIds): Deleted.
        (WebCore::InspectorDOMAgent::pushNodeByBackendIdToFrontend): Deleted.

2018-12-13  Chris Dumez  <cdumez@apple.com>

        [PSON] We should not need to navigate to 'about:blank' to suspend pages
        https://bugs.webkit.org/show_bug.cgi?id=192668
        <rdar://problem/46701466>

        Reviewed by Alex Christensen.

        * history/PageCache.cpp:
        (WebCore::PageCache::addIfCacheable):
        * history/PageCache.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::redirectReceived):
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::FrameLoader::setDocumentLoader):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        * loader/FrameLoaderTypes.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        * loader/PolicyChecker.h:

2018-12-13  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Inline WebVTT styles should override styles from Captions settings in System Preferences
        https://bugs.webkit.org/show_bug.cgi?id=192638

        Reviewed by Eric Carlson.

        It is currently not possible to override caption styles generated from System Preferences with inline
        WebVTT styles without adding !important. The reason for this is that the generated styles from
        System preferences are author styles which have higher priority than the inline WebVTT styles, which
        are user agent styles in the video user agent shadow tree. This can be fixed by moving the generated
        styles to the video user agent shadow tree. Inline WebVTT styles will then have higher priority since
        they are added after the generated styles. This patch also fixes a problem where inline styles could be
        added twice to the video user agent shadow root.

        Test: media/track/track-cue-css.html

        * dom/ExtensionStyleSheets.cpp:
        (WebCore::ExtensionStyleSheets::updateInjectedStyleSheetCache const):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::getDisplayTree):
        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::setCaptionsStyleSheetOverride):
        * page/Page.cpp:
        (WebCore::Page::setCaptionUserPreferencesStyleSheet):

2018-12-13  Jer Noble  <jer.noble@apple.com>

        Fix leak of AVPlayer boundaryTimeObserver object.
        https://bugs.webkit.org/show_bug.cgi?id=192674

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::performTaskAtMediaTime):

2018-12-13  Brent Fulgham  <bfulgham@apple.com>

        Don't attempt to animate invalid CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=192630
        <rdar://problem/46664433>

        Reviewed by Antoine Quint.

        Inherited animation properties can cause child elements to think they need to animate CSS properties
        that they do not support, leading to nullptr crashes.

        Recognize that CSSPropertyInvalid is a potential requested animation property, and handle it
        cleanly.

        Tests: animations/invalid-property-animation.html

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::calculateAnimatedValue):

2018-12-13  Timothy Hatcher  <timothy@apple.com>

        REGRESSION (r230064): Focus rings on webpages are fainter than in native UI.
        https://bugs.webkit.org/show_bug.cgi?id=192639
        rdar://problem/42669297

        Reviewed by Tim Horton.

        The focus ring color passed to CoreGraphics is expected to be opaque, since they
        will apply opacity when drawing (because opacity is normally animated).
        We were getting this by accident before when the old `RenderThemeMac::systemColor()`
        used the old `convertNSColorToColor()`, which ignored alpha on NSColor.
        Existing tests use fixed test focus ring color.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::colorFromPrimitiveValue const): Use RenderTheme singleton for `focusRingColor()`.
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawFocusIfNeededInternal): Ditto.
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::drawFocusRingAtTime): Use `CGContextStateSaver`.
        * platform/mac/ThemeMac.mm:
        (WebCore::drawCellFocusRingWithFrameAtTime): Force alpha to 1 on the focus ring color. Use `CGContextStateSaver`.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::paintFocusRing): Use RenderTheme singleton for `focusRingColor()`.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintAreaElementFocusRing): Ditto.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::focusRingColor const): Made const. Cache the result of `platformFocusRingColor()`.
        * rendering/RenderTheme.h: Made `focusRingColor()` a member function instead of static.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformFocusRingColor const): Force alpha to 1 on the focus ring color.
        (WebCore::RenderThemeMac::systemColor const): Use `focusRingColor()`, instead of caching color here.

2018-12-13  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Calculate width or height when constraints contain only the other
        https://bugs.webkit.org/show_bug.cgi?id=192632
        <rdar://problem/46665734>

        Unreviewed, remove an unneeded assert.

        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::dispatchMediaSampleToObservers):

2018-12-13  Zach Li  <zachli@apple.com>

        Update Credit Card AutoFill button icon
        https://bugs.webkit.org/show_bug.cgi?id=192637
        rdar://problem/46545006

        Reviewed by Chris Dumez.

        * css/html.css:
        (input::-webkit-credit-card-auto-fill-button):

2018-12-13  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Calculate width or height when constraints contain only the other
        https://bugs.webkit.org/show_bug.cgi?id=192632
        <rdar://problem/46665734>

        Reviewed by Youenn Fablet.

        Test: fast/mediastream/constraint-intrinsic-size.html

        * platform/graphics/RemoteVideoSample.cpp:
        (WebCore::RemoteVideoSample::create): Log errors with RELEASE_LOG_ERROR.

        * platform/graphics/cv/ImageTransferSessionVT.h:
        (WebCore::ImageTransferSessionVT::pixelFormat const): New.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::setSizeAndFrameRate): Replace current size with new size.
        (WebCore::RealtimeMediaSource::setSize): Don't notify about width and height.
        (WebCore::RealtimeMediaSource::size const): Use intrinsic size when necessary.
        (WebCore::RealtimeMediaSource::setIntrinsicSize): New.
        (WebCore::RealtimeMediaSource::remoteVideoSampleAvailable): Deleted.
        * platform/mediastream/RealtimeMediaSource.h:

        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::dispatchMediaSampleToObservers): No more remoteVideoSampleAvailable.

        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        (WebCore::DisplayCaptureSourceCocoa::settings): Report size correctly.
        (WebCore::DisplayCaptureSourceCocoa::frameSize const): Use intrinsicSize().
        (WebCore::DisplayCaptureSourceCocoa::emitFrame): No more remoteVideoSampleAvailable.
        (WebCore::DisplayCaptureSourceCocoa::setIntrinsicSize): Deleted.
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.h:
        (WebCore::DisplayCaptureSourceCocoa::intrinsicSize const): Deleted.

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource): Report intrinsic size.
        (WebCore::MockRealtimeVideoSource::setSizeAndFrameRate): Minor cleanup.
        (WebCore::MockRealtimeVideoSource::setSizeAndFrameRateWithPreset):  Report intrinsic size.
        (WebCore::MockRealtimeVideoSource::drawText): Don't render preset info for display source.
        * platform/mock/MockRealtimeVideoSource.h:

2018-12-13  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: loop variable is copied but only used as const reference in Document.cpp, Element.cpp
        <https://webkit.org/b/192661>
        <rdar://problem/46694035>

        Reviewed by Daniel Bates.

        * dom/Document.cpp:
        (WebCore::Document::updateIntersectionObservations):
        (WebCore::Document::notifyIntersectionObserversTimerFired):
        * dom/Element.cpp:
        (WebCore::Element::didMoveToNewDocument):
        (WebCore::Element::disconnectFromIntersectionObservers):
        - Change loop variables from `auto` to `const auto&` to prevent
          unnecessary copies of WeakPtr<IntersectionObserver> or
          struct IntersectionObserverRegistration objects.

2018-12-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [FreeType] Remove HarfBuzzFace
        https://bugs.webkit.org/show_bug.cgi?id=192589

        Reviewed by Michael Catanzaro.

        This was used to share the common implementation with the chromium port, but now that only freetype based ports
        use it, it can be removed and use hb_ft_face_create_cached() instead. We don't need the glyph cache either,
        since we are already caching glyphs in Font.

        * platform/FreeType.cmake: Remove HarfBuzzFaceCairo.cpp and HarfBuzzFace.cpp.
        * platform/graphics/FontPlatformData.h: Remove HarfBuzzFace member.
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp: Add missing include.
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::operator=): Remove m_harfBuzzFace handling.
        (WebCore::FontPlatformData::createOpenTypeMathHarfBuzzFont const): New funtction to create a hb_font_t for
        OpenType math.
        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:
        (WebCore::floatToHarfBuzzPosition): Moved from HarfBuzzFaceCairo.cpp.
        (WebCore::doubleToHarfBuzzPosition): Ditto.
        (WebCore::harfBuzzFontFunctions): Also moved from HarfBuzzFaceCairo.cpp, but implement get_nominal/variation
        functions when using HarfBuzz >= 1.2.3 and use Font::glyphForCharacter() to make it simpler.
        (WebCore::fontFeatures): Moved from HarfBuzzFaceCairo.cpp.
        (WebCore::findScriptForVerticalGlyphSubstitution): Moved from HarfBuzzFace.cpp.
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters): Create the HarfBuzz face and font here.
        * platform/graphics/harfbuzz/HarfBuzzFace.cpp: Removed.
        * platform/graphics/harfbuzz/HarfBuzzFace.h: Removed.
        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp: Removed.
        * platform/graphics/harfbuzz/HbUniquePtr.h:
        (WebCore::HbPtrDeleter<hb_face_t>::operator() const): Add deleter for hb_face_t.
        * platform/graphics/opentype/OpenTypeMathData.cpp:
        (WebCore::OpenTypeMathData::OpenTypeMathData): Use FontPlatformData::createOpenTypeMathHarfBuzzFont().

2018-12-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [FreeType] Add initial implementation of variation fonts
        https://bugs.webkit.org/show_bug.cgi?id=192151

        Reviewed by Michael Catanzaro.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::font): Remove platform ifdefs.
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::platformDataFromCustomData): Ditto.
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::isFixedWidth const):
        * platform/graphics/cairo/FontCustomPlatformData.h: Use RefPtr for cairo_font_face_t.
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::getFontPropertiesFromPattern): Helper function to get several font properties from the fontconfig
        pattern.
        (WebCore::FontCache::systemFallbackForCharacters): Use getFontPropertiesFromPattern().
        (WebCore::FontCache::createFontPlatformData): Pass FC_VARIABLE to the pattern and call buildVariationSettings()
        before creating the FontPlatformData to set FC_FONT_VARIATIONS on the pattern.
        (WebCore::defaultVariationValues): Parse font variations table.
        (WebCore::buildVariationSettings): Build a font variations string from the settings that can be passed to cairo.
        * platform/graphics/freetype/FontCacheFreeType.h: Added.
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData): Use RefPtr and make freeTypeFaceKey global.
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData): Remove explicit destroy.
        (WebCore::defaultFontconfigOptions): Moved here from FontCacheFreeType.
        (WebCore::FontCustomPlatformData::fontPlatformData): Call buildVariationSettings() before creating the
        FontPlatformData to set FC_FONT_VARIATIONS on the pattern.
        (WebCore::FontCustomPlatformData::supportsFormat): Add variation formats.
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::setCairoFontOptionsFromFontConfigPattern): Call cairo_font_options_set_variations() with the
        FC_FONT_VARIATIONS value from the pattern.
        (WebCore::FontPlatformData::FontPlatformData): Use a single constructor that always receives a valid fontconfig
        pattern.
        (WebCore::FontPlatformData::fcPattern const): Return the fontconfig pattern.
        (WebCore::FontPlatformData::platformIsEqual const): Update the condition now that m_pattern can't be nullptr.
        (WebCore::FontPlatformData::buildScaledFont): Use m_pattern unconditionally.
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::Font::platformCreateScaledFont const): Update it to use the new FontPlatformData constructor.
        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:
        (WebCore::HarfBuzzFace::createFont): Pass variations to HarfBuzz.
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontCustomPlatformData.h:

2018-12-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang][WebKitLegacy] WebFrame.cpp: warning: delete called on non-final 'WebFrame' that has virtual functions but non-virtual destructor [-Wdelete-non-virtual-dtor]
        https://bugs.webkit.org/show_bug.cgi?id=192618

        Reviewed by Alex Christensen.

        No new tests, no behavior changes.

        * platform/win/PopupMenuWin.h:
        * platform/win/WCDataObject.cpp:
        * platform/win/WCDataObject.h:

2018-12-12  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r238090): CAPCHA UI jumps to the wrong location
        https://bugs.webkit.org/show_bug.cgi?id=192651
        rdar://problem/46531919

        Reviewed by Zalan Bujtas.
        
        When a RenderLayer becomes non-composited because of a style change, we need to set a dirty
        bit to say that descendants need their geometry updated (because they now have to
        compute their positions relative to a different ancestor). This wasn't happening
        in the layerStyleChanged() code path.
        
        In the code path that did do this correctly (in the computeCompositingRequirements() tree walk),
        we can address a FIXME and only dirty direct children, not all descendants (that code was
        written before the child-only dirty bit existed).

        Test: compositing/geometry/update-child-geometry-on-compositing-change.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::layerStyleChanged):

2018-12-13  Ryosuke Niwa  <rniwa@webkit.org>

        Make TextInputController.legacyAttributedString take DOM nodes and offsets
        https://bugs.webkit.org/show_bug.cgi?id=192653

        Reviewed by Wenson Hsieh.

        No new tests since there should be no observable behavioral change other than
        TextInputController API in DumpRenderTree.

        * editing/cocoa/HTMLConverter.h:
        * editing/cocoa/HTMLConverter.mm:
        (WebCore::attributedStringFromSelection):
        (WebCore::attributedStringBetweenStartAndEnd): Added.

2018-12-12  Ryosuke Niwa  <rniwa@webkit.org>

        Fix macOS builds after r239145.

        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:

2018-12-12  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r238357): Pins on Yelp map disappear
        https://bugs.webkit.org/show_bug.cgi?id=192597
        rdar://problem/46578285

        Reviewed by Zalan Bujtas.

        RenderLayerCompositor::updateBackingAndHierarchy() had a bug where if a RenderLayer gained
        a negative z-order child (triggering creation of a foreground layer), we'd fail to 
        call the "setChildren()" with the vector containing that foreground layer.
        
        When updateBackingAndHierarchy() stops visiting descendants because none are composited,
        it may still have to update the child list with the foreground layer, so make sure
        the code handles this case.

        Tests: compositing/z-order/add-negative-z-child.html
               compositing/z-order/rebuild-sibling-of-layer-with-foreground-layer.html

        * rendering/RenderLayer.cpp:
        (WebCore::outputPaintOrderTreeRecursive):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBackingAndHierarchy):

2018-12-12  YUHAN WU  <yuhan_wu@apple.com>

        Implement non-timeslice mode encoding for MediaRecorder
        https://bugs.webkit.org/show_bug.cgi?id=192069
        <rdar://problem/46443290>

        Reviewed by Eric Carlson.

        Implement the encoding for non-timeslice mode of MediaRecorder.
        It only supports to record MP4 file through H264 and AAC encoding, we will need to support more MIME types and encoding methods.
        Add a API in internals to allow testings to turn on the mock source.

        Test: http/wpt/mediarecorder/MediaRecorder-AV-audio-video-dataavailable.html

        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::create):
        (WebCore::MediaRecorder::setCustomPrivateRecorderCreator):
        (WebCore::MediaRecorder::getPrivateImpl):
        (WebCore::MediaRecorder::MediaRecorder):
        (WebCore::MediaRecorder::stopRecording):
        (WebCore::MediaRecorder::stopRecordingInternal):
        (WebCore::MediaRecorder::createRecordingDataBlob):
        (WebCore::MediaRecorder::scheduleDeferredTask):
        * Modules/mediarecorder/MediaRecorder.h:
        * Modules/mediarecorder/MediaRecorder.idl:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediarecorder/MediaRecorderPrivate.h:
        (WebCore::MediaRecorderPrivate::stopRecording):
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp: Added.
        (WebCore::MediaRecorderPrivateAVFImpl::create):
        (WebCore::MediaRecorderPrivateAVFImpl::MediaRecorderPrivateAVFImpl):
        (WebCore::MediaRecorderPrivateAVFImpl::sampleBufferUpdated):
        (WebCore::MediaRecorderPrivateAVFImpl::audioSamplesAvailable):
        (WebCore::MediaRecorderPrivateAVFImpl::stopRecording):
        (WebCore::MediaRecorderPrivateAVFImpl::fetchData):
        (WebCore::MediaRecorderPrivateAVFImpl::mimeType):
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h: Added.
        * platform/mediarecorder/MediaRecorderPrivateMock.cpp:
        (WebCore::MediaRecorderPrivateMock::fetchData):
        (WebCore::MediaRecorderPrivateMock::mimeType):
        * platform/mediarecorder/MediaRecorderPrivateMock.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h: added.
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm: Added.
        (WebCore::MediaRecorderPrivateWriter::clear):
        (WebCore::MediaRecorderPrivateWriter::setupWriter):
        (WebCore::MediaRecorderPrivateWriter::setVideoInput):
        (WebCore::MediaRecorderPrivateWriter::setAudioInput):
        (WebCore::copySampleBufferWithCurrentTimeStamp):
        (WebCore::MediaRecorderPrivateWriter::appendVideoSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::appendAudioSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::stopRecording):
        * testing/Internals.cpp:
        (WebCore::createRecorderMockSource):
        (WebCore::Internals::setCustomPrivateRecorderCreator):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-12-12  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Vertex buffers and WebGPUInputState
        https://bugs.webkit.org/show_bug.cgi?id=192611

        Reviewed by Dean Jackson.

        Test: webgpu/vertex-buffer-triangle-strip.html

        Basic implementation of vertex buffers with Metal shading language in WebGPU. In 
        WebGPURenderPipelineDescriptor, refactor to match updated shader stage structure and add 
        WebGPUInputStateDescriptor. Also implement WebGPURenderPassEncoder::setVertexBuffers.

        Add symbols and files for WebGPUIndexFormat, WebGPUInputStateDescriptor, WebGPUInputStepMode, 
        WebGPUVertexAttributeDescriptor, WebGPUVertexFormat, WebGPUVertexInputDescriptor:
        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

        Add and implement interfaces and dictionaries for WebGPUInputState:
        * Modules/webgpu/WebGPUBuffer.cpp:
        (WebCore::WebGPUBuffer::WebGPUBuffer):
        * Modules/webgpu/WebGPUBuffer.h:
        (WebCore::WebGPUBuffer::buffer const): Added getter for backing GPUBuffer.
        * Modules/webgpu/WebGPUBufferDescriptor.h:
        * Modules/webgpu/WebGPUBufferDescriptor.idl: Moving WebGPUBufferUsage out into its own IDL.
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUIndexFormat.h: Added.
        * Modules/webgpu/WebGPUIndexFormat.idl: Added. 
        * Modules/webgpu/WebGPUInputStateDescriptor.h: Added.
        * Modules/webgpu/WebGPUInputStateDescriptor.idl: Added.
        * Modules/webgpu/WebGPUInputStepMode.h: Added.
        * Modules/webgpu/WebGPUInputStepMode.idl: Added.
        * Modules/webgpu/WebGPUVertexAttributeDescriptor.h: Added.
        * Modules/webgpu/WebGPUVertexAttributeDescriptor.idl: Added.
        * Modules/webgpu/WebGPUVertexFormat.h: Added.
        * Modules/webgpu/WebGPUVertexFormat.idl: Added.
        * Modules/webgpu/WebGPUVertexInputDescriptor.h: Added.
        * Modules/webgpu/WebGPUVertexInputDescriptor.idl: Added.
        * platform/graphics/gpu/GPUInputStateDescriptor.h: Added.
        * platform/graphics/gpu/GPURenderPassEncoder.h: Added.
        * platform/graphics/gpu/GPURenderPipelineDescriptor.h: Added.
        * platform/graphics/gpu/GPUVertexAttributeDescriptor.h: Added.
        * platform/graphics/gpu/GPUVertexInputDescriptor.h: Added.

        Refactor to support updated structure of pipeline descriptor in sketch IDL:
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::validateAndConvertPipelineStage):
        (WebCore::WebGPUDevice::createRenderPipeline const):
        * Modules/webgpu/WebGPUPipelineDescriptorBase.h:
        * Modules/webgpu/WebGPUPipelineDescriptorBase.idl:
        * Modules/webgpu/WebGPUPipelineStageDescriptor.h:
        * Modules/webgpu/WebGPUPipelineStageDescriptor.idl:
        * Modules/webgpu/WebGPURenderPipelineDescriptor.h:
        * Modules/webgpu/WebGPURenderPipelineDescriptor.idl:
        * Modules/webgpu/WebGPUShaderStage.*: Removed.

        Add and implement setVertexBuffers:
        * Modules/webgpu/WebGPURenderPassEncoder.cpp:
        (WebCore::WebGPURenderPassEncoder::setVertexBuffers): Added. 
        * Modules/webgpu/WebGPURenderPassEncoder.h:
        * Modules/webgpu/WebGPURenderPassEncoder.idl: 
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::GPURenderPassEncoder::setVertexBuffers):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::setInputStateForPipelineDescriptor):
        (WebCore::GPURenderPipeline::create):

2018-12-12  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r237565): >20 Find in Page highlights in one tile results in a single giant highlight
        https://bugs.webkit.org/show_bug.cgi?id=192642
        <rdar://problem/46498246>

        Reviewed by Geoffrey Garen.

        No new tests; adjusted an existing test instead.

        * platform/graphics/PathUtilities.cpp:
        (WebCore::PathUtilities::pathsWithShrinkWrappedRects):
        Instead of uniting when we fail to shrink-wrap, just return the original rects.
        This seems like a more reasonable default in most cases.

2018-12-12  Vivek Seth  <v_seth@apple.com>

        HTTPS Upgrade: Figure out if/how to tell clients that the HTTPS upgrade happened
        https://bugs.webkit.org/show_bug.cgi?id=192375
        <rdar://problem/45851159>

        Reviewed by Chris Dumez.

        Use simulated redirect to tell clients that HTTPS Upgrade happened.

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::syntheticRedirectResponse):
        * platform/network/ResourceResponseBase.h:
        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::synthesizeRedirectResponseIfNecessary):

2018-12-12  Chris Dumez  <cdumez@apple.com>

        Add a preference to enable / disable devicemotion and deviceorientation events
        https://bugs.webkit.org/show_bug.cgi?id=192631
        <rdar://problem/46646244>

        Reviewed by Geoffrey Garen.

        Add setting to toggle support for the deviceorientation / devicemotion events:
        - https://w3c.github.io/deviceorientation/

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        * page/Settings.yaml:

2018-12-11  Ryosuke Niwa  <rniwa@webkit.org>

        Make HTMLConverter take two Positions in preparation to make it work with shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=192613

        Reviewed by Darin Adler.

        This patch makes HTMLConverter store two Position's instead of a Range so that HTMLConverter can work with
        a selection which spans across shadow boundaries in the future.

        No new tests since there should be no observable behavioral change.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::writeSelectionToPasteboard): Uses the newly introduced writeSelectionToPasteboard.
        (WebCore::Editor::writeSelection): Ditto.
        * editing/cocoa/HTMLConverter.h:
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::HTMLConverter): Now takes two Position's.
        (HTMLConverter::convert): Updated to work with Position's.
        (HTMLConverter::_processText): Ditto.
        (HTMLConverter::_traverseNode): Ditto.
        (HTMLConverter::_traverseFooterNode): Ditto.
        (HTMLConverterCaches::cacheAncestorsOfStartToBeConverted): Ditto.
        (WebCore::attributedStringFromRange): Ditto.
        (WebCore::attributedStringFromSelection): Added. For now, we first create a Range via toNormalizedRange
        in order to preserve the exact behavior.

2018-12-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed manual rollout of r239100-r239102 and r239116
        https://bugs.webkit.org/show_bug.cgi?id=192151
        <rdar://problem/46655586>

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::font):
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::platformDataFromCustomData):
        * platform/FreeType.cmake:
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::isFixedWidth const): Deleted.
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::systemFallbackForCharacters):
        (WebCore::FontCache::createFontPlatformData):
        (WebCore::getFontPropertiesFromPattern): Deleted.
        (WebCore::defaultVariationValues): Deleted.
        (WebCore::buildVariationSettings): Deleted.
        * platform/graphics/freetype/FontCacheFreeType.h: Removed.
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::FontCustomPlatformData::supportsFormat):
        (WebCore::defaultFontconfigOptions): Deleted.
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::setCairoFontOptionsFromFontConfigPattern):
        (WebCore::getDefaultFontconfigOptions):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::harfBuzzFace const):
        (WebCore::FontPlatformData::platformIsEqual const):
        (WebCore::FontPlatformData::buildScaledFont):
        (WebCore::FontPlatformData::fcPattern const): Deleted.
        (WebCore::FontPlatformData::createOpenTypeMathHarfBuzzFont const): Deleted.
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::Font::platformCreateScaledFont const):
        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:
        (WebCore::fontFeatures):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        (WebCore::floatToHarfBuzzPosition): Deleted.
        (WebCore::doubleToHarfBuzzPosition): Deleted.
        (WebCore::harfBuzzFontFunctions): Deleted.
        (WebCore::findScriptForVerticalGlyphSubstitution): Deleted.
        * platform/graphics/harfbuzz/HarfBuzzFace.cpp: Added.
        (WebCore::HarfBuzzFace::CacheEntry::CacheEntry):
        (WebCore::HarfBuzzFace::CacheEntry::~CacheEntry):
        (WebCore::HarfBuzzFace::cache):
        (WebCore::HarfBuzzFace::HarfBuzzFace):
        (WebCore::HarfBuzzFace::~HarfBuzzFace):
        (WebCore::findScriptForVerticalGlyphSubstitution):
        (WebCore::HarfBuzzFace::setScriptForVerticalGlyphSubstitution):
        * platform/graphics/harfbuzz/HarfBuzzFace.h: Added.
        (WebCore::HarfBuzzFace::CacheEntry::create):
        (WebCore::HarfBuzzFace::CacheEntry::face):
        (WebCore::HarfBuzzFace::CacheEntry::glyphCache):
        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp: Added.
        (WebCore::floatToHarfBuzzPosition):
        (WebCore::doubleToHarfBuzzPosition):
        (WebCore::CairoGetGlyphWidthAndExtents):
        (WebCore::harfBuzzGetGlyph):
        (WebCore::harfBuzzGetGlyphHorizontalAdvance):
        (WebCore::harfBuzzGetGlyphHorizontalOrigin):
        (WebCore::harfBuzzGetGlyphExtents):
        (WebCore::harfBuzzCairoTextGetFontFuncs):
        (WebCore::harfBuzzCairoGetTable):
        (WebCore::HarfBuzzFace::createFace):
        (WebCore::HarfBuzzFace::createFont):
        * platform/graphics/harfbuzz/HbUniquePtr.h:
        (WebCore::HbPtrDeleter<hb_face_t>::operator() const): Deleted.
        * platform/graphics/opentype/OpenTypeMathData.cpp:
        (WebCore::OpenTypeMathData::OpenTypeMathData):
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):

2018-12-12  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix Windows Cairo build after r239100.

        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):

2018-12-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] A few API tests are failing after r239086
        https://bugs.webkit.org/show_bug.cgi?id=192608

        Reviewed by Zalan Bujtas.

        These test failures were caused by a missing Vector size check in `Pasteboard::readFilePaths` before accessing
        the first item. Fix this by adding a helper method on PasteboardItemInfo to grab the file path for the highest
        fidelity pasteboard item (returning the null string if there are none), and use this in a few places that grab
        the highest fidelity path using Vector::first().

        While `Pasteboard::readRespectingUTIFidelities` does have a bounds check before accessing the list of paths,
        this patch still replaces it with a call to `pathForHighestFidelityItem()`, so that the intent is more clear.

        * platform/PasteboardItemInfo.h:
        (WebCore::PasteboardItemInfo::pathForHighestFidelityItem const):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::readRespectingUTIFidelities):
        (WebCore::Pasteboard::readFilePaths):

2018-12-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WPE build after r239101.

        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp: Include <hb-ot.h>

2018-12-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [FreeType] Remove HarfBuzzFace
        https://bugs.webkit.org/show_bug.cgi?id=192589

        Reviewed by Michael Catanzaro.

        This was used to share the common implementation with the chromium port, but now that only freetype based ports
        use it, it can be removed and use hb_ft_face_create_cached() instead. We don't need the glyph cache either,
        since we are already caching glyphs in Font.

        * platform/FreeType.cmake: Remove HarfBuzzFaceCairo.cpp and HarfBuzzFace.cpp.
        * platform/graphics/FontPlatformData.h: Remove HarfBuzzFace member.
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp: Add missing include.
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::operator=): Remove m_harfBuzzFace handling.
        (WebCore::FontPlatformData::createOpenTypeMathHarfBuzzFont const): New funtction to create a hb_font_t for
        OpenType math.
        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:
        (WebCore::floatToHarfBuzzPosition): Moved from HarfBuzzFaceCairo.cpp.
        (WebCore::doubleToHarfBuzzPosition): Ditto.
        (WebCore::harfBuzzFontFunctions): Also moved from HarfBuzzFaceCairo.cpp, but implement get_nominal/variation
        functions when using HarfBuzz >= 1.2.3 and use Font::glyphForCharacter() to make it simpler.
        (WebCore::fontFeatures): Moved from HarfBuzzFaceCairo.cpp.
        (WebCore::findScriptForVerticalGlyphSubstitution): Moved from HarfBuzzFace.cpp.
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters): Create the HarfBuzz face and font here.
        * platform/graphics/harfbuzz/HarfBuzzFace.cpp: Removed.
        * platform/graphics/harfbuzz/HarfBuzzFace.h: Removed.
        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp: Removed.
        * platform/graphics/harfbuzz/HbUniquePtr.h:
        (WebCore::HbPtrDeleter<hb_face_t>::operator() const): Add deleter for hb_face_t.
        * platform/graphics/opentype/OpenTypeMathData.cpp:
        (WebCore::OpenTypeMathData::OpenTypeMathData): Use FontPlatformData::createOpenTypeMathHarfBuzzFont().

2018-12-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [FreeType] Add initial implementation of variation fonts
        https://bugs.webkit.org/show_bug.cgi?id=192151

        Reviewed by Michael Catanzaro.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::font): Remove platform ifdefs.
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::platformDataFromCustomData): Ditto.
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::isFixedWidth const):
        * platform/graphics/cairo/FontCustomPlatformData.h: Use RefPtr for cairo_font_face_t.
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::getFontPropertiesFromPattern): Helper function to get several font properties from the fontconfig
        pattern.
        (WebCore::FontCache::systemFallbackForCharacters): Use getFontPropertiesFromPattern().
        (WebCore::FontCache::createFontPlatformData): Pass FC_VARIABLE to the pattern and call buildVariationSettings()
        before creating the FontPlatformData to set FC_FONT_VARIATIONS on the pattern.
        (WebCore::defaultVariationValues): Parse font variations table.
        (WebCore::buildVariationSettings): Build a font variations string from the settings that can be passed to cairo.
        * platform/graphics/freetype/FontCacheFreeType.h: Added.
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData): Use RefPtr and make freeTypeFaceKey global.
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData): Remove explicit destroy.
        (WebCore::defaultFontconfigOptions): Moved here from FontCacheFreeType.
        (WebCore::FontCustomPlatformData::fontPlatformData): Call buildVariationSettings() before creating the
        FontPlatformData to set FC_FONT_VARIATIONS on the pattern.
        (WebCore::FontCustomPlatformData::supportsFormat): Add variation formats.
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::setCairoFontOptionsFromFontConfigPattern): Call cairo_font_options_set_variations() with the
        FC_FONT_VARIATIONS value from the pattern.
        (WebCore::FontPlatformData::FontPlatformData): Use a single constructor that always receives a valid fontconfig
        pattern.
        (WebCore::FontPlatformData::fcPattern const): Return the fontconfig pattern.
        (WebCore::FontPlatformData::platformIsEqual const): Update the condition now that m_pattern can't be nullptr.
        (WebCore::FontPlatformData::buildScaledFont): Use m_pattern unconditionally.
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::Font::platformCreateScaledFont const): Update it to use the new FontPlatformData constructor.
        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:
        (WebCore::HarfBuzzFace::createFont): Pass variations to HarfBuzz.
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontCustomPlatformData.h:

2018-12-11  Justin Michaud  <justin_michaud@apple.com>

        Implement feature flag for CSS Typed OM
        https://bugs.webkit.org/show_bug.cgi?id=192610

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/js/JSTypedOMCSSStyleValueCustom.cpp:
        * css/typedom/StylePropertyMapReadOnly.h:
        * css/typedom/StylePropertyMapReadOnly.idl:
        * css/typedom/TypedOMCSSImageValue.h:
        * css/typedom/TypedOMCSSImageValue.idl:
        * css/typedom/TypedOMCSSNumericValue.h:
        * css/typedom/TypedOMCSSNumericValue.idl:
        * css/typedom/TypedOMCSSStyleValue.h:
        * css/typedom/TypedOMCSSStyleValue.idl:
        * css/typedom/TypedOMCSSUnitValue.h:
        * css/typedom/TypedOMCSSUnitValue.idl:
        * css/typedom/TypedOMCSSUnparsedValue.h:
        * css/typedom/TypedOMCSSUnparsedValue.idl:
        * features.json:
        * html/ImageBitmap.cpp:
        * html/ImageBitmap.h:
        * html/canvas/CanvasDrawImage.idl:
        * html/canvas/CanvasFillStrokeStyles.idl:
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        * html/canvas/CanvasRenderingContext2DBase.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildAction):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setCSSTypedOMEnabled):
        (WebCore::RuntimeEnabledFeatures::cssTypedOMEnabled const):
        * page/WindowOrWorkerGlobalScope.idl:

2018-12-10  Ryosuke Niwa  <rniwa@webkit.org>

        connectedCallback is invoked during the removal of the element inside another element's connectedCallback
        https://bugs.webkit.org/show_bug.cgi?id=183586
        <rdar://problem/38403504>

        Reviewed by Frédéric Wang.

        Align WebKit's behavior with Chrome/Firefox with regards to https://github.com/w3c/webcomponents/issues/760

        After much discussion, it's unclear that there is a clear path forward to fixing the oddness that
        the presence of a custom element reaction changes the timing at which another reaction callback gets invoked.
        So matching Chrome/Firefox behaviors in this case seems the path of the least resistance to interoperability.

        Namely, this patch makes WebKit not insert a custom element to the appropriate element queue when the element
        does not have a matching reaction callback. Put it another way, steps 3-5 in would be done before step 6 in:
        https://html.spec.whatwg.org/multipage/custom-elements.html#enqueue-a-custom-element-callback-reaction
            1. Let definition be element's custom element definition.
            2. Let callback be the value of the entry in definition's lifecycle callbacks with key callbackName.
            3. If callback is null, then return
            4. If callbackName is "attributeChangedCallback", then:
                1. Let attributeName be the first element of args.
                2. If definition's observed attributes does not contain attributeName, then return.
            5. Add a new callback reaction to element's custom element reaction queue, with callback function callback
               and arguments args.
            6. Enqueue an element on the appropriate element queue given element.

        Test: fast/custom-elements/enqueue-custom-element-callback-reactions-inside-another-callback.html

        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionQueue::enqueueElementUpgrade):
        (WebCore::CustomElementReactionQueue::enqueueConnectedCallbackIfNeeded):
        (WebCore::CustomElementReactionQueue::enqueueDisconnectedCallbackIfNeeded):
        (WebCore::CustomElementReactionQueue::enqueueAdoptedCallbackIfNeeded):
        (WebCore::CustomElementReactionQueue::enqueueAttributeChangedCallbackIfNeeded):
        (WebCore::CustomElementReactionQueue::enqueuePostUpgradeReactions):
        (WebCore::CustomElementReactionQueue::enqueueElementOnAppropriateElementQueue): Renamed from ensureCurrentQueue.
        * dom/CustomElementReactionQueue.h:

2018-12-11  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Implement WebGPUBuffer, and some nullibility consistency in WebGPU
        https://bugs.webkit.org/show_bug.cgi?id=192516

        Reviewed by Dean Jackson.

        Test: webgpu/buffers.html

        Enable basic creation of WebGPUBuffers, and fix nullability inconsitencies in WebGPU implementation.

        Add necessary symbols and files for Web/GPUBuffer, Web/GPUBufferUsage, and Web/GPUBufferDescriptor:
        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

        * Modules/webgpu/WebGPUBuffer.cpp: Added.
        (WebCore::WebGPUBuffer::create):
        (WebCore::WebGPUBuffer::WebGPUBuffer):
        * Modules/webgpu/WebGPUBuffer.h: Added.
        (WebCore::WebGPUBuffer::mapping const):
        (WebCore::WebGPUBuffer::unmap): Unimplemented stub, for now, as Metal equivalent is unclear.
        (WebCore::WebGPUBuffer::destroy): Unimplemented stub.
        * Modules/webgpu/WebGPUBuffer.idl: Added.
        * Modules/webgpu/WebGPUBufferDescriptor.h: Added.
        * Modules/webgpu/WebGPUBufferDescriptor.idl: Added.
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createBuffer const): Added.
        * platform/graphics/gpu/GPUBuffer.h:
        (WebCore::GPUBuffer::platformBuffer const):
        (WebCore::GPUBuffer::mapping const):
        * platform/graphics/gpu/GPUBufferDescriptor.h: Added.
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::createBuffer const): Added.
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm: Added.
        (WebCore::GPUBuffer::create): Attempt to create a page-aligned Gigacage to back the GPUBuffer's ArrayBuffer. 
        (WebCore::GPUBuffer::GPUBuffer):
        (WebCore::GPUBuffer::~GPUBuffer): Dereference mapped ArrayBuffer first.

        Small benign edits, most to make nullability more consistent in WebGPU classes:
        * Modules/webgpu/WebGPUCommandBuffer.cpp:
        (WebCore::WebGPUCommandBuffer::create):
        (WebCore::WebGPUCommandBuffer::beginRenderPass):
        * Modules/webgpu/WebGPUCommandBuffer.h:
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::create):
        (WebCore::WebGPUDevice::WebGPUDevice):
        (WebCore::WebGPUDevice::createShaderModule const):
        (WebCore::WebGPUDevice::createRenderPipeline const):
        (WebCore::WebGPUDevice::createCommandBuffer const):
        * Modules/webgpu/WebGPUDevice.h:
        (WebCore::WebGPUDevice::device const):
        * Modules/webgpu/WebGPUDevice.idl:
        * Modules/webgpu/WebGPUQueue.cpp:
        (WebCore::WebGPUQueue::create):
        * Modules/webgpu/WebGPURenderPassEncoder.cpp:
        (WebCore::WebGPURenderPassEncoder::create):
        * Modules/webgpu/WebGPURenderPassEncoder.h:
        * Modules/webgpu/WebGPUShaderModule.cpp:
        (WebCore::WebGPUShaderModule::create):
        (WebCore::WebGPUShaderModule::WebGPUShaderModule):
        * Modules/webgpu/WebGPUShaderModule.h:
        (WebCore::WebGPUShaderModule::module const):
        * Modules/webgpu/WebGPUSwapChain.idl: Sync with IDL changes.
        * Modules/webgpu/WebGPUTexture.cpp:
        (WebCore::WebGPUTexture::create):
        (WebCore::WebGPUTexture::createDefaultTextureView):
        * Modules/webgpu/WebGPUTextureView.cpp:
        (WebCore::WebGPUTextureView::create):
        * Modules/webgpu/WebGPUTextureView.h:
        * platform/graphics/gpu/cocoa/GPUQueueMetal.mm:
        (WebCore::GPUQueue::create):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::GPURenderPipeline::create):
        * platform/graphics/gpu/cocoa/GPUShaderModuleMetal.mm:
        (WebCore::GPUShaderModule::create):
        * platform/graphics/gpu/cocoa/GPUSwapChainMetal.mm:
        (WebCore::GPUSwapChain::setDevice):
        * platform/graphics/gpu/cocoa/GPUTextureMetal.mm:
        (WebCore::GPUTexture::GPUTexture):

2018-12-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] Fix warning -Wmissing-field-initializers
        https://bugs.webkit.org/show_bug.cgi?id=192584

        Reviewed by Yusuke Suzuki.

        Initialize a struct with '{ }' instead of '= {0}'.

        No new tests, no behavior changes.

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::lastResortFallbackFont):
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::createWindow):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::setFileDescriptorData):
        (WebCore::setFileContentData):
        (WebCore::setUCharData):
        (WebCore::setUtf8Data):
        (WebCore::setCFData):
        * platform/win/CursorWin.cpp:
        (WebCore::createSharedCursor):
        * platform/win/DefWndProcWindowClass.cpp:
        (WebCore::registerClass):
        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageIconForCachedImageFilename):
        * platform/win/PasteboardWin.cpp:
        (WebCore::writeURL):
        (WebCore::Pasteboard::writeString):
        (WebCore::Pasteboard::writeRangeToDataObject):
        (WebCore::Pasteboard::writePlainTextToDataObject):
        (WebCore::writeFileToDataObject):
        (WebCore::Pasteboard::writeMarkup):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::show):
        * platform/win/SSLKeyGeneratorWin.cpp:
        (WebCore::WebCore::signedPublicKeyAndChallengeString):

2018-12-11  Jer Noble  <jer.noble@apple.com>

        Globally namespaced objects shouldn't use framework-prefixed names
        https://bugs.webkit.org/show_bug.cgi?id=192600

        Reviewed by Eric Carlson.

        Rename CMSampleBufferIs... -> isCMSampleBuffer...

        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::isCMSampleBufferRandomAccess):
        (WebCore::isCMSampleBufferNonDisplaying):
        (WebCore::MediaSampleAVFObjC::flags const):
        (WebCore::CMSampleBufferIsRandomAccess): Deleted.
        (WebCore::CMSampleBufferIsNonDisplaying): Deleted.

2018-12-11  Brent Fulgham  <bfulgham@apple.com>

        Don't attempt to compute animated values when there is no relevant animation
        https://bugs.webkit.org/show_bug.cgi?id=192591
        <rdar://problem/34336946>

        Reviewed by Dean Jackson.

        Check if the property is supposed to be animated, or has animatable features, before
        attempting to calculate the current animated value.

        Test: svg/animations/avoid-calculating-for-non-animating-elements.html

        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::calculateAnimatedValue):

2018-12-11  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix typos in console log from r239087.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):

2018-12-11  Tim Horton  <timothy_horton@apple.com>

        WebCore shouldn't have a Objective-C class named NSCursor
        https://bugs.webkit.org/show_bug.cgi?id=192602
        <rdar://problem/46615532>

        Reviewed by Wenson Hsieh.

        * platform/ios/wak/WAKAppKitStubs.h:
        * platform/ios/wak/WAKAppKitStubs.m:
        (+[NSCursor setHiddenUntilMouseMoves:]): Deleted.
        Get rid of the class.
        Also remove a comment that seems to have detached from wherever it's supposed to be.

2018-12-11  Chris Dumez  <cdumez@apple.com>

        Restrict DeviceMotion / DeviceOrientation APIs to secure contexts
        https://bugs.webkit.org/show_bug.cgi?id=192595
        <rdar://problem/46382603>

        Reviewed by Dean Jackson.

        Tests: http/tests/events/device-orientation-motion-non-secure-context.html
               http/tests/events/device-orientation-motion-secure-context.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::setIsPotentiallyTrustworthy):
        * testing/Internals.cpp:
        (WebCore::Internals::markContextAsInsecure):
        (WebCore::Internals::postTask):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-12-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Send the full list of file upload URLs and types in PasteboardItemInfo
        https://bugs.webkit.org/show_bug.cgi?id=192598
        Work towards <rdar://problem/35626913>

        Reviewed by Tim Horton.

        Refactors PasteboardItemInfo to contain lists of file URLs and corresponding pasteboard types, instead of just
        a "preferred" file upload URL and type. See below for more details.

        * platform/PasteboardItemInfo.h:
        (WebCore::PasteboardItemInfo::pathForContentType const):

        Add a helper method to find a file upload URL corresponding to a given type.

        (WebCore::PasteboardItemInfo::encode const):
        (WebCore::PasteboardItemInfo::decode):

        Change `pathForFileUpload` to `pathsForFileUpload`, and `contentTypeForFileUpload` to `contentTypesForFileUpload`.

        * platform/ios/AbstractPasteboard.h:
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::readRespectingUTIFidelities):

        Adjust this to take the file path for the highest fidelity representation in `pathsForContentType`.

        (WebCore::Pasteboard::readFilePaths):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::informationForItemAtIndex):
        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[NSItemProvider web_containsFileURLAndFileUploadContent]):
        (-[NSItemProvider web_fileUploadContentTypes]):

        Replace `web_containsFileUploadContent` with `web_fileUploadContentTypes`, which returns the full list of file
        upload content types (rather than just a `BOOL` indicating whether one or more of these types exist).

        (-[WebItemProviderPasteboard fileUploadURLsAtIndex:fileTypes:]):
        (-[WebItemProviderPasteboard numberOfFiles]):
        (-[NSItemProvider web_containsFileUploadContent]): Deleted.
        (-[WebItemProviderPasteboard preferredFileUploadURLAtIndex:fileType:]): Deleted.

        Replaced with `-fileUploadURLsAtIndex:fileTypes:`. This implementation currently just returns the highest
        fidelity loaded type identifier, but this is wrong because it doesn't take into account inline data types that
        shouldn't be represented as data for file uploads (for instance, it never makes sense to upload the internal
        data serialization for an `NSURL` as a file on the web).

        Instead, use existing logic in `web_fileUploadContentTypes` to determine which file types can be treated as file
        uploads, and return all of these file types that we've loaded.

2018-12-11  Don Olmstead  <don.olmstead@sony.com>

        Resource Load Statistics: Use common implementation within NetworkStorageSession
        https://bugs.webkit.org/show_bug.cgi?id=192592

        Reviewed by Alex Christensen.

        There's nothing within the resource load statistics implementation contained
        in NetworkStorageSessionCFNet that was CF specific. All of the resource load
        statistics methods are moved from that file to the root NetworkStorageSession
        implementation.

        * platform/network/NetworkStorageSession.cpp:
        (WebCore::getPartitioningDomain):
        (WebCore::NetworkStorageSession::shouldBlockThirdPartyCookies const):
        (WebCore::NetworkStorageSession::shouldBlockCookies const):
        (WebCore::NetworkStorageSession::maxAgeCacheCap):
        (WebCore::NetworkStorageSession::setAgeCapForClientSideCookies):
        (WebCore::NetworkStorageSession::setPrevalentDomainsToBlockCookiesFor):
        (WebCore::NetworkStorageSession::removePrevalentDomains):
        (WebCore::NetworkStorageSession::hasStorageAccess const):
        (WebCore::NetworkStorageSession::getAllStorageAccessEntries const):
        (WebCore::NetworkStorageSession::grantStorageAccess):
        (WebCore::NetworkStorageSession::removeStorageAccessForFrame):
        (WebCore::NetworkStorageSession::removeStorageAccessForAllFramesOnPage):
        (WebCore::NetworkStorageSession::removeAllStorageAccess):
        (WebCore::NetworkStorageSession::setCacheMaxAgeCapForPrevalentResources):
        (WebCore::NetworkStorageSession::resetCacheMaxAgeCapForPrevalentResources):
        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::getPartitioningDomain): Deleted.
        (WebCore::NetworkStorageSession::shouldBlockThirdPartyCookies const): Deleted.
        (WebCore::NetworkStorageSession::shouldBlockCookies const): Deleted.
        (WebCore::NetworkStorageSession::maxAgeCacheCap): Deleted.
        (WebCore::NetworkStorageSession::setAgeCapForClientSideCookies): Deleted.
        (WebCore::NetworkStorageSession::setPrevalentDomainsToBlockCookiesFor): Deleted.
        (WebCore::NetworkStorageSession::removePrevalentDomains): Deleted.
        (WebCore::NetworkStorageSession::hasStorageAccess const): Deleted.
        (WebCore::NetworkStorageSession::getAllStorageAccessEntries const): Deleted.
        (WebCore::NetworkStorageSession::grantStorageAccess): Deleted.
        (WebCore::NetworkStorageSession::removeStorageAccessForFrame): Deleted.
        (WebCore::NetworkStorageSession::removeStorageAccessForAllFramesOnPage): Deleted.
        (WebCore::NetworkStorageSession::removeAllStorageAccess): Deleted.
        (WebCore::NetworkStorageSession::setCacheMaxAgeCapForPrevalentResources): Deleted.
        (WebCore::NetworkStorageSession::resetCacheMaxAgeCapForPrevalentResources): Deleted.

2018-12-11  Devin Rousso  <drousso@apple.com>

        Web Inspector: overlay bounds rulers don't match element when page is scrolled
        https://bugs.webkit.org/show_bug.cgi?id=192577

        Reviewed by Joseph Pecoraro.

        When drawing the highlight for a node, the canvas is translated based on the scroll position
        of the node. This translation was not applied to the bounds calculations, which meant that
        the bounds always drew where the node would have been if it wasn't scrolled.

        * inspector/InspectorOverlayPage.js:
        (Bounds.prototype.get minX):
        (Bounds.prototype.get minY):
        (Bounds.prototype.get maxX):
        (Bounds.prototype.get maxY):
        (Bounds.prototype.offset): Added.
        (drawNodeHighlight):
        Drive-by: draw bounds for every node being highlighted instead of just the first one.
        Drive-by: switch the bounds color to be a semi-transparent red for more visibility/contrast.

2018-12-11  Andy Estes  <aestes@apple.com>

        Introduce makeBlockPtr for lambdas
        https://bugs.webkit.org/show_bug.cgi?id=192594

        Reviewed by Alex Christensen.

        Adopted makeBlockPtr.

        * platform/cocoa/FileMonitorCocoa.mm:
        (WebCore::FileMonitor::FileMonitor):
        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManagerObjC.mm:
        (WebCore::VideoFullscreenLayerManagerObjC::setVideoFullscreenLayer):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyCommandBufferMetal.mm:
        (WebCore::GPULegacyCommandBuffer::GPULegacyCommandBuffer):
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSession addDelegateOperation:]):
        (-[WebCoreNSURLSessionDataTask resource:receivedRedirect:request:completionHandler:]):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate callFunctionOnMainThread:]):

2018-12-10  Brent Fulgham  <bfulgham@apple.com>

        SVGViewSpec objects should mark relevant SVG elements
        https://bugs.webkit.org/show_bug.cgi?id=192567
        <rdar://problem/46491325>

        Reviewed by Ryosuke Niwa.

        SVGViewSpec elements reflect the state of an underlying SVGElement. Teach the mark algorithm to
        recognize the relevant SVGElement as active as long as the SVGViewSpec is active.

        Update SVGElement so that it can vend WeakPtrs. I also noticed that SVGAttributeOwner used a bare
        pointer to the SVGElement, so switched to a WeakPtr.

        Test: svg/animations/view-dependency-crash.html

        * Sources.txt: Add new files.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSSVGViewSpecCustom.cpp: Added.
        (WebCore::JSSVGViewSpec::visitAdditionalChildren):
        * svg/SVGElement.h:
        * svg/SVGPathElement.h:
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::SVGViewSpec): Hold a weak pointer (rather than a bare pointer) to the underlying element.
        * svg/SVGViewSpec.h:
        * svg/SVGViewSpec.idl:
        * svg/properties/SVGAttributeOwnerProxy.cpp: Added.
        (WebCore::SVGAttributeOwnerProxy::SVGAttributeOwnerProxy): Hold a weak pointer (rather than a bare pointer) to
        the underling SVGElement.
        (WebCore::SVGAttributeOwnerProxy::element const): Ditto.
        * svg/properties/SVGAttributeOwnerProxy.h:
        (WebCore::SVGAttributeOwnerProxy::SVGAttributeOwnerProxy): Move implementation to cpp file.
        (WebCore::SVGAttributeOwnerProxy::element const): Ditto.
        * svg/properties/SVGAttributeOwnerProxyImpl.h: Update for WeakPtr use.

2018-12-10  Benjamin Poulain  <benjamin@webkit.org>

        <rdar://problem/45296285> Content blocker rule "raw" blocks media elements from loading
        https://bugs.webkit.org/show_bug.cgi?id=192439

        Reviewed by Dean Jackson.

        This broken when WebKit switched to NSURLSession.
        In CachedResourceLoader::requestResource(), toResourceType() was turning media load into RAW.

        Test: http/tests/contentextensions/video-element-resource-type.html

        * loader/ResourceLoadInfo.cpp:
        (WebCore::toResourceType):

2018-12-10  Don Olmstead  <don.olmstead@sony.com>

        Move ENABLE_RESOURCE_LOAD_STATISTICS to FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=192573

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2018-12-10  Justin Michaud  <justin_michaud@apple.com>

        CS Painting API should support multiple worklets.
        https://bugs.webkit.org/show_bug.cgi?id=192335

        Reviewed by Dean Jackson.

        Adds a new map to support separate paint worklet global scopes (one for each worklet). Also
        adds some tests and a fix for a repaint bug that this oncovered, where changing a custom property required
        for paint would not trigger a repaint if there had not been a valid value set before.

        Test: fast/css-custom-paint/multiple-worklets.html

        * css/CSSPaintImageValue.cpp:
        (WebCore::CSSPaintImageValue::image):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        (WebCore::Document::paintWorkletGlobalScope):
        (WebCore::Document::setPaintWorkletGlobalScope):
        * dom/Document.h:
        (WebCore::Document::paintWorkletGlobalScope): Deleted.
        * rendering/style/RenderStyle.cpp:
        (WebCore::changedCustomPaintWatchedProperty):
        * worklets/Worklet.cpp:
        (WebCore::Worklet::addModule):
        * worklets/WorkletGlobalScope.cpp:
        (WebCore::WorkletGlobalScope::prepareForDestruction):

2018-12-10  Youenn Fablet  <youenn@apple.com>

        Remove derived classes of RealtimeMediaSourceCenter
        https://bugs.webkit.org/show_bug.cgi?id=192546

        Reviewed by Eric Carlson.

        Remove virtual methods of RealtimeMediaSourceCenter and remove derived classes of it.
        Instead port specific implementation directly implement the needed default factory methods.

        Renamed some methods for improved consistency.
        Moved some static variables as RealtimeMediaSourceCenter members.

        No change of behavior.

        * WebCore.xcodeproj/project.pbxproj:
        * page/DeprecatedGlobalSettings.cpp:
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::createMediaStream):
        (WebCore::RealtimeMediaSourceCenter::getMediaStreamDevices):
        (WebCore::RealtimeMediaSourceCenter::getUserMediaDevices):
        (WebCore::RealtimeMediaSourceCenter::setVideoCapturePageState):
        (WebCore::RealtimeMediaSourceCenter::setAudioFactory):
        (WebCore::RealtimeMediaSourceCenter::unsetAudioFactory):
        (WebCore::RealtimeMediaSourceCenter::audioCaptureFactory):
        (WebCore::RealtimeMediaSourceCenter::setVideoFactory):
        (WebCore::RealtimeMediaSourceCenter::unsetVideoFactory):
        (WebCore::RealtimeMediaSourceCenter::videoCaptureFactory):
        (WebCore::RealtimeMediaSourceCenter::setDisplayCaptureFactory):
        (WebCore::RealtimeMediaSourceCenter::unsetDisplayCaptureFactory):
        (WebCore::RealtimeMediaSourceCenter::displayCaptureFactory):
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::~RealtimeVideoSource):
        (WebCore::RealtimeVideoSource::prepareToProduceData):
        * platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp:
        (WebCore::RealtimeMediaSourceCenter::singleton):
        (WebCore::RealtimeMediaSourceCenter::defaultAudioCaptureFactory):
        (WebCore::RealtimeMediaSourceCenter::defaultVideoCaptureFactory):
        (WebCore::RealtimeMediaSourceCenter::defaultDisplayCaptureFactory):
        * platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.h: Removed.
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource):
        (WebCore::AVVideoCaptureSource::setupCaptureSession):
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        (WebCore::DisplayCaptureSourceCocoa::~DisplayCaptureSourceCocoa):
        (WebCore::DisplayCaptureSourceCocoa::startProducingData):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenter::singleton):
        (WebCore::RealtimeMediaSourceCenter::defaultAudioCaptureFactory):
        (WebCore::RealtimeMediaSourceCenter::defaultVideoCaptureFactory):
        (WebCore::RealtimeMediaSourceCenter::defaultDisplayCaptureFactory):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h: Removed.
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::~MockRealtimeAudioSource):
        (WebCore::MockRealtimeAudioSource::startProducingData):
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::setMockRealtimeMediaSourceCenterEnabled):
        (WebCore::MockRealtimeMediaSourceCenter::audioCaptureFactory):
        (WebCore::MockRealtimeMediaSourceCenter::videoCaptureFactory):
        * platform/mock/MockRealtimeMediaSourceCenter.h:

2018-12-10  Youenn Fablet  <youenn@apple.com>

        DataChannels created asynchronously never open and are unusable
        https://bugs.webkit.org/show_bug.cgi?id=192566

        Reviewed by Eric Carlson.

        For every new data channel (remote or local), we should check the underlying backend state.
        This allows firing events if needed.
        We were not always doing that which was prohibiting sending some open
        events for data channels created after the SCTP connection is set up.

        Covered by updated test.

        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::channelEvent):
        (WebCore::LibWebRTCDataChannelHandler::setClient):
        (WebCore::LibWebRTCDataChannelHandler::OnStateChange):
        (WebCore::LibWebRTCDataChannelHandler::checkState):
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h:

2018-12-10  Ryosuke Niwa  <rniwa@webkit.org>

        Use WeakPtr to refer to VTTCue in VTTCueBox
        https://bugs.webkit.org/show_bug.cgi?id=192575

        Reviewed by Eric Carlson.

        Address the FIXME in VTTCue::~VTTCue by clearing VTTCueBox::m_cue when VTTCue goes away.
        This is implemented by simply using WeakPtr.

        No new tests since there shoul be no behaivoral change.

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::VTTCueBox):
        (WebCore::VTTCueBox::getCue const):
        (WebCore::VTTCueBox::applyCSSProperties):
        (WebCore::VTTCue::~VTTCue):
        * html/track/VTTCue.h:
        (WebCore::VTTCueBox::fontSizeFromCaptionUserPrefs const):

2018-12-10  Mark Lam  <mark.lam@apple.com>

        PropertyAttribute needs a CustomValue bit.
        https://bugs.webkit.org/show_bug.cgi?id=191993
        <rdar://problem/46264467>

        Reviewed by Saam Barati.

        This patch revealed a bug in the CodeGenerator where a constructor property is
        set with a ReadOnly attribute.  This conflicts with the WebIDL link (see clause
        12 in https://heycam.github.io/webidl/#interface-prototype-object) which states
        that it should be [Writable].  The ReadOnly attribute is now removed.

        On the WebCore side, this change is covered by existing tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::jsTestCustomConstructorWithNoInterfaceObjectConstructor):

2018-12-10  Antti Koivisto  <antti@apple.com>

        Rename "forced style recalc" to "full style rebuild"
        https://bugs.webkit.org/show_bug.cgi?id=192572

        Reviewed by Zalan Bujtas.

        The old name is confusing.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::hasValidStyleForProperty):
        * dom/Document.cpp:
        (WebCore::Document::scheduleStyleRebuild):
        (WebCore::Document::scheduleStyleRecalc):
        (WebCore::Document::unscheduleStyleRecalc):
        (WebCore::Document::hasPendingStyleRebuild const):
        (WebCore::Document::resolveStyle):
        (WebCore::Document::needsStyleRecalc const):
        (WebCore::Document::updateLayoutIgnorePendingStylesheets):
        (WebCore::Document::invalidateMatchedPropertiesCacheAndForceStyleRecalc):
        (WebCore::Document::setDesignMode):
        (WebCore::Document::webkitDidExitFullScreenForElement):
        (WebCore::Document::setAnimatingFullScreen):
        (WebCore::Document::setFullscreenControlsHidden):
        (WebCore::Document::scheduleForcedStyleRecalc): Deleted.
        (WebCore::Document::hasPendingForcedStyleRecalc const): Deleted.
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::needsStyleInvalidation const):
        * page/Page.cpp:
        (WebCore::Page::updateStyleAfterChangeInEnvironment):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::updateActiveStyleSheets):

2018-12-10  Alexey Proskuryakov  <ap@apple.com>

        Include CoreGraphics.h from WebCorePrefix.h
        https://bugs.webkit.org/show_bug.cgi?id=192557

        Reviewed by Tim Horton.

        The theory is that this will improve build time. Let's try and see what bots say.

        * WebCorePrefix.h:

2018-12-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Unable to upload data that conforms to "public.item" but not "public.content"
        https://bugs.webkit.org/show_bug.cgi?id=192555
        <rdar://problem/35204990>

        Reviewed by Tim Horton.

        Add support for uploading content that conforms to "public.item" via drag and drop. Currently, iOS WebKit only
        supports data that conforms to "public.content", but there exist several types of files that conform to
        "public.item" but not "public.content". See below for more detail.

        Test: DragAndDropTests.ExternalSourcePKCS12ToSingleFileInput

        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::supportedFileUploadPasteboardTypes):

        Update this to include "public.item", and remove "public.folder", which is now redundant because "public.folder"
        conforms to "public.item".

        * platform/ios/WebItemProviderPasteboard.mm:
        (-[NSItemProvider web_containsFileURLAndFileUploadContent]):

        Pull out the "contains content that is supported for file uploads" part of this helper method into a separate
        method, and use it within `-web_containsFileURLAndFileUploadContent`. Note that this prevents "public.url"-
        conformant data from being uploaded as files (i.e., we never want to upload a URL string *itself* as a file).
        Drawing this distinction ensures that we don't confuse item providers that contain just a URL as files when
        dropping into a file upload area or file input (see API test: ExternalSourceZIPArchiveAndURLToSingleFileInput
        for an example of this corner case).

        (-[NSItemProvider web_containsFileUploadContent]):
        (-[WebItemProviderPasteboard numberOfFiles]):

        Refactor this to use `-web_containsFileUploadContent`.

2018-12-10  Chris Dumez  <cdumez@apple.com>

        Add SPI to allow the client to set the user-agent at main frame level, from the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=192509
        <rdar://problem/46500832>

        Reviewed by Alex Christensen.

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setCustomUserAgent):
        (WebCore::DocumentLoader::customUserAgent const):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::userAgent const):

2018-12-10  Adrian Perez de Castro  <aperez@igalia.com>

        [GLib] FileSystem::moveFile() should fall back to copying
        https://bugs.webkit.org/show_bug.cgi?id=192562

        Reviewed by Michael Catanzaro.

        No new tests needed.

        * platform/glib/FileSystemGlib.cpp:
        (WebCore::FileSystem::moveFile): Use g_file_move() instead of a plain g_rename(), which
        provides a fall-back which does copy+delete when a direct move or rename cannot be done.

2018-12-10  Simon Fraser  <simon.fraser@apple.com>

        Allow control over child order when adding nodes to the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=176914
        <rdar://problem/46542237>
        
        Re-land r239010 after over-zealous rollout.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::attachToStateTree):
        (WebCore::AsyncScrollingCoordinator::ensureRootStateNodeForFrameView):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::attachToStateTree):
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::insertChild):
        (WebCore::ScrollingStateNode::indexOfChild const):
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::nodeTypeAndParentMatch const):
        (WebCore::ScrollingStateTree::attachNode):
        * page/scrolling/ScrollingStateTree.h:

2018-12-10  Antti Koivisto  <antti@apple.com>

        Document should throttle style recalc even when m_pendingStyleRecalcShouldForce is true.
        https://bugs.webkit.org/show_bug.cgi?id=191695

        Reviewed by Zalan Bujtas.

        * dom/Document.cpp:
        (WebCore::Document::scheduleStyleRecalc):

        Don't test for m_pendingStyleRecalcShouldForce.

        (WebCore::Document::hasPendingStyleRecalc const):
        (WebCore::Document::hasPendingForcedStyleRecalc const):

        Don't base the pending status of these function on whether the timer is running.
        Instead check if the style is invalid.

2018-12-10  Rob Buis  <rbuis@igalia.com>

        XMLHttpRequest removes spaces from content-types before processing
        https://bugs.webkit.org/show_bug.cgi?id=8644

        Reviewed by Chris Dumez.

        Stop trimming white space characters from the middle of
        type/subtype value. Also make sure whitespace being parsed
        adheres to OWS definition from RFC 7230 Section 3.2.3
        (referenced by RFC 7231), i.e. space or HT.

        Based on http://crrev.com/416586.

        Behavior matches Firefox and Chrome.

        Tests: http/tests/xmlhttprequest/supported-xml-content-types.html
               web-platform-tests/mimesniff/mime-types/parsing.any.html
               web-platform-tests/mimesniff/mime-types/parsing.any.worker.html

        * platform/network/HTTPParsers.cpp:
        (WebCore::extractMIMETypeFromMediaType):

2018-12-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Caret is obscured by finger when dragging over an editable element
        https://bugs.webkit.org/show_bug.cgi?id=192499
        <rdar://problem/46570101>

        Reviewed by Tim Horton.

        * page/DragActions.h:

        Move DragHandlingMethod to DragActions.h, and drive-by fix some minor issues (i.e. make a couple of enum classes
        use 8 bits, fix the indentation levels, and update the copyright year). Also add `EnumTraits` for
        DragHandlingMethod so that it may be encoded over IPC.

        * page/DragController.cpp:
        (WebCore::dragIsHandledByDocument):

        Simplify this helper function.

        (WebCore::DragController::tryDocumentDrag):
        * page/DragController.h:

        Expose the current DragHandlingMethod via a const getter method.

        (WebCore::DragController::dragHandlingMethod const):

2018-12-10  Youenn Fablet  <youenn@apple.com>

        Make mock capture happen in the process used for real capture
        https://bugs.webkit.org/show_bug.cgi?id=192544

        Reviewed by Eric Carlson.

        MockRealtimeMediaSourceCenter previously was setting its factories whenever mock capture is on.
        Add booleans to choose which source (audio, video, display) will actually be toggled on.

        Covered by existing tests.

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::setMockRealtimeMediaSourceCenterEnabled):
        * platform/mock/MockRealtimeMediaSourceCenter.h:
        (WebCore::MockRealtimeMediaSourceCenter::setMockAudioCaptureEnabled):
        (WebCore::MockRealtimeMediaSourceCenter::setMockVideoCaptureEnabled):
        (WebCore::MockRealtimeMediaSourceCenter::setMockDisplayCaptureEnabled):

2018-12-10  Dean Jackson  <dino@apple.com>

        Use text/javascript as recommended by the HTML specification
        https://bugs.webkit.org/show_bug.cgi?id=192525
        <rdar://problem/46569636>

        Reviewed by Jon Lee.

        The HTML specification says we should use text/javascript for
        JavaScript files:
        https://html.spec.whatwg.org/multipage/scripting.html#scriptingLanguages:javascript-mime-type

        * loader/cache/CachedScript.cpp: Replace application/javascript with text/javascript.
        (WebCore::CachedScript::CachedScript):
        * platform/network/ios/WebCoreURLResponseIOS.mm: Ditto.
        (WebCore::createExtensionToMIMETypeMap):
        * platform/network/mac/WebCoreURLResponse.mm: Ditto.
        (WebCore::createExtensionToMIMETypeMap):

2018-12-10  Dean Jackson  <dino@apple.com>

        [iOS] Make WebGPU work with remote layer hosting
        https://bugs.webkit.org/show_bug.cgi?id=192508
        <rdar://problem/46560649>

        Reviewed by Tim Horton.

        WebGPU wasn't working on iOS because we were not correctly
        identifying the CALayers for remote hosting. Fix this by
        adding a new CALayer type, WebGPULayer. This will also
        eventually hold the code to render WebGPU into a canvas.

        Covered by the existing reference tests (on device).

        * SourcesCocoa.txt: Add new files.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm: Recognise the WebGPULayer
        class for remote hosting.
        (WebCore::PlatformCALayerCocoa::layerTypeForPlatformLayer):
        (WebCore::PlatformCALayerCocoa::PlatformCALayerCocoa):

        * platform/graphics/cocoa/WebGPULayer.h: Added. Very simple inheritance
        from CAMetalLayer.
        * platform/graphics/cocoa/WebGPULayer.mm: Added.
        (-[WebGPULayer init]):
        (-[WebGPULayer copyImageSnapshotWithColorSpace:]):

        * platform/graphics/gpu/GPUSwapChain.h: Reference WebGPULayer rather
        than CALayer.

        * platform/graphics/gpu/cocoa/GPUSwapChainMetal.mm: Ensure that
        the WebGPULayer has a reference back to this object, which it
        will use in the future.
        (WebCore::GPUSwapChain::create):
        (WebCore::GPUSwapChain::GPUSwapChain):

2018-12-10  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r238965.

        Caused internal iOS build failures

        Reverted changeset:

        "[iOS] Make WebGPU work with remote layer hosting"
        https://bugs.webkit.org/show_bug.cgi?id=192508
        https://trac.webkit.org/changeset/238965

2018-12-10  Youenn Fablet  <youenn@apple.com>

        MockLibWebRTCPeerConnectionFactory should isolate copy its test case
        https://bugs.webkit.org/show_bug.cgi?id=192545

        Reviewed by Eric Carlson.

        Isolate copy the test case member so that it can be destroyed on another thread.
        Covered by existing test that should no longer crash.

        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::useMockRTCPeerConnectionFactory):
        (WebCore::MockLibWebRTCPeerConnectionFactory::MockLibWebRTCPeerConnectionFactory):
        * testing/MockLibWebRTCPeerConnection.h:
        (WebCore::MockLibWebRTCPeerConnectionFactory::create):

2018-12-09  Youenn Fablet  <youenn@apple.com>

        Move capture manager from RealtimeMediaSourceCenter to capture factory
        https://bugs.webkit.org/show_bug.cgi?id=192542

        Reviewed by Eric Carlson.

        We should be able to run mock captures in wither UIProcess or WebProcess.
        Currently, mock capture is only done in WebProcess.
        This patch is a first step towards that goal.

        It also simplifies RealtimeMediaSourceCenter implementation by starting to remove virtual methods.
        Further refactoring will remove the need to subclass RealtimeMediaSourceCenter.
        Instead, remaining virtual methods will become non virtual and their
        implementation will become port specific.

        Removed a JS internal method that is not longer used to further simplify RealtimeMediaSourceCenter.

        No visible change of behavior.
        Covered by existing tests.

        * platform/mediastream/CaptureDeviceManager.h:
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::singleton):
        (WebCore::RealtimeMediaSourceCenter::getMediaStreamDevices):
        (WebCore::RealtimeMediaSourceCenter::getDisplayMediaDevices):
        (WebCore::RealtimeMediaSourceCenter::getUserMediaDevices):
        (WebCore::RealtimeMediaSourceCenter::captureDeviceWithPersistentID):
        (WebCore::RealtimeMediaSourceCenter::unsetAudioFactory):
        (WebCore::RealtimeMediaSourceCenter::unsetVideoFactory):
        (WebCore::RealtimeMediaSourceCenter::unsetDisplayCaptureFactory):
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        * platform/mediastream/RealtimeMediaSourceFactory.h:
        * platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp:
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        * platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp:
        * platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.h:
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSourceFactory::audioCaptureDeviceManager):
        * platform/mediastream/mac/CoreAudioCaptureSource.h:
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::setMockRealtimeMediaSourceCenterEnabled):
        (WebCore::MockRealtimeMediaSourceCenter::audioFactory):
        (WebCore::MockRealtimeMediaSourceCenter::videoFactory):
        (WebCore::MockRealtimeMediaSourceCenter::displayCaptureFactory):
        * platform/mock/MockRealtimeMediaSourceCenter.h:
        (WebCore::MockRealtimeMediaSourceCenter::audioCaptureDeviceManager):
        (WebCore::MockRealtimeMediaSourceCenter::videoCaptureDeviceManager):
        (WebCore::MockRealtimeMediaSourceCenter::displayCaptureDeviceManager):
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:

2018-12-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239010.
        https://bugs.webkit.org/show_bug.cgi?id=192537

        Breaks fast/visual-viewport/tiled-drawing/zoomed-fixed-
        scrolling-layers-state.html again (Requested by ap on
        #webkit).

        Reverted changeset:

        "Allow control over child order when adding nodes to the
        scrolling tree"
        https://bugs.webkit.org/show_bug.cgi?id=176914
        https://trac.webkit.org/changeset/239010

2018-12-08  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Scaled video frames should be resized in letterbox mode
        https://bugs.webkit.org/show_bug.cgi?id=192528
        <rdar://problem/46576638>

        Reviewed by Darin Adler.

        Test: fast/mediastream/resize-letterbox.html

        * platform/graphics/cv/ImageTransferSessionVT.mm:
        (WebCore::ImageTransferSessionVT::ImageTransferSessionVT): Use letterbox resize mode, not trim.

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::captureSize const): "Capture" at the preset size, not 
        necessarily at the requested size to be more like a physical camera.
        (WebCore::MockRealtimeVideoSource::settingsDidChange):
        (WebCore::MockRealtimeVideoSource::drawAnimation):
        (WebCore::MockRealtimeVideoSource::drawBoxes):
        (WebCore::MockRealtimeVideoSource::drawText):
        (WebCore::MockRealtimeVideoSource::generateFrame):
        (WebCore::MockRealtimeVideoSource::imageBuffer const):
        * platform/mock/MockRealtimeVideoSource.h:

2018-12-08  Alex Christensen  <achristensen@webkit.org>

        Don't programmatically capitalize safe browsing warning buttons
        https://bugs.webkit.org/show_bug.cgi?id=192531
        <rdar://problem/46417791>

        Reviewed by Darin Adler.

        This doesn't work so well in other languages.
        Capitalize the source strings in English instead.

        * en.lproj/Localizable.strings:

2018-12-08  Frederic Wang  <fwang@igalia.com>

        Allow control over child order when adding nodes to the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=176914
        <rdar://problem/46542237>

        Reviewed by Simon Fraser.

        Based on an earlier patch by Simon Fraser.

        Previously ScrollingCoordinator just allowed nodes to be "attached" with a given parent,
        but with no control over sibling order. To allow for correct hit-testing overflow and
        frame scrolling nodes, we have to build the scrolling tree in z-order.

        This patch adds a 'childIndex' parameter to attachNode() which gives control over
        sibling order. For now, RenderLayerCompositor always uses the default 'notFound' value
        for childIndex so the current behavior (appending new nodes at the end of child list) is
        preserved.

        One test marked as flakey, since scrolling tree order is currently dependent on HashSet
        traversal order.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::attachToStateTree):
        (WebCore::AsyncScrollingCoordinator::ensureRootStateNodeForFrameView):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::attachToStateTree):
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::insertChild):
        (WebCore::ScrollingStateNode::indexOfChild const):
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::nodeTypeAndParentMatch const):
        (WebCore::ScrollingStateTree::attachNode):
        * page/scrolling/ScrollingStateTree.h:

2018-12-07  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] 'devicechange' event should not fire in frames that can't access capture devices
        https://bugs.webkit.org/show_bug.cgi?id=192511
        <rdar://problem/46562063>

        Reviewed by Youenn Fablet.

        Test: http/tests/media/media-stream/device-change-event-in-iframe.html

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::addEventListener): Don't fire the event unless the document can
        access a camera or microphone.

2018-12-07  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Address post-review comments after r238904
        https://bugs.webkit.org/show_bug.cgi?id=192514
        <rdar://problem/46564302>

        Reviewed by Youenn Fablet.

        No new tests, no functional change.

        * platform/graphics/cv/ImageTransferSessionVT.mm:
        (WebCore::ImageTransferSessionVT::setSize):
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
        (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream):

2018-12-07  Antti Koivisto  <antti@apple.com>

        [LFC] Rename LayoutFormattingState files to LayoutState
        https://bugs.webkit.org/show_bug.cgi?id=192520

        Reviewed by Zalan Bujtas.

        Match the class name.

        * layout/FormattingContext.cpp:
        * layout/FormattingContextQuirks.cpp:
        * layout/FormattingState.h:
        * layout/LayoutFormattingState.cpp: Removed.
        * layout/LayoutFormattingState.h: Removed.
        * layout/LayoutState.cpp: Copied from Source/WebCore/layout/LayoutFormattingState.cpp.
        * layout/LayoutState.h: Copied from Source/WebCore/layout/LayoutFormattingState.h.
        * layout/Verification.cpp:
        * layout/blockformatting/BlockFormattingContext.cpp:
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        * layout/blockformatting/BlockInvalidation.cpp:
        * layout/floats/FloatAvoider.cpp:
        * layout/floats/FloatingContext.cpp:
        * layout/floats/FloatingState.cpp:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        * layout/inlineformatting/InlineInvalidation.cpp:
        * layout/layouttree/LayoutTreeBuilder.cpp:
        * page/FrameViewLayoutContext.cpp:

2018-12-07  Justin Michaud  <justin_michaud@apple.com>

        CSS Painting API code cleanup
        https://bugs.webkit.org/show_bug.cgi?id=192480

        Reviewed by Dean Jackson.

        No new tests, since the existing tests should cover it.

        * bindings/js/JSDOMWrapper.cpp:
        (WebCore::outputConstraintSubspaceFor):
        (WebCore::globalObjectOutputConstraintSubspaceFor):
        * bindings/js/JSWorkletGlobalScopeBase.cpp:
        (WebCore::toJS):
        * css/CSSPaintCallback.h:
        * platform/graphics/CustomPaintImage.cpp:
        (WebCore::CustomPaintImage::doCustomPaint):
        * platform/graphics/CustomPaintImage.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::addCustomPaintWatchProperty):
        (WebCore::changedCustomPaintWatchedProperty):
        (WebCore::RenderStyle::changeRequiresRepaint const):
        * worklets/PaintWorkletGlobalScope.cpp:
        (WebCore::PaintWorkletGlobalScope::registerPaint):
        * worklets/PaintWorkletGlobalScope.h:

2018-12-07  Youenn Fablet  <youenn@apple.com>

        Update libwebrtc up to 0d007d7c4f
        https://bugs.webkit.org/show_bug.cgi?id=192316

        Reviewed by Eric Carlson.

        Update include according new libwebrtc.

        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:

2018-12-07  Dean Jackson  <dino@apple.com>

        [iOS] Make WebGPU work with remote layer hosting
        https://bugs.webkit.org/show_bug.cgi?id=192508
        <rdar://problem/46560649>

        Reviewed by Tim Horton.

        WebGPU wasn't working on iOS because we were not correctly
        identifying the CALayers for remote hosting. Fix this by
        adding a new CALayer type, WebGPULayer. This will also
        eventually hold the code to render WebGPU into a canvas.

        Covered by the existing reference tests (on device).

        * SourcesCocoa.txt: Add new files.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm: Recognise the WebGPULayer
        class for remote hosting.
        (WebCore::PlatformCALayerCocoa::layerTypeForPlatformLayer):
        (WebCore::PlatformCALayerCocoa::PlatformCALayerCocoa):

        * platform/graphics/cocoa/WebGPULayer.h: Added. Very simple inheritance
        from CAMetalLayer.
        * platform/graphics/cocoa/WebGPULayer.mm: Added.
        (-[WebGPULayer init]):
        (-[WebGPULayer copyImageSnapshotWithColorSpace:]):

        * platform/graphics/gpu/GPUSwapChain.h: Reference WebGPULayer rather
        than CALayer.

        * platform/graphics/gpu/cocoa/GPUSwapChainMetal.mm: Ensure that
        the WebGPULayer has a reference back to this object, which it
        will use in the future.
        (WebCore::GPUSwapChain::create):
        (WebCore::GPUSwapChain::GPUSwapChain):

2018-12-07  Antti Koivisto  <antti@apple.com>

        Rename LayoutState to RenderLayoutState
        https://bugs.webkit.org/show_bug.cgi?id=192504

        Reviewed by Zalan Bujtas.

        The name is better used in LFC.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/FrameViewLayoutContext.cpp:
        (WebCore::FrameViewLayoutContext::layoutState const):
        (WebCore::FrameViewLayoutContext::pushLayoutState):
        (WebCore::FrameViewLayoutContext::pushLayoutStateForPaginationIfNeeded):
        * page/FrameViewLayoutContext.h:
        * rendering/LayoutState.cpp: Removed.
        * rendering/LayoutState.h: Removed.
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::checkForPaginationLogicalHeightChange):
        * rendering/RenderBlockLineLayout.cpp:
        * rendering/RenderBox.cpp:
        * rendering/RenderEmbeddedObject.cpp:
        * rendering/RenderFragmentedFlow.cpp:
        * rendering/RenderGrid.cpp:
        * rendering/RenderImage.cpp:
        * rendering/RenderInline.cpp:
        * rendering/RenderLayoutState.cpp: Copied from Source/WebCore/rendering/LayoutState.cpp.
        (WebCore::RenderLayoutState::RenderLayoutState):
        (WebCore::RenderLayoutState::computeOffsets):
        (WebCore::RenderLayoutState::computeClipRect):
        (WebCore::RenderLayoutState::computePaginationInformation):
        (WebCore::RenderLayoutState::pageLogicalOffset const):
        (WebCore::RenderLayoutState::computeLineGridPaginationOrigin):
        (WebCore::RenderLayoutState::propagateLineGridInfo):
        (WebCore::RenderLayoutState::establishLineGrid):
        (WebCore::RenderLayoutState::addLayoutDelta):
        (WebCore::RenderLayoutState::layoutDeltaMatches const):
        (WebCore::LayoutState::LayoutState): Deleted.
        (WebCore::LayoutState::computeOffsets): Deleted.
        (WebCore::LayoutState::computeClipRect): Deleted.
        (WebCore::LayoutState::computePaginationInformation): Deleted.
        (WebCore::LayoutState::pageLogicalOffset const): Deleted.
        (WebCore::LayoutState::computeLineGridPaginationOrigin): Deleted.
        (WebCore::LayoutState::propagateLineGridInfo): Deleted.
        (WebCore::LayoutState::establishLineGrid): Deleted.
        (WebCore::LayoutState::addLayoutDelta): Deleted.
        (WebCore::LayoutState::layoutDeltaMatches const): Deleted.
        * rendering/RenderLayoutState.h: Copied from Source/WebCore/rendering/LayoutState.h.
        (WebCore::RenderLayoutState::RenderLayoutState):
        (WebCore::LayoutState::LayoutState): Deleted.
        (WebCore::LayoutState::isPaginated const): Deleted.
        (WebCore::LayoutState::pageLogicalHeight const): Deleted.
        (WebCore::LayoutState::pageLogicalHeightChanged const): Deleted.
        (WebCore::LayoutState::lineGrid const): Deleted.
        (WebCore::LayoutState::lineGridOffset const): Deleted.
        (WebCore::LayoutState::lineGridPaginationOrigin const): Deleted.
        (WebCore::LayoutState::paintOffset const): Deleted.
        (WebCore::LayoutState::layoutOffset const): Deleted.
        (WebCore::LayoutState::pageOffset const): Deleted.
        (WebCore::LayoutState::needsBlockDirectionLocationSetBeforeLayout const): Deleted.
        (WebCore::LayoutState::renderer const): Deleted.
        (WebCore::LayoutState::clipRect const): Deleted.
        (WebCore::LayoutState::isClipped const): Deleted.
        (WebCore::LayoutState::layoutDelta const): Deleted.
        * rendering/RenderListBox.cpp:
        * rendering/RenderMediaControlElements.cpp:
        * rendering/RenderMultiColumnFlow.cpp:
        * rendering/RenderTable.cpp:
        * rendering/RenderTableRow.cpp:
        * rendering/RenderTableSection.cpp:
        * rendering/RenderVTTCue.cpp:
        * rendering/RenderView.cpp:
        * rendering/RenderView.h:
        * rendering/RootInlineBox.cpp:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):

2018-12-07  Antti Koivisto  <antti@apple.com>

        [LFC] Rename formattingContext() to createFormattingContext()
        https://bugs.webkit.org/show_bug.cgi?id=192500

        Reviewed by Zalan Bujtas.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        * layout/FormattingState.h:
        * layout/LayoutFormattingState.cpp:
        (WebCore::Layout::LayoutState::layoutFormattingContextSubtree):
        * layout/blockformatting/BlockFormattingState.cpp:
        (WebCore::Layout::BlockFormattingState::createFormattingContext):
        (WebCore::Layout::BlockFormattingState::formattingContext): Deleted.
        * layout/blockformatting/BlockFormattingState.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const):
        * layout/inlineformatting/InlineFormattingState.h:

2018-12-07  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r238947.

        Revision caused fast/visual-viewport/tiled-drawing/zoomed-
        fixed-scrolling-layers-state.html to constantly fail

        Reverted changeset:

        "Allow control over child order when adding nodes to the
        scrolling tree"
        https://bugs.webkit.org/show_bug.cgi?id=176914
        https://trac.webkit.org/changeset/238947

2018-12-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Cloned attachment elements lose their unique identifiers
        https://bugs.webkit.org/show_bug.cgi?id=192483

        Reviewed by Tim Horton.

        This patch adds logic to ensure that the unique identifier of a cloned attachment element is the same as the
        unique identifier of the original attachment element. If the cloned attachment is inserted into the same
        document as the original attachment, then we will exercise the same codepath for copied-and-pasted attachments,
        and assign a new unique identifier to the attachment element, while creating a new `_WKAttachment` in the client
        that's backed by the same `NSFileWrapper`.

        Test: WKAttachmentTests.AttachmentIdentifierOfClonedAttachment

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::copyNonAttributePropertiesFromElement):
        * html/HTMLAttachmentElement.h:

2018-12-07  Rob Buis  <rbuis@igalia.com>

        Merge parseAccessControlExposeHeadersAllowList into parseAccessControlAllowList
        https://bugs.webkit.org/show_bug.cgi?id=192288

        Reviewed by Frédéric Wang.

        Merge parseAccessControlExposeHeadersAllowList into parseAccessControlAllowList
        as they do the same thing. Also remove std::optional from parseAccessControlAllowList
        since the function can't fail.

        * WebCore.order:
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::validatePreflightResponse):
        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCacheItem::parse):
        * loader/CrossOriginPreflightResultCache.h:
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseAccessControlExposeHeadersAllowList): Deleted.
        * platform/network/HTTPParsers.h:
        (WebCore::parseAccessControlAllowList):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::filter):
        (WebCore::ResourceResponseBase::sanitizeHTTPHeaderFieldsAccordingToTainting):

2018-12-07  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Don't update AVPlayerViewController currentTime while scrubbing
        https://bugs.webkit.org/show_bug.cgi?id=192438
        <rdar://problem/42977046>

        Reviewed by Jer Noble.

        No new tests, tested manually.

        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        (WebCore::PlaybackSessionInterfaceAVKit::currentTimeChanged): Don't report change during scrubbing.

        * platform/ios/WebAVPlayerController.h:
        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController beginScrubbing:]): Set _isScrubbing.
        (-[WebAVPlayerController endScrubbing:]): Ditto.
        (-[WebAVPlayerController isScrubbing]): Return _isScrubbing.

2018-12-07  Thibault Saunier  <tsaunier@igalia.com>

        [WPE][GTK] Implement WebAudioSourceProviderGStreamer to allow bridging MediaStream and the WebAudio APIs
        https://bugs.webkit.org/show_bug.cgi?id=186933

        Reusing the AudioSourceProviderGStreamer itself as it was doing almost everything we needed,
        just added a constructor to be able to create it from a MediaStreamTrackPrivate and made it a
        WebAudioSourceProvider which only means it is now a ThreadSafeRefCounted.

        Sensibily refactored GStreamerMediaStreamSource so that we could reuse it to track a single
        MediaStreamTrack.

        Reviewed by Philippe Normand.

        Enabled all tests depending on that feature.

        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:
        (WebCore::AudioSourceProviderGStreamer::AudioSourceProviderGStreamer):
        (WebCore::AudioSourceProviderGStreamer::~AudioSourceProviderGStreamer):
        (WebCore::AudioSourceProviderGStreamer::setClient):
        * platform/audio/gstreamer/AudioSourceProviderGStreamer.h:
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::audioSourceProvider):
        * platform/mediastream/gstreamer/GStreamerAudioCapturer.cpp:
        (WebCore::GStreamerAudioCapturer::GStreamerAudioCapturer):
        * platform/mediastream/gstreamer/GStreamerAudioStreamDescription.h:
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (WebCore::webkitMediaStreamSrcSetupSrc):
        (WebCore::webkitMediaStreamSrcSetupAppSrc):
        (WebCore::webkitMediaStreamSrcAddTrack):
        (WebCore::webkitMediaStreamSrcSetStream):
        (WebCore::webkitMediaStreamSrcNew):
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.h:
        * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.cpp:
        (WebCore::WrappedMockRealtimeAudioSource::WrappedMockRealtimeAudioSource):
        (WebCore::WrappedMockRealtimeAudioSource::start):
        (WebCore::WrappedMockRealtimeAudioSource::addHum):
        (WebCore::WrappedMockRealtimeAudioSource::render):
        (WebCore::WrappedMockRealtimeAudioSource::settingsDidChange):
        (WebCore::MockGStreamerAudioCaptureSource::startProducingData):
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp:
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::pullAudioData): Handle the case where input buffers
          are "big" and process all the data we can for each runs of the method.

2018-12-06  Alexey Proskuryakov  <ap@apple.com>

        Move USE_NEW_THEME out of WebCore's config.h
        https://bugs.webkit.org/show_bug.cgi?id=192426

        Reviewed by Tim Horton.

        * config.h:

2018-12-06  Frederic Wang  <fwang@igalia.com>

        Allow control over child order when adding nodes to the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=176914

        Reviewed by Simon Fraser.

        Based on an earlier patch by Simon Fraser.

        Previously ScrollingCoordinator just allowed nodes to be "attached" with a given parent,
        but with no control over sibling order. To allow for correct hit-testing overflow and
        frame scrolling nodes, we have to build the scrolling tree in z-order.

        This patch adds a 'childIndex' parameter to attachNode() which gives control over
        sibling order. For now, RenderLayerCompositor always uses the default 'notFound' value
        for childIndex so the current behavior (appending new nodes at the end of child list) is
        preserved.

        No new tests, behavior unchanged and already covered by existing tests.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::attachToStateTree):
        (WebCore::AsyncScrollingCoordinator::ensureRootStateNodeForFrameView):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::attachToStateTree):
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::insertChild):
        (WebCore::ScrollingStateNode::indexOfChild const):
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::nodeTypeAndParentMatch const):
        (WebCore::ScrollingStateTree::attachNode):
        * page/scrolling/ScrollingStateTree.h:

2018-12-06  Yongjun Zhang  <yongjun_zhang@apple.com>

        We should ignore minimumEffectiveDeviceWidth if the page specifies device-width in viewport meta-tag.
        https://bugs.webkit.org/show_bug.cgi?id=192377
        <rdar://problem/46364206>

        Reviewed by Tim Horton.

        If the page specifies width=device-width or initial-scale=1 in the viewport meta tag, we should use the
        native device width and ignore the minimum effective device width in ViewportConfiguration. The patch
        also introduces scalableNativeWebpageParameters() which uses the device width as default and also allows the page
        to shrink-to-fit. If a page doesn't have viewport meta tag, or if the width argument isn't device-width
        and the initial scale isn't 1, we will use scalableNativeWebpageParameters() as the default configuration.

        Tests: fast/viewport/ios/ignore-minimum-device-width-for-page-with-viewport-device-width.html
               fast/viewport/ios/use-minimum-device-width-for-page-without-viewport-meta.html

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::updateDefaultConfiguration): pick the default configuration based on
            the page's viewport arguments. Also, we will always fall back to scalableNativeWebpageParameters() if we
            can ignore scaling constraints.
        (WebCore::ViewportConfiguration::setViewportArguments): When page sends us new ViewportArguments, pick
            up the correponsding default configuration before updating the configuration.
        (WebCore::ViewportConfiguration::setCanIgnoreScalingConstraints): When m_canIgnoreScalingConstraints is
            changed, try to pick up the correponsding default configuration.
        (WebCore::ViewportConfiguration::scalableNativeWebpageParameters): Add a new default set of viewport Parameters
            this is very close to nativeWebpageParameters() excpet that it allows shrink to fit and its minimum scale
            is 0.25. We will use this Parameters for pages that doesn't have viewport meta tag; or the width is
            not device-width and initial scale is not 1.
        (WebCore::ViewportConfiguration::updateConfiguration): If the page's viewport argument doesn't override
            the default width, use the m_minimumLayoutSize.width().
        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::shouldIgnoreMinimumEffectiveDeviceWidth const): A helper method to tell
            if we should avoid using minimum effective device width.
        (WebCore::ViewportConfiguration::canOverrideConfigurationParameters const): If we are using a default
            configuration that is neither nativeWebpageParameters() nor scalableNativeWebpageParameters(), don't override
            it.
        (WebCore::ViewportConfiguration::minimumEffectiveDeviceWidth const): Add a helper method to return minimum
            effective device width based on shouldIgnoreMinimumEffectiveDeviceWidth().
        (WebCore::ViewportConfiguration::effectiveLayoutSizeScaleFactor const): Use minimumEffectiveDeviceWidth().

2018-12-06  Adrian Perez de Castro  <aperez@igalia.com>

        Content Extensions: Misc fixes to debugging / perf testing code
        https://bugs.webkit.org/show_bug.cgi?id=192474

        Reviewed by Mark Lam.

        This make it possible to build the content extensions support with the
        debugging features enabled. In particular, building with
        CONTENT_EXTENSIONS_PERFORMANCE_REPORTING enabled was broken.

        No new tests needed.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList): Remove usage of removed
        variables machinesWihthoutConditionsCount,
        totalBytecodeSizeForMachinesWithoutConditions,
        machinesWithConditionsCount, and
        totalBytecodeSizeForMachinesWithConditions.
        * contentextensions/DFA.cpp:
        (WebCore::ContentExtensions::DFA::debugPrintDot const):
        Use "%" PRIu64 instead of "%llu" to format uint64_t values.
        * contentextensions/NFA.cpp:
        (WebCore::ContentExtensions::NFA::debugPrintDot const):
        Use "%" PRIu64 instead of "%llu" to format uint64_t values.

2018-12-06  Alex Christensen  <achristensen@webkit.org>

        Remove unused LoaderStrategy::storeDerivedDataToCache and associated dead code
        https://bugs.webkit.org/show_bug.cgi?id=192452

        Reviewed by Anders Carlsson.

        * loader/LoaderStrategy.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didRetrieveDerivedDataFromCache): Deleted.
        * loader/ResourceLoader.h:
        * loader/ResourceLoaderOptions.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didRetrieveDerivedDataFromCache): Deleted.
        * loader/SubresourceLoader.h:
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoaderOptions::isolatedCopy const):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::didRetrieveDerivedDataFromCache): Deleted.

2018-12-06  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] HeightAndMargin::margin is always the non-collapsed margin value.
        https://bugs.webkit.org/show_bug.cgi?id=192345

        Reviewed by Antti Koivisto.

        Rename HeightAndMargin::margin to HeightAndMargin::nonCollapsedMargin.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        * layout/LayoutUnits.h:
        (WebCore::Layout::HeightAndMargin::usedMarginValues const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedHeight):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin const):

2018-12-06  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Add MarginCollapse::establishesBlockFormattingContext
        https://bugs.webkit.org/show_bug.cgi?id=192297

        Reviewed by Antti Koivisto.

        WebKit treats the document element renderer as a block formatting context root.

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::establishesBlockFormattingContext):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginTopCollapsedWithParent):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginBottomCollapsedWithParent):

2018-12-06  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [GStreamer] -DENABLE_VIDEO=ON -DENABLE_OPENGL=OFF still tries to build GstreamerGL
        https://bugs.webkit.org/show_bug.cgi?id=191998

        Reviewed by Philippe Normand.

        Fix compilation with -DENABLE_VIDEO=ON and -DENABLE_OPENGL=OFF due to GStreamerGL.

        No new tests required. Only fixing the build with certain flags.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasChanged): add required #if ENABLE(WEBGL).

2018-12-06  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        REGRESSION(r231043): [GTK] Undefined references to WebCore::LayerRepresentation::* with -DENABLE_OPENGL=OFF builds
        https://bugs.webkit.org/show_bug.cgi?id=191997

        Reviewed by Philippe Normand.

        Fix build with -DENABLE_OPENGL=OFF and -DENABLE_VIDEO=OFF.

        No new tests required. Only fixing build.

        * platform/gtk/PlatformWheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): add required #if ENABLE(ASYNC_SCROLLING)

2018-12-05  Don Olmstead  <don.olmstead@sony.com>

        [PlayStation] Enable WebCore
        https://bugs.webkit.org/show_bug.cgi?id=192384

        Reviewed by Brent Fulgham.

        Implements WebCore for the PlayStation platform.

        * PlatformPlayStation.cmake: Added.
        * loader/cache/CachedResourceLoader.cpp:
        * platform/generic/KeyedDecoderGeneric.cpp: Added.
        (WebCore::KeyedDecoder::decoder):
        (WebCore::KeyedDecoderGeneric::KeyedDecoderGeneric):
        (WebCore::KeyedDecoderGeneric::~KeyedDecoderGeneric):
        (WebCore::KeyedDecoderGeneric::decodeBytes):
        (WebCore::KeyedDecoderGeneric::decodeBool):
        (WebCore::KeyedDecoderGeneric::decodeUInt32):
        (WebCore::KeyedDecoderGeneric::decodeUInt64):
        (WebCore::KeyedDecoderGeneric::decodeInt32):
        (WebCore::KeyedDecoderGeneric::decodeInt64):
        (WebCore::KeyedDecoderGeneric::decodeFloat):
        (WebCore::KeyedDecoderGeneric::decodeDouble):
        (WebCore::KeyedDecoderGeneric::decodeString):
        (WebCore::KeyedDecoderGeneric::beginObject):
        (WebCore::KeyedDecoderGeneric::endObject):
        (WebCore::KeyedDecoderGeneric::beginArray):
        (WebCore::KeyedDecoderGeneric::beginArrayElement):
        (WebCore::KeyedDecoderGeneric::endArrayElement):
        (WebCore::KeyedDecoderGeneric::endArray):
        * platform/generic/KeyedDecoderGeneric.h: Added.
        * platform/generic/KeyedEncoderGeneric.cpp: Added.
        (WebCore::KeyedEncoder::encoder):
        (WebCore::KeyedEncoderGeneric::KeyedEncoderGeneric):
        (WebCore::KeyedEncoderGeneric::~KeyedEncoderGeneric):
        (WebCore::KeyedEncoderGeneric::encodeBytes):
        (WebCore::KeyedEncoderGeneric::encodeBool):
        (WebCore::KeyedEncoderGeneric::encodeUInt32):
        (WebCore::KeyedEncoderGeneric::encodeUInt64):
        (WebCore::KeyedEncoderGeneric::encodeInt32):
        (WebCore::KeyedEncoderGeneric::encodeInt64):
        (WebCore::KeyedEncoderGeneric::encodeFloat):
        (WebCore::KeyedEncoderGeneric::encodeDouble):
        (WebCore::KeyedEncoderGeneric::encodeString):
        (WebCore::KeyedEncoderGeneric::beginObject):
        (WebCore::KeyedEncoderGeneric::endObject):
        (WebCore::KeyedEncoderGeneric::beginArray):
        (WebCore::KeyedEncoderGeneric::beginArrayElement):
        (WebCore::KeyedEncoderGeneric::endArrayElement):
        (WebCore::KeyedEncoderGeneric::endArray):
        (WebCore::KeyedEncoderGeneric::finishEncoding):
        * platform/generic/KeyedEncoderGeneric.h: Added.
        * platform/network/curl/NetworkStorageSessionCurl.cpp:
        (WebCore::defaultCookieJarPath):
        * platform/network/playstation/CurlSSLHandlePlayStation.cpp: Added.
        (WebCore::getCACertPathEnv):
        (WebCore::CurlSSLHandle::platformInitialize):
        * platform/network/playstation/NetworkStateNotifierPlayStation.cpp: Added.
        (WebCore::NetworkStateNotifier::updateStateWithoutNotifying):
        (WebCore::NetworkStateNotifier::startObserving):
        * platform/playstation/EventLoopPlayStation.cpp: Added.
        (WebCore::EventLoop::cycle):
        * platform/playstation/MIMETypeRegistryPlayStation.cpp: Added.
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):
        * platform/playstation/PlatformScreenPlayStation.cpp: Added.
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenHasInvertedColors):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        (WebCore::screenSupportsExtendedColor):
        * platform/playstation/ScrollbarThemePlayStation.cpp: Added.
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemePlayStation::scrollbarThickness):
        (WebCore::ScrollbarThemePlayStation::hasButtons):
        (WebCore::ScrollbarThemePlayStation::hasThumb):
        (WebCore::ScrollbarThemePlayStation::backButtonRect):
        (WebCore::ScrollbarThemePlayStation::forwardButtonRect):
        (WebCore::ScrollbarThemePlayStation::trackRect):
        (WebCore::ScrollbarThemePlayStation::paintTrackBackground):
        (WebCore::ScrollbarThemePlayStation::paintThumb):
        * platform/playstation/ScrollbarThemePlayStation.h: Added.
        * platform/playstation/UserAgentPlayStation.cpp: Added.
        (WebCore::standardUserAgent):
        (WebCore::standardUserAgentForURL):
        * rendering/RenderThemePlayStation.cpp: Added.
        (WebCore::RenderTheme::singleton):
        (WebCore::RenderThemePlayStation::updateCachedSystemFontDescription const):
        * rendering/RenderThemePlayStation.h: Added.

2018-12-05  Ryosuke Niwa  <rniwa@webkit.org>

        Null pointer crash in DocumentOrderedMap::getElementById via FormAssociatedElement::findAssociatedForm
        https://bugs.webkit.org/show_bug.cgi?id=192392

        Reviewed by Dean Jackson.

        The crash was caused by FormAssociatedElement::findAssociatedForm invoking DocumentOrderedMap::getElementById
        and de-referencing nullptr Attribute* via IdTargetObserver before Element::attributeChanged had updated
        ElementData::m_idForStyleResolution.

        Fixed it by updating m_idForStyleResolution before invoking IdTargetObservers.

        Test: fast/dom/remove-id-form-associated-elemet-id-observer-crash.html

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged): Fixed the bug.

2018-12-05  Youenn Fablet  <youenn@apple.com>

        Enable the possibility to do video capture in UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=192394

        Reviewed by Eric Carlson.

        Create IOSurface-backed sample buffers so that we can easily send them through IPC.
        Manually tested.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setSizeAndFrameRateWithPreset):

2018-12-05  Youenn Fablet  <youenn@apple.com>

        Update ServiceWorkerContainer::getRegistration lambdas
        https://bugs.webkit.org/show_bug.cgi?id=192376

        Reviewed by Chris Dumez.

        There is no need to pass 'this' in lambdas as the last lambda
        takes a ScriptExecutionContext&.
        No change of behavior.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::getRegistration):
        (WebCore::ServiceWorkerContainer::getRegistrations):

2018-12-05  Chris Dumez  <cdumez@apple.com>

        Crash under WebCore::cachedDocumentWrapper()
        https://bugs.webkit.org/show_bug.cgi?id=192421
        <rdar://problem/37114163>

        Reviewed by Alex Christensen.

        Fix potential null defererence of the value returned by toJSDOMWindow(). For example,
        if the window is frameless, it would return null.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::cachedDocumentWrapper):

2018-12-05  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Cleanup up Mac screen capture class
        https://bugs.webkit.org/show_bug.cgi?id=192379
        <rdar://problem/46465458>

        Reviewed by Youenn Fablet.

        No new tests, tested manually.

        * platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:
        (WebCore::DisplayCaptureManagerCocoa::captureDevices): Initialize Screen devices first so
        they are first in the list of devices.

        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
        (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream): Cleanup. Always capture at the
        native screen size to work around a bug.
        (WebCore::ScreenDisplayCaptureSourceMac::settingsDidChange): Deleted.

2018-12-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r238844, r238846, and r238874.
        https://bugs.webkit.org/show_bug.cgi?id=192414

        The layout tests added with this change are flaky. (Requested
        by ryanhaddad on #webkit).

        Reverted changesets:

        "Implement non-timeslice mode encoding for MediaRecorder"
        https://bugs.webkit.org/show_bug.cgi?id=192069
        https://trac.webkit.org/changeset/238844

        "Fix the build"
        https://trac.webkit.org/changeset/238846

        "Fix MediaRecorder flaky tests"
        https://bugs.webkit.org/show_bug.cgi?id=192371
        https://trac.webkit.org/changeset/238874

2018-12-05  Frederic Wang  <fwang@igalia.com>

        Minor refactoring of the scrolling code
        https://bugs.webkit.org/show_bug.cgi?id=192398

        Reviewed by Simon Fraser.

        Based on an earlier patch by Simon Fraser.

        This patch performs some minor refactoring of the scrolling code:
        - Rename ScrollingCoordinator::uniqueScrollLayerID() to uniqueScrollingNodeID() since it
          is really a node id.
        - Inline ScrollingStateTree::setRootStateNode() so we only need to forward declare
          ScrollingStateFrameScrollingNode in headers.
        - Pass argument to ScrollingStateTree::addNode() as a reference rather than a pointer.
        - Initialize ScrollingStateTree::m_changedProperties and ScrollingStateTree::m_parent in
          the header file.
        - Remove obsolete comment about ScrollingCoordinatorMac.

        No new tests, behavior unchanged.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::uniqueScrollingNodeID):
        (WebCore::ScrollingCoordinator::uniqueScrollLayerID): Deleted.
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode):
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::attachNode):
        (WebCore::ScrollingStateTree::setRootStateNode):
        (WebCore::ScrollingStateTree::addNode):
        * page/scrolling/ScrollingStateTree.h:
        (WebCore::ScrollingStateTree::setRootStateNode): Deleted.
        * page/scrolling/ScrollingTree.cpp:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::attachScrollingNode):

2018-12-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        Turn WritingDirection into an enum class
        https://bugs.webkit.org/show_bug.cgi?id=192401
        Work towards <rdar://problem/42075638>

        Reviewed by Dan Bernstein.

        Change WritingDirection from an enum to an enum class. No change in behavior.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi):
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::textDirection const):
        (WebCore::EditingStyle::textDirectionForSelection):
        * editing/Editor.cpp:
        (WebCore::Editor::setBaseWritingDirection):
        (WebCore::Editor::baseWritingDirectionForSelectionStart const):
        * editing/EditorCommand.cpp:
        (WebCore::stateTextWritingDirectionLeftToRight):
        (WebCore::stateTextWritingDirectionNatural):
        (WebCore::stateTextWritingDirectionRightToLeft):
        * editing/WritingDirection.h:

        Additionally wrap this enum in `namespace WebCore`, and update the copyright year.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setTextAlignmentForChangedBaseWritingDirection):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * testing/Internals.cpp:
        (WebCore::Internals::setBaseWritingDirection):

2018-12-05  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Remove the AppendPipeline state machine
        https://bugs.webkit.org/show_bug.cgi?id=192204

        Reviewed by Xabier Rodriguez-Calvar.

        This patch tries to reduce the complexity of the AppendPipeline by
        removing the appendState state machine and cleaning all the
        conditional code around it that is not necessary anymore.

        For the most part the behavior is the same, but some edge cases have
        been improved in the process:

        Demuxing errors now result in the append being flagged as
        ParsingFailed and the error being propagated to the application. This
        fixes media/media-source/media-source-error-crash.html (or at least
        gets it up to date with cross platform expectations).

        AbortableTaskQueue now allows the task handler to perform an abort
        safely. This is used in the GstBus error message sync handler, since
        it needs to ask the MainThread to raise a parse error, which will in
        turn abort. An API test has been added for this new functionality.
        Also, code has been added to the API tests to ensure the correct
        destruction of the response object, especially in this case.

        The code handling invalid track codecs has been made clearer by also
        explicitly raising a parse error, but it should not expose behavior
        differences for the application. A test has been added for this
        behavior: web-platform-tests/media-source/mediasource-invalid-codec.html

        The reporting of EOS events have been made more rigorous. EOS is only
        expected after a demuxing error, otherwise it's a g_critical.

        AppendPipeline::abort() has been renamed to
        AppendPipeline::resetParserState() to honor the fact that it's not
        only called when the user calls abort() and match better the names
        used in the spec.

        Test: imported/w3c/web-platform-tests/media-source/mediasource-invalid-codec.html

        * platform/AbortableTaskQueue.h:
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::assertedElementSetState):
        (WebCore::AppendPipeline::AppendPipeline):
        (WebCore::AppendPipeline::~AppendPipeline):
        (WebCore::AppendPipeline::handleErrorSyncMessage):
        (WebCore::AppendPipeline::appsrcEndOfAppendCheckerProbe):
        (WebCore::AppendPipeline::handleNeedContextSyncMessage):
        (WebCore::AppendPipeline::appsinkCapsChanged):
        (WebCore::AppendPipeline::handleEndOfAppend):
        (WebCore::AppendPipeline::appsinkNewSample):
        (WebCore::AppendPipeline::didReceiveInitializationSegment):
        (WebCore::AppendPipeline::resetParserState):
        (WebCore::AppendPipeline::pushNewBuffer):
        (WebCore::AppendPipeline::handleAppsinkNewSampleFromStreamingThread):
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsinkFromStreamingThread):
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsink):
        (WebCore::AppendPipeline::disconnectDemuxerSrcPadFromAppsinkFromAnyThread):
        (WebCore::AppendPipeline::dumpAppendState): Deleted.
        (WebCore::AppendPipeline::demuxerNoMorePads): Deleted.
        (WebCore::AppendPipeline::setAppendState): Deleted.
        (WebCore::AppendPipeline::appsinkEOS): Deleted.
        (WebCore::AppendPipeline::resetPipeline): Deleted.
        (WebCore::AppendPipeline::abort): Deleted.
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        (WebCore::AppendPipeline::appendState): Deleted.
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp:
        (WebCore::MediaSourceClientGStreamerMSE::abort):
        (WebCore::MediaSourceClientGStreamerMSE::resetParserState):
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::appendParsingFailed):
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h:

2018-12-05  Rob Buis  <rbuis@igalia.com>

        [Mac] HEAD requests changed to GET after 301, 302, and 303 redirections (http/tests/xmlhttprequest/head-redirection.html)
        https://bugs.webkit.org/show_bug.cgi?id=114965

        Reviewed by Frédéric Wang.

        HEAD requests should not be changed to GET after 303 redirects, see [1].
        This was fixed earlier for GTK [2].

        Behavior matches Firefox and Chrome.

        [1] http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-21#section-7.4
        [2] https://bugs.webkit.org/show_bug.cgi?id=110127

        Tests: web-platform-tests/fetch/api/redirect/redirect-method.html
               web-platform-tests/fetch/api/redirect/redirect-method-worker.html
               http/tests/xmlhttprequest/head-redirection.html

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::willSendRequest):

2018-12-05  Rob Buis  <rbuis@igalia.com>

        Align with Fetch on data: URLs
        https://bugs.webkit.org/show_bug.cgi?id=182325

        Reviewed by Alex Christensen.

        Do not accept data URLs that do not contain a comma
        character, as specified in the relevant specs [1, 2].

        Behavior matches Firefox and Chrome.

        Test: web-platform-tests/fetch/api/basic/scheme-data.any.html

        [1] https://tools.ietf.org/html/rfc2397
        [2] https://fetch.spec.whatwg.org/#data-url-processor

        * platform/network/DataURLDecoder.cpp:
        (WebCore::DataURLDecoder::parseMediaType):
        (WebCore::DataURLDecoder::DecodeTask::DecodeTask):
        (WebCore::DataURLDecoder::DecodeTask::process):
        (WebCore::DataURLDecoder::createDecodeTask):
        (WebCore::DataURLDecoder::decode):

2018-12-05  Frederic Wang  <fwang@igalia.com>

        Unreviewed build fix.

        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm: Add missing header.

2018-12-05  Javier Fernandez  <jfernandez@igalia.com>

        [css-grid] Crash on debug changing the style of a positioned element
        https://bugs.webkit.org/show_bug.cgi?id=191473

        Reviewed by Dean Jackson and Zalan Bujtas.

        When an box becomes {out-of,in}-flow, it may be re-parented and it may become a grid
        item. In that case, we must mark the RenderGrid as dirty, so that the grid items
        placement logic is executed again.

        Test: fast/css-grid-layout/grid-crash-out-of-flow-positioned-element.html

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::childFlowStateChangesAndAffectsParentBlock): Consider the case of a box's new parent being a grid container.

2018-12-04  Frederic Wang  <fwang@igalia.com>

        Always pass scrollingGeometry to update*ScrollingNode functions
        https://bugs.webkit.org/show_bug.cgi?id=192358

        Reviewed by Simon Fraser.

        Currently, the scrollingGeometry parameter of updateOverflowScrollingNode is always used
        while the one of updateFrameScrollingNode is never used. Both of them are passed as possibly
        null pointers. This commit makes things more consistent by making the parameter a reference
        and explicitly setting the scrollingGeometry of updateFrameScrollingNode. This will help
        other efforts (such as support for macOS/iOS asynchronous scrolling of overflow nodes /
        subframes or for CSS overscroll-behavior) for which new data members have to be passed to the
        scrolling nodes.

        No new tests, no behavior changes.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateFrameScrollingNode):
        (WebCore::AsyncScrollingCoordinator::updateOverflowScrollingNode):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::updateFrameScrollingNode):
        (WebCore::ScrollingCoordinator::updateOverflowScrollingNode):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollCoordinationForThisFrame):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):

2018-12-04  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in HTMLCollection::updateNamedElementCache
        https://bugs.webkit.org/show_bug.cgi?id=192347

        Reviewed by Darin Adler.

        The bug was caused by CollectionIndexCache's nodeAt caching the length of 1
        when there are no matching elements in the subtree when the index is non-zero.

        A related bug was fixed in r182125 but we were not considering the possibility
        that the index given to this function might be non-zero even when there were
        no matching elements.

        Test: fast/dom/options-collection-zero-length-crash.html

        * dom/CollectionIndexCache.h:
        (WebCore::CollectionIndexCache<Collection, Iterator>::nodeAt):

2018-11-30  Jiewen Tan  <jiewen_tan@apple.com>

        Don't report resource timing to parent frame for history items
        https://bugs.webkit.org/show_bug.cgi?id=192273
        <rdar://problem/45163764>

        Reviewed by Youenn Fablet.

        We should not report history items to its parent frame as those are less
        interested to its parent and might not be the first navigation in the iframes.

        This change aligns the behavior when a cached document is not available for the
        history item with the available case as we don't report resource timing for any
        cached main document.

        Test: http/tests/misc/resource-timing-navigation-in-restored-iframe-2.html

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

2018-12-04  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r238090): position:fixed sidebar on https://www.w3.org/TR/SVG2/coords.html does not stay fixed
        https://bugs.webkit.org/show_bug.cgi?id=192320
        <rdar://problem/46429833>

        Reviewed by Zalan Bujtas.
        
        Re-land r238840 with a more reliable test.
        
        When we fall into slow scrolling mode (for example, because of background-attachment: fixed),
        RenderLayerCompositor::updateCompositingLayers() needs to set the geometry dirty bit on layers
        for viewport-constrained objects so we update them.
        
        This is only necessary for page scrolling; for overflow scrolls, updateLayerPositions() already
        does enough dirtying that fixed layers nested inside scrollers get updated.

        Test: compositing/fixed-with-main-thread-scrolling.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):

2018-12-04  Youenn Fablet  <youenn@apple.com>

        Fix MediaRecorder flaky tests
        https://bugs.webkit.org/show_bug.cgi?id=192371

        Reviewed by Eric Carlson.

        No change of behavior.

        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        Reset to use real MediaRecorder by default.

2018-12-04  Justin Michaud  <justin_michaud@apple.com>

        CSS Painting API should allow image values in inputProperties
        https://bugs.webkit.org/show_bug.cgi?id=192200

        Reviewed by Dean Jackson.

        Adds new TypedOMCSSImageValue wrapper. We rename all the existing ones so that the naming is consistent (CSSImageValue is already a thing).
        Finally, we let CanvasRenderingContext2DBase render these.

        Tests: fast/css-custom-paint/arguments.html
               fast/css-custom-paint/image.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/CallTracerTypes.h:
        * bindings/js/JSTypedOMCSSStyleValueCustom.cpp: Renamed from Source/WebCore/bindings/js/JSCSSStyleValueCustom.cpp.
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        * bindings/js/WebCoreBuiltinNames.h:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::customPropertyValue):
        * css/CSSCustomPropertyValue.cpp:
        (WebCore::CSSCustomPropertyValue::equals const):
        (WebCore::CSSCustomPropertyValue::customCSSText const):
        (WebCore::CSSCustomPropertyValue::tokens const):
        * css/CSSCustomPropertyValue.h:
        * css/CSSPaintImageValue.cpp:
        (WebCore::CSSPaintImageValue::image):
        * css/typedom/StylePropertyMapReadOnly.h:
        (WebCore::StylePropertyMapReadOnly::create):
        (WebCore::StylePropertyMapReadOnly::get const):
        (WebCore::StylePropertyMapReadOnly::StylePropertyMapReadOnly):
        * css/typedom/StylePropertyMapReadOnly.idl:
        * css/typedom/TypedOMCSSImageValue.h: Copied from Source/WebCore/css/typedom/CSSUnitValue.h.
        * css/typedom/TypedOMCSSImageValue.idl: Copied from Source/WebCore/css/typedom/CSSStyleValue.idl.
        * css/typedom/TypedOMCSSNumericValue.h: Renamed from Source/WebCore/css/typedom/CSSNumericValue.h.
        * css/typedom/TypedOMCSSNumericValue.idl: Renamed from Source/WebCore/css/typedom/CSSNumericValue.idl.
        * css/typedom/TypedOMCSSStyleValue.h: Renamed from Source/WebCore/css/typedom/CSSStyleValue.h.
        (WebCore::TypedOMCSSStyleValue::isImageValue):
        * css/typedom/TypedOMCSSStyleValue.idl: Renamed from Source/WebCore/css/typedom/CSSStyleValue.idl.
        * css/typedom/TypedOMCSSUnitValue.h: Renamed from Source/WebCore/css/typedom/CSSUnitValue.h.
        * css/typedom/TypedOMCSSUnitValue.idl: Renamed from Source/WebCore/css/typedom/CSSUnitValue.idl.
        * css/typedom/TypedOMCSSUnparsedValue.h: Renamed from Source/WebCore/css/typedom/CSSUnparsedValue.h.
        * css/typedom/TypedOMCSSUnparsedValue.idl: Renamed from Source/WebCore/css/typedom/CSSUnparsedValue.idl.
        * 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::buildAction):
        * page/WindowOrWorkerGlobalScope.idl:
        * platform/graphics/CustomPaintImage.cpp:
        (WebCore::CustomPaintImage::doCustomPaint):

2018-12-04  Chris Dumez  <cdumez@apple.com>

        Regression(r238817) PSON Page Cache API tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=192348

        Reviewed by Alex Christensen.

        * page/MemoryRelease.cpp:
        (WebCore::releaseCriticalMemory):
        (WebCore::releaseMemory):
        * page/MemoryRelease.h:

2018-12-04  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238838.

        The layout test added with this change is failing on iOS.

        Reverted changeset:

        "Thick overlines and line-throughs grow in the wrong
        direction"
        https://bugs.webkit.org/show_bug.cgi?id=192264
        https://trac.webkit.org/changeset/238838

2018-12-04  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238840.

        The layout test added with this change is frequently failing.

        Reverted changeset:

        "REGRESSION (r238090): position:fixed sidebar on
        https://www.w3.org/TR/SVG2/coords.html does not stay fixed"
        https://bugs.webkit.org/show_bug.cgi?id=192320
        https://trac.webkit.org/changeset/238840

2018-12-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Move URLSoup back to WebCore after r238771
        https://bugs.webkit.org/show_bug.cgi?id=192306

        Reviewed by Michael Catanzaro.

        Add soupURIToURL() and urlToSoupURI() to replace the URL contructor taking a Soup URI and
        URL::createSoupURI(). Fix several build failures that showed up after removing the soup includes from URL
        header.

        * platform/Cookie.h:
        * platform/SharedBuffer.h:
        * platform/SourcesSoup.txt:
        * platform/network/soup/CookieSoup.cpp:
        * platform/network/soup/GUniquePtrSoup.h: Renamed from Source/WTF/wtf/glib/GUniquePtrSoup.h.
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):
        (WebCore::NetworkStorageSession::deleteCookie const):
        (WebCore::NetworkStorageSession::getCookies):
        (WebCore::NetworkStorageSession::getRawCookies const):
        (WebCore::cookiesForSession):
        * platform/network/soup/ResourceErrorSoup.cpp:
        (WebCore::failingURI):
        * platform/network/soup/ResourceHandleSoup.cpp:
        * platform/network/soup/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupMessageMembers const):
        (WebCore::ResourceRequest::updateFromSoupMessage):
        (WebCore::ResourceRequest::createSoupURI const):
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::updateFromSoupMessage):
        * platform/network/soup/SocketStreamHandleImpl.h:
        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        (WebCore::SocketStreamHandleImpl::create):
        * platform/network/soup/SoupNetworkSession.cpp:
        * platform/network/soup/URLSoup.cpp: Copied from Source/WTF/wtf/glib/URLSoup.cpp.
        (WebCore::soupURIToURL):
        (WebCore::urlToSoupURI):
        * platform/network/soup/URLSoup.h: Renamed from Source/WTF/wtf/glib/URLSoup.cpp.

2018-12-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: tests should support async operations
        https://bugs.webkit.org/show_bug.cgi?id=192171
        <rdar://problem/46423562>

        Reviewed by Joseph Pecoraro.

        * page/Settings.yaml:
        * dom/ScriptExecutionContext.cpp:
        (ScriptExecutionContext::reportUnhandledPromiseRejection):
        Add setting for muting the "Unhandled Promise Rejection" console message.

2018-12-03  Tim Horton  <timothy_horton@apple.com>

        Fix the build

        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        Unified sources, of course.

2018-12-03  Youenn Fablet  <youenn@apple.com>

        A sender created through addTransceiver and populated using addTrack should have its source set
        https://bugs.webkit.org/show_bug.cgi?id=192136

        Reviewed by Eric Carlson.

        In case libwebrtc backend is already created, we need to make sure to
        set the track source to the libwebrtc sender backend that is actually
        tied to the sender.

        Covered by updated test.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::removeTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::addTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:

2018-12-03  YUHAN WU  <yuhan_wu@apple.com>

        Implement non-timeslice mode encoding for MediaRecorder
        https://bugs.webkit.org/show_bug.cgi?id=192069

        Reviewed by Youenn Fablet.

        Implement the encoding for non-timeslice mode of MediaRecorder.
        It only supports to record MP4 file through H264 and AAC encoding, we will need to support more MIME types and encoding methods.
        Add a API in internals to allow testings to turn on the mock source.

        Tests: http/wpt/mediarecorder/MediaRecorder-AV-audio-only-dataavailable.html
               http/wpt/mediarecorder/MediaRecorder-AV-audio-video-dataavailable.html
               http/wpt/mediarecorder/MediaRecorder-AV-video-only-dataavailable.html

        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::create):
        (WebCore::MediaRecorder::setCustomPrivateRecorderCreator):
        (WebCore::MediaRecorder::getPrivateImpl):
        (WebCore::MediaRecorder::MediaRecorder):
        (WebCore::MediaRecorder::stopRecording):
        (WebCore::MediaRecorder::stopRecordingInternal):
        (WebCore::MediaRecorder::createRecordingDataBlob):
        (WebCore::MediaRecorder::scheduleDeferredTask):
        * Modules/mediarecorder/MediaRecorder.h:
        * Modules/mediarecorder/MediaRecorder.idl:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediarecorder/MediaRecorderPrivate.h:
        (WebCore::MediaRecorderPrivate::stopRecording):
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp: Added.
        (WebCore::MediaRecorderPrivateAVFImpl::create):
        (WebCore::MediaRecorderPrivateAVFImpl::MediaRecorderPrivateAVImpl):
        (WebCore::MediaRecorderPrivateAVFImpl::sampleBufferUpdated):
        (WebCore::MediaRecorderPrivateAVFImpl::audioSamplesAvailable):
        (WebCore::MediaRecorderPrivateAVFImpl::stopRecording):
        (WebCore::MediaRecorderPrivateAVFImpl::fetchData):
        (WebCore::MediaRecorderPrivateAVFImpl::mimeType):
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h: Added.
        * platform/mediarecorder/MediaRecorderPrivateMock.cpp:
        (WebCore::MediaRecorderPrivateMock::fetchData):
        (WebCore::MediaRecorderPrivateMock::mimeType):
        * platform/mediarecorder/MediaRecorderPrivateMock.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h: Added.
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm: Added.
        (WebCore::MediaRecorderPrivateWriter::setupWriter):
        (WebCore::MediaRecorderPrivateWriter::setVideoInput):
        (WebCore::MediaRecorderPrivateWriter::setAudioInput):
        (WebCore::copySampleBufferWithCurrentTimeStamp):
        (WebCore::MediaRecorderPrivateWriter::appendVideoSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::appendAudioSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::stopRecording):
        (WebCore::MediaRecorderPrivateWriter::fetchData):
        * testing/Internals.cpp:
        (WebCore::createRecorderMockSource):
        (WebCore::Internals::setCustomPrivateRecorderCreator):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-12-03  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r238090): position:fixed sidebar on https://www.w3.org/TR/SVG2/coords.html does not stay fixed
        https://bugs.webkit.org/show_bug.cgi?id=192320
        <rdar://problem/46429833>

        Reviewed by Zalan Bujtas.
        
        When we fall into slow scrolling mode (for example, because of background-attachment: fixed),
        RenderLayerCompositor::updateCompositingLayers() needs to set the geometry dirty bit on layers
        for viewport-constrained objects so we update them.
        
        This is only necessary for page scrolling; for overflow scrolls, updateLayerPositions() already
        does enough dirtying that fixed layers nested inside scrollers get updated.

        Test: compositing/fixed-with-main-thread-scrolling.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):

2018-12-03  Justin Michaud  <justin_michaud@apple.com>

        CSS Painting API should scale display list when drawing
        https://bugs.webkit.org/show_bug.cgi?id=192217

        Reviewed by Simon Fraser.

        When we replay the display list, fix the scaling. The separate buffer is needed to make sure that globalCompositeOperation functions correctly.

        * html/CustomPaintCanvas.cpp:
        (WebCore::CustomPaintCanvas::replayDisplayList const):
        * html/CustomPaintCanvas.h:
        * platform/graphics/CustomPaintImage.cpp:
        (WebCore::CustomPaintImage::doCustomPaint):

2018-12-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Thick overlines and line-throughs grow in the wrong direction
        https://bugs.webkit.org/show_bug.cgi?id=192264

        Reviewed by Dean Jackson.

        Overlines should grow upward, and line-throughs should stay centered.

        Test: fast/css3-text/css3-text-decoration/text-decoration-thicknes-overline-grow-direction.html

        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::paintTextDecoration):
        * style/InlineTextBoxStyle.cpp:
        (WebCore::visualOverflowForDecorations):

2018-12-03  Simon Fraser  <simon.fraser@apple.com>

        Viewport-constrained renderers are always RenderLayerModelObjects
        https://bugs.webkit.org/show_bug.cgi?id=192342

        Reviewed by Myles C. Maxfield.

        addViewportConstrainedObject/removeViewportConstrainedObject can take RenderLayerModelObjects,
        since all viewport-constrained renderers have layers.

        * page/FrameView.cpp:
        (WebCore::FrameView::addViewportConstrainedObject):
        (WebCore::FrameView::removeViewportConstrainedObject):
        * page/FrameView.h:
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::styleDidChange): The 0 argument is actually a nullptr RenderGeometryMap,
        which has a default value, and the comment was obsolete.

2018-12-03  Don Olmstead  <don.olmstead@sony.com>

        Fix some unused parameter warnings
        https://bugs.webkit.org/show_bug.cgi?id=192336

        Reviewed by Fujii Hironori.

        * Modules/indexeddb/server/IDBSerialization.cpp:
        (WebCore::isLegacySerializedIDBKeyData):
        * platform/FileSystem.cpp:
        (WebCore::FileSystem::openAndLockFile):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::bindVertexArray):
        * platform/network/curl/CertificateInfo.h:
        (WTF::Persistence::Coder<WebCore::CertificateInfo>::encode):
        (WTF::Persistence::Coder<WebCore::CertificateInfo>::decode):

2018-12-03  Keith Rollin  <krollin@apple.com>

        Add .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=192082
        <rdar://problem/46312533>

        Reviewed by Brent Fulgham.

        Add .xcfilelist files for Generate Derived Sources and Generate
        Unified Sources build phases in Xcode. These are just being staged for
        now; they'll be added to the Xcode projects later.

        No new tests -- no changed functionality.

        * DerivedSources-input.xcfilelist: Added.
        * DerivedSources-output.xcfilelist: Added.
        * UnifiedSources-input.xcfilelist: Added.
        * UnifiedSources-output.xcfilelist: Added.

2018-12-03  Alex Christensen  <achristensen@webkit.org>

        Add WKWebProcessPlugInLoadDelegate SPI willStartProvisionalLoadForFrame with a completion handler
        https://bugs.webkit.org/show_bug.cgi?id=192272

        Reviewed by Brady Eidson.

        This is needed for rdar://problem/45910057
        Covered by an API test.

        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::prepareForLoadStart):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:

2018-12-03  Zalan Bujtas  <zalan@apple.com>

        [iOS] Unreviewed build fix.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::fired):

2018-12-03  Jer Noble  <jer.noble@apple.com>

        Get rid of old, dead Mac video fullscreen code.
        https://bugs.webkit.org/show_bug.cgi?id=192315

        Reviewed by Eric Carlson.

        * PlatformMac.cmake:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::supportsFullscreen const):

2018-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        title attribute on style & link elements should be ignored inside a shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=191297

        Reviewed by Antti Koivisto.

        Fixed the by not setting the stylesheet's title even when the title content attribute is present
        or set on SVG/HTML style and link elements inside a shadow tree.

        Test: fast/shadow-dom/stylesheet-title-in-shadow-tree.html

        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::createSheet):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseAttribute):
        (WebCore::HTMLLinkElement::initializeStyleSheet):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::parseAttribute):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::collectActiveStyleSheets):
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::parseAttribute):

2018-12-03  Zalan Bujtas  <zalan@apple.com>

        [iOS] Add logging channel for hover related content observation
        https://bugs.webkit.org/show_bug.cgi?id=192312

        Reviewed by Simon Fraser.

        * dom/Document.cpp:
        (WebCore::Document::scheduleStyleRecalc):
        (WebCore::Document::updateStyleIfNeeded):
        (WebCore::Document::platformSuspendOrStopActiveDOMObjects):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::fired):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clearTimeout):
        * page/Frame.cpp:
        (WebCore::Frame::willDetachPage):
        * platform/Logging.h:

2018-12-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] Use SoupSession instead of SoupSessionAsync
        https://bugs.webkit.org/show_bug.cgi?id=107451

        Reviewed by Carlos Garcia Campos.

        With glib-networking 2.57.1, WebKit is no longer able to load TLS error pages. The problem
        is a network process deadlock caused by a change in how glib-networking performs certificate
        verification. Previously it verified certificates *after* the TLS handshake had completed,
        which was weirdly late, but previously not problematic. But now that TLS 1.3 exists,
        application data can be sent before certificate verification occurs, which is no good. So I
        moved verification to occur during the handshake. I needed to do this regardless because I
        need to add a new callback in GnuTLS for another feature. This introduced a deadlock in
        WebKit:

         - glib-networking detects an unacceptable certificate, emits accept-certificate signal
         - NetworkDataTaskSoup::tlsConnectionAcceptCertificate calls
           NetworkDataTaskSoup::invalidateAndCancel calls NetworkDataTaskSoup::clearRequest
         - NetworkDataTaskSoup::clearRequest calls soup_session_cancel_message

        The problem is that, in the deprecated SoupSessionAsync used by WebKit, cancellation is
        always *synchronous* despite the name of the class. So soup_session_cancel_message winds up
        doing its thing to close everything out, and that eventually ends up in a synchronous call
        to g_tls_connection_gnutls_close. The close operation can't proceed until the TLS handshake
        is finished, and the handshake is blocked waiting for WebKit to return from its
        accept-certificate handler. So the close operation winds up polling forever waiting for the
        handshake to finish. Deadlock.

        The only changes required in WebKit to use the modern SoupSession are adjustments for the
        new default property values. Most of the properties we used to set explicitly are now
        defaults and should be removed. Additionally, SoupSession has default timeouts, which we
        want to override to allow NetworkDataTaskSoup to implement its own timeouts.

        No new tests because this is covered by TestSSL (which would be failing if run with the
        newer glib-networking).

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::SoupNetworkSession):

2018-12-03  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Use WallTime for file time
        https://bugs.webkit.org/show_bug.cgi?id=192287

        Reviewed by Darin Adler.

        This patch changes a type of file time from double to WallTime to use strongly typed file time.

        No behavior change.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::details const):
        * Modules/webdatabase/DatabaseDetails.h:
        (WebCore::DatabaseDetails::DatabaseDetails):
        (WebCore::DatabaseDetails::creationTime const):
        (WebCore::DatabaseDetails::modificationTime const):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::ProposedDatabase::ProposedDatabase):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        * fileapi/AsyncFileStream.cpp:
        (WebCore::AsyncFileStream::getSize):
        * fileapi/AsyncFileStream.h:
        * fileapi/File.cpp:
        (WebCore::File::lastModified const):
        * page/Page.cpp:
        (WebCore::Page::userStyleSheetLocationChanged):
        (WebCore::Page::userStyleSheet const):
        * page/Page.h:
        * platform/FileMetadata.h:
        * platform/FileStream.cpp:
        (WebCore::FileStream::getSize):
        * platform/FileStream.h:
        * platform/FileSystem.cpp:
        (WebCore::FileSystem::getFileModificationTime): Deleted.
        * platform/FileSystem.h:
        (WebCore::FileSystem::invalidFileTime): Deleted.
        (WebCore::FileSystem::isValidFileTime): Deleted.
        * platform/glib/FileSystemGlib.cpp:
        (WebCore::FileSystem::getFileCreationTime):
        (WebCore::FileSystem::getFileModificationTime):
        (WebCore::FileSystem::fileMetadataUsingFunction):
        * platform/network/BlobDataFileReference.cpp:
        (WebCore::BlobDataFileReference::BlobDataFileReference):
        (WebCore::BlobDataFileReference::expectedModificationTime):
        * platform/network/BlobDataFileReference.h:
        * platform/network/FormData.cpp:
        (WebCore::FormData::appendFile):
        (WebCore::FormData::appendFileRange):
        * platform/network/FormData.h:
        (WebCore::FormDataElement::FormDataElement):
        (WebCore::FormDataElement::EncodedFileData::decode):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::advanceCurrentStream):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::appendEncodedBlobItemToSoupMessageBody):
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::FileSystem::getFileCreationTime):
        (WebCore::FileSystem::getFileModificationTime):
        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::databaseCreationTime):
        (WebCore::SQLiteFileSystem::databaseModificationTime):
        * platform/sql/SQLiteFileSystem.h:
        * platform/win/FileSystemWin.cpp:
        (WebCore::FileSystem::getFileModificationTime):
        (WebCore::FileSystem::getFileCreationTime):
        (WebCore::FileSystem::findDataToFileMetadata):

2018-12-03  Dean Jackson  <dino@apple.com>

        Fix iOS Simulator Release test crashes.

        * platform/network/ios/WebCoreURLResponseIOS.mm:
        (WebCore::adjustMIMETypeIfNecessary): Check for null before using the
        new MIME type.

2018-12-03  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] 'devicechange' event when more capture device information are revealed.
        https://bugs.webkit.org/show_bug.cgi?id=192268

        Reviewed by Youenn Fablet.

        Test: fast/mediastream/enumerate-devices-change-event.html

        * Modules/mediastream/MediaDevicesRequest.cpp:
        (WebCore::MediaDevicesRequest::start): Remove code to modify device based on access, that is
        now done in the UI process.
        (WebCore::MediaDevicesRequest::filterDeviceList): Deleted.
        * Modules/mediastream/MediaDevicesRequest.h:
        * platform/mediastream/RealtimeMediaSourceCenter.h:

2018-12-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOSMac] Unable to upload non-image files using drag and drop in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=192283
        <rdar://problem/46399461>

        Reviewed by Ryosuke Niwa.

        Currently on iOS, file URLs aren't generally written to the pasteboard during drag and drop unless the
        application providing the data explicitly registers "public.file-url" to item providers. As such, our current
        logic on iOS for handling drops does not attempt to prevent "public.file-url" from being advertised as the
        "text/uri-list" MIME type in DataTransfer, though we do currently succeed in suppressing access to the file URL.

        However, on iOSMac, the scenario in which file URLs are registered to item providers becomes pertinent when
        uploading files from other macOS apps (e.g. Finder) into a WKWebView running in iOSMac. Furthermore, the
        `preferredPresentationStyle` flag on `NSItemProvider` is unavailable in iOSMac; currently, this flag is our
        primary cue on iOS that an item should be treated as an attachment rather than inline data. In order to support
        file uploads in iOSMac, we make several adjustments to drop handling logic in iOS to handle the case where the
        "public.file-url" type is registered. See below for more details.

        Tests:  DragAndDropTests.DataTransferExposePlainTextWithFileURLAsFile
                DragAndDropTests.DataTransferGetDataWhenDroppingImageWithFileURL

        * platform/PasteboardItemInfo.h:
        (WebCore::PasteboardItemInfo::encode const):
        (WebCore::PasteboardItemInfo::decode):

        Add a new flag that is set if and only if the item provider contains the "public.file-url" type, and also
        contains some non-URL data type that conforms to one of the file types supported for file uploads (i.e.
        "public.content", zip archives, and folders).

        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::Pasteboard::fileContentState):

        Consider the pasteboard to contain files in the case where one or more of the items contains a file URL, along
        with some other pasteboard data that can be represented as a file upload.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::informationForItemAtIndex):
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):

        If the pasteboard contains "public.file-url", don't consider "text/uri-list" to be one of the data types that's
        safe to expose to the page. Our current behavior in this case is that we will advertise "text/uri-list" as a
        pasteboard type in the DataTransfer, but if the page attempts to request this information, we simply return the
        empty string. Instead, we shouldn't expose "text/uri-list" as a type in the first place.

        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:

        Add a few more `__bridge`-ing casts where appropriate.

        (typeConformsToTypes):

        Move this further up the file so that it can be used in `NSItemProvider (WebCoreExtras)`.

        (-[NSItemProvider web_containsFileURLAndFileUploadContent]):

        Add a helper method on NSItemProvider to determine whether an item provider has a file URL, as well as a content
        type suitable for file uploads.

        (-[WebItemProviderLoadResult canBeRepresentedAsFileUpload]):

        This currently always returns `NO` in iOSMac; instead, return `YES` on both iOS and iOSMac in the case where the
        item provider contains a file URL and content which may be uploaded.

        (-[WebItemProviderPasteboard preferredFileUploadURLAtIndex:fileType:]):
        (-[WebItemProviderPasteboard typeIdentifiersToLoad:]):

        Refactor this to take an `NSItemProvider` instead of a list of type identifiers, and bail out of loading data
        for "public.url" if the item provider contains a file URL.

        (-[WebItemProviderPasteboard doAfterLoadingProvidedContentIntoFileURLs:synchronousTimeout:]):
        (-[WebItemProviderPasteboard typeIdentifiersToLoadForRegisteredTypeIdentifiers:]): Deleted.

2018-12-02  Zalan Bujtas  <zalan@apple.com>

        Add a runtime feature flag for LayoutFormattingContext.
        https://bugs.webkit.org/show_bug.cgi?id=192280

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setLayoutFormattingContextEnabled):
        (WebCore::RuntimeEnabledFeatures::layoutFormattingContextEnabled const):

2018-12-01  Brent Fulgham  <bfulgham@apple.com>

        Lifetime of HTMLMediaElement is not properly handled in asynchronous actions
        https://bugs.webkit.org/show_bug.cgi?id=192087
        <rdar://problem/45975230>

        Reviewed by Dean Jackson.

        The HTMLMediaElement performs operations that allow arbitrary JavaScript to run. We need to make
        sure the active media element is protected until those calls complete.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::didFinishInsertingNode):
        (WebCore::HTMLMediaElement::exitFullscreen):
        (WebCore::HTMLMediaElement::markCaptionAndSubtitleTracksAsUnconfigured):
        (WebCore::HTMLMediaElement::scheduleConfigureTextTracks):
        (WebCore::HTMLMediaElement::scheduleMediaEngineWasUpdated):
        (WebCore::HTMLMediaElement::scheduleUpdatePlayState):
        (WebCore::HTMLMediaElement::scheduleUpdateMediaState):

2018-12-01  Chris Dumez  <cdumez@apple.com>

        [PSON] process-swapping may occur even though opener has handle to openee
        https://bugs.webkit.org/show_bug.cgi?id=192277

        Reviewed by Antti Koivisto.

        Process-swapping may occur even though opener has handle to openee, which is not Web-compatible. The reason
        is that we rely on the window not having an opener to process-swap. However, the opener can be disowned,
        which does not mean that the opener doesn't still have a handle to its openee.

        To address the issue:
        - Renamed openedViaWindowOpenWithOpener flag to openedByDOMWithOpener
        - Make sure this flag gets set if an opener have ever been set for the browsing context
        - Do not process-swap if this flag is set
        - Drop opener from NavigationAction since it does not provide meaningful information to decide whether
          to process-swap or not.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setOpener):
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::openedByDOMWithOpener const):
        (WebCore::NavigationAction::setOpenedByDOMWithOpener):
        (WebCore::NavigationAction::setOpener): Deleted.
        (WebCore::NavigationAction::opener const): Deleted.
        (WebCore::NavigationAction::openedViaWindowOpenWithOpener const): Deleted.
        (WebCore::NavigationAction::setOpenedViaWindowOpenWithOpener): Deleted.
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        * page/Page.h:
        (WebCore::Page::openedByDOMWithOpener const):
        (WebCore::Page::setOpenedByDOMWithOpener):
        (WebCore::Page::openedViaWindowOpenWithOpener const): Deleted.
        (WebCore::Page::setOpenedViaWindowOpenWithOpener): Deleted.

2018-12-01  Christopher Reid  <chris.reid@sony.com>

        Add generic implementations to FileSystemPOSIX.cpp
        https://bugs.webkit.org/show_bug.cgi?id=192263

        Reviewed by Yusuke Suzuki.

        No new tests, no change in behavior.

        Add generic FileSystemPOSIX implementations for:
            - stringFromFileSystemRepresentation
            - fileSystemRepresentation
            - moveFile
            - getVolumeFreeSpace

        Also removing an unneeded PLATFORM(GTK) check since GTK is only using FileSystemGlib

        * platform/posix/FileSystemPOSIX.cpp:

2018-12-01  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Call instrinsicWidthConstraints on the correct formatting state.
        https://bugs.webkit.org/show_bug.cgi?id=192274

        Reviewed by Antti Koivisto.

        When we call intrinsic width on a formatting context root, we need to use the formatting state
        that this root constructs and not the one it lives in.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::instrinsicWidthConstraints const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::instrinsicWidthConstraints const): it's the caller's responsiblitiy to store the intrinsic values.

2018-11-30  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build.

        * platform/network/curl/CookieJarCurl.cpp:
        * platform/network/curl/PublicSuffixCurl.cpp:

2018-11-30  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build.

        * platform/network/curl/CookieJarCurl.h:

2018-11-30  Alex Christensen  <achristensen@webkit.org>

        Move URL from WebCore to WTF
        https://bugs.webkit.org/show_bug.cgi?id=190234

        Reviewed by Keith Miller.

        A URL is a low-level concept that does not depend on other classes in WebCore.
        We are starting to use URLs in JavaScriptCore for modules.
        I need URL and URLParser in a place with fewer dependencies for rdar://problem/44119696

        * Modules/applepay/ApplePaySession.h:
        * Modules/applepay/ApplePayValidateMerchantEvent.h:
        * Modules/applepay/PaymentCoordinator.cpp:
        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentCoordinatorClient.h:
        * Modules/applepay/PaymentSession.h:
        * Modules/applicationmanifest/ApplicationManifest.h:
        * Modules/beacon/NavigatorBeacon.cpp:
        * Modules/cache/DOMCache.cpp:
        * Modules/fetch/FetchLoader.h:
        * Modules/mediasession/MediaSessionMetadata.h:
        * Modules/mediasource/MediaSourceRegistry.cpp:
        * Modules/mediasource/MediaSourceRegistry.h:
        * Modules/mediastream/MediaStream.cpp:
        * Modules/mediastream/MediaStreamRegistry.cpp:
        * Modules/mediastream/MediaStreamRegistry.h:
        * Modules/navigatorcontentutils/NavigatorContentUtilsClient.h:
        * Modules/notifications/Notification.h:
        * Modules/paymentrequest/MerchantValidationEvent.h:
        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/plugins/PluginReplacement.h:
        * Modules/webaudio/AudioContext.h:
        * Modules/websockets/ThreadableWebSocketChannel.h:
        * Modules/websockets/WebSocket.h:
        * Modules/websockets/WebSocketHandshake.cpp:
        * Modules/websockets/WebSocketHandshake.h:
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        * PlatformMac.cmake:
        * PlatformWin.cmake:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/CachedModuleScriptLoader.h:
        * bindings/js/CachedScriptFetcher.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptModuleLoader.h:
        * bindings/js/ScriptSourceCode.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        * bindings/scripts/test/JS/JSMapLike.cpp:
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        * bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForLoad):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForPingLoad):
        (WebCore::ContentExtensions::applyBlockedStatusToRequest):
        * contentextensions/ContentExtensionsBackend.h:
        * css/CSSValue.h:
        * css/StyleProperties.h:
        * css/StyleResolver.h:
        * css/StyleSheet.h:
        * css/StyleSheetContents.h:
        * css/parser/CSSParserContext.h:
        (WebCore::CSSParserContextHash::hash):
        (WTF::HashTraits<WebCore::CSSParserContext>::constructDeletedValue):
        * css/parser/CSSParserIdioms.h:
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::setDataFromItemList):
        * dom/Document.cpp:
        (WebCore::Document::setURL):
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::completeURL const):
        (WebCore::Document::ensureTemplateDocument):
        * dom/Document.h:
        (WebCore::Document::urlForBindings const):
        * dom/Element.cpp:
        (WebCore::Element::isJavaScriptURLAttribute const):
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::parserContextForElement):
        * dom/Node.cpp:
        (WebCore::Node::baseURI const):
        * dom/Node.h:
        * dom/ScriptElement.h:
        * dom/ScriptExecutionContext.h:
        * dom/SecurityContext.h:
        * editing/Editor.cpp:
        (WebCore::Editor::pasteboardWriterURL):
        * editing/Editor.h:
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendQuotedURLAttributeValue):
        * editing/cocoa/DataDetection.h:
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::userVisibleString):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::replaceRichContentWithAttachments):
        (WebCore::WebContentReader::readWebArchive):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::plainTextFromPasteboard):
        (WebCore::Editor::writeImageToPasteboard):
        * editing/markup.cpp:
        (WebCore::removeSubresourceURLAttributes):
        (WebCore::createFragmentFromMarkup):
        * editing/markup.h:
        * fileapi/AsyncFileStream.cpp:
        * fileapi/AsyncFileStream.h:
        * fileapi/Blob.h:
        * fileapi/BlobURL.cpp:
        * fileapi/BlobURL.h:
        * fileapi/File.h:
        * fileapi/FileReaderLoader.h:
        * fileapi/ThreadableBlobRegistry.h:
        * history/CachedFrame.h:
        * history/HistoryItem.h:
        * html/DOMURL.cpp:
        (WebCore::DOMURL::create):
        * html/DOMURL.h:
        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::archiveResourceURL):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed const):
        (WebCore::HTMLFrameElementBase::openURL):
        (WebCore::HTMLFrameElementBase::setLocation):
        * html/HTMLInputElement.h:
        * html/HTMLLinkElement.h:
        * html/HTMLMediaElement.cpp:
        (WTF::LogArgument<URL>::toString):
        (WTF::LogArgument<WebCore::URL>::toString): Deleted.
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::allowedToLoadFrameURL):
        * html/ImageBitmap.h:
        * html/MediaFragmentURIParser.h:
        * html/PublicURLManager.cpp:
        * html/PublicURLManager.h:
        * html/URLInputType.cpp:
        * html/URLRegistry.h:
        * html/URLSearchParams.cpp:
        (WebCore::URLSearchParams::URLSearchParams):
        (WebCore::URLSearchParams::toString const):
        (WebCore::URLSearchParams::updateURL):
        (WebCore::URLSearchParams::updateFromAssociatedURL):
        * html/URLUtils.h:
        (WebCore::URLUtils<T>::setHost):
        (WebCore::URLUtils<T>::setPort):
        * html/canvas/CanvasRenderingContext.cpp:
        * html/canvas/CanvasRenderingContext.h:
        * html/parser/HTMLParserIdioms.cpp:
        * html/parser/XSSAuditor.cpp:
        (WebCore::semicolonSeparatedValueContainsJavaScriptURL):
        (WebCore::XSSAuditor::filterScriptToken):
        (WebCore::XSSAuditor::filterObjectToken):
        (WebCore::XSSAuditor::filterParamToken):
        (WebCore::XSSAuditor::filterEmbedToken):
        (WebCore::XSSAuditor::filterFormToken):
        (WebCore::XSSAuditor::filterInputToken):
        (WebCore::XSSAuditor::filterButtonToken):
        (WebCore::XSSAuditor::eraseDangerousAttributesIfInjected):
        (WebCore::XSSAuditor::isLikelySafeResource):
        * html/parser/XSSAuditor.h:
        * html/parser/XSSAuditorDelegate.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::openInNewTab):
        * inspector/InspectorInstrumentation.h:
        * inspector/agents/InspectorNetworkAgent.cpp:
        * inspector/agents/InspectorNetworkAgent.h:
        * inspector/agents/InspectorPageAgent.h:
        * inspector/agents/InspectorWorkerAgent.h:
        * loader/ApplicationManifestLoader.h:
        * loader/CookieJar.h:
        * loader/CrossOriginAccessControl.h:
        * loader/CrossOriginPreflightResultCache.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::maybeLoadEmpty):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::serverRedirectSourceForHistory const):
        * loader/DocumentWriter.h:
        * loader/FormSubmission.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::createWindow):
        * loader/FrameLoaderClient.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::currentItemShouldBeReplaced const):
        (WebCore::HistoryController::initializeItem):
        * loader/LinkLoader.h:
        * loader/LoadTiming.h:
        * loader/LoaderStrategy.h:
        * loader/MixedContentChecker.cpp:
        (WebCore::MixedContentChecker::checkFormForMixedContent const):
        * loader/MixedContentChecker.h:
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::shouldScheduleNavigation const):
        * loader/NavigationScheduler.h:
        * loader/PingLoader.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        * loader/ResourceLoadInfo.h:
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::requestStorageAccessUnderOpener):
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatistics.h:
        * loader/ResourceLoader.h:
        * loader/ResourceTiming.h:
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestFrame):
        * loader/SubframeLoader.h:
        * loader/SubstituteData.h:
        * loader/appcache/ApplicationCache.h:
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/ApplicationCacheHost.h:
        * loader/appcache/ApplicationCacheStorage.cpp:
        * loader/appcache/ApplicationCacheStorage.h:
        * loader/appcache/ManifestParser.cpp:
        * loader/appcache/ManifestParser.h:
        * loader/archive/ArchiveResourceCollection.h:
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createFromSelection):
        * loader/cache/CachedResource.cpp:
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedStyleSheetClient.h:
        * loader/cache/MemoryCache.h:
        * loader/icon/IconLoader.h:
        * loader/mac/LoaderNSURLExtras.mm:
        * page/CaptionUserPreferencesMediaAF.cpp:
        * page/ChromeClient.h:
        * page/ClientOrigin.h:
        * page/ContextMenuClient.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::checkOrEnableIfNeeded const):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::isInsecureScriptAccess):
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * page/DragController.h:
        * page/EventSource.h:
        * page/Frame.h:
        * page/FrameView.h:
        * page/History.h:
        * page/Location.cpp:
        (WebCore::Location::url const):
        (WebCore::Location::reload):
        * page/Location.h:
        * page/Page.h:
        * page/PageSerializer.h:
        * page/Performance.h:
        * page/PerformanceResourceTiming.cpp:
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::create):
        * page/SecurityOrigin.h:
        * page/SecurityOriginData.h:
        * page/SecurityOriginHash.h:
        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::shouldInheritSecurityOriginFromOwner):
        * page/SecurityPolicy.h:
        * page/SettingsBase.h:
        * page/ShareData.h:
        * page/SocketProvider.h:
        * page/UserContentProvider.h:
        * page/UserContentURLPattern.cpp:
        * page/UserContentURLPattern.h:
        * page/UserScript.h:
        * page/UserStyleSheet.h:
        * page/VisitedLinkStore.h:
        * page/csp/ContentSecurityPolicy.h:
        * page/csp/ContentSecurityPolicyClient.h:
        * page/csp/ContentSecurityPolicyDirectiveList.h:
        * page/csp/ContentSecurityPolicySource.cpp:
        (WebCore::ContentSecurityPolicySource::portMatches const):
        * page/csp/ContentSecurityPolicySource.h:
        * page/csp/ContentSecurityPolicySourceList.cpp:
        * page/csp/ContentSecurityPolicySourceList.h:
        * page/csp/ContentSecurityPolicySourceListDirective.cpp:
        * platform/ContentFilterUnblockHandler.h:
        * platform/ContextMenuItem.h:
        * platform/Cookie.h:
        * platform/CookiesStrategy.h:
        * platform/DragData.h:
        * platform/DragImage.h:
        * platform/FileStream.h:
        * platform/LinkIcon.h:
        * platform/Pasteboard.cpp:
        (WebCore::Pasteboard::canExposeURLToDOMWhenPasteboardContainsFiles):
        * platform/Pasteboard.h:
        * platform/PasteboardStrategy.h:
        * platform/PasteboardWriterData.cpp:
        (WebCore::PasteboardWriterData::setURLData):
        (WebCore::PasteboardWriterData::setURL): Deleted.
        * platform/PasteboardWriterData.h:
        * platform/PlatformPasteboard.h:
        * platform/PromisedAttachmentInfo.h:
        * platform/SSLKeyGenerator.h:
        * platform/SchemeRegistry.cpp:
        (WebCore::SchemeRegistry::isBuiltinScheme):
        * platform/SharedBuffer.h:
        * platform/SharedStringHash.cpp:
        * platform/SharedStringHash.h:
        * platform/SourcesSoup.txt:
        * platform/UserAgent.h:
        * platform/UserAgentQuirks.cpp:
        * platform/UserAgentQuirks.h:
        * platform/cocoa/NetworkExtensionContentFilter.h:
        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::willSendRequest):
        * platform/glib/SSLKeyGeneratorGLib.cpp: Copied from Source/WebCore/page/ShareData.h.
        (WebCore::getSupportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):
        * platform/glib/UserAgentGLib.cpp:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Image.cpp:
        * platform/graphics/Image.h:
        * platform/graphics/ImageObserver.h:
        * platform/graphics/ImageSource.cpp:
        * platform/graphics/ImageSource.h:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcSetUri):
        * platform/graphics/iso/ISOVTTCue.cpp:
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        * platform/gtk/DragImageGtk.cpp:
        * platform/gtk/PasteboardGtk.cpp:
        * platform/gtk/PlatformPasteboardGtk.cpp:
        * platform/gtk/SelectionData.h:
        * platform/ios/PasteboardIOS.mm:
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write):
        * platform/ios/QuickLook.h:
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::asPlainText const):
        * platform/mac/DragImageMac.mm:
        * platform/mac/FileSystemMac.mm:
        (WebCore::FileSystem::setMetadataURL):
        * platform/mac/PasteboardMac.mm:
        * platform/mac/PasteboardWriter.mm:
        (WebCore::createPasteboardWriter):
        * platform/mac/PlatformPasteboardMac.mm:
        * platform/mac/PublicSuffixMac.mm:
        (WebCore::decodeHostName):
        * platform/mac/SSLKeyGeneratorMac.mm:
        * platform/mac/WebCoreNSURLExtras.h:
        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::isArmenianLookalikeCharacter): Deleted.
        (WebCore::isArmenianScriptCharacter): Deleted.
        (WebCore::isASCIIDigitOrValidHostCharacter): Deleted.
        (WebCore::isLookalikeCharacter): Deleted.
        (WebCore::whiteListIDNScript): Deleted.
        (WebCore::readIDNScriptWhiteListFile): Deleted.
        (WebCore::allCharactersInIDNScriptWhiteList): Deleted.
        (WebCore::isSecondLevelDomainNameAllowedByTLDRules): Deleted.
        (WebCore::isRussianDomainNameCharacter): Deleted.
        (WebCore::allCharactersAllowedByTLDRules): Deleted.
        (WebCore::mapHostNameWithRange): Deleted.
        (WebCore::hostNameNeedsDecodingWithRange): Deleted.
        (WebCore::hostNameNeedsEncodingWithRange): Deleted.
        (WebCore::decodeHostNameWithRange): Deleted.
        (WebCore::encodeHostNameWithRange): Deleted.
        (WebCore::decodeHostName): Deleted.
        (WebCore::encodeHostName): Deleted.
        (WebCore::collectRangesThatNeedMapping): Deleted.
        (WebCore::collectRangesThatNeedEncoding): Deleted.
        (WebCore::collectRangesThatNeedDecoding): Deleted.
        (WebCore::applyHostNameFunctionToMailToURLString): Deleted.
        (WebCore::applyHostNameFunctionToURLString): Deleted.
        (WebCore::mapHostNames): Deleted.
        (WebCore::stringByTrimmingWhitespace): Deleted.
        (WebCore::URLByTruncatingOneCharacterBeforeComponent): Deleted.
        (WebCore::URLByRemovingResourceSpecifier): Deleted.
        (WebCore::URLWithData): Deleted.
        (WebCore::dataWithUserTypedString): Deleted.
        (WebCore::URLWithUserTypedString): Deleted.
        (WebCore::URLWithUserTypedStringDeprecated): Deleted.
        (WebCore::hasQuestionMarkOnlyQueryString): Deleted.
        (WebCore::dataForURLComponentType): Deleted.
        (WebCore::URLByRemovingComponentAndSubsequentCharacter): Deleted.
        (WebCore::URLByRemovingUserInfo): Deleted.
        (WebCore::originalURLData): Deleted.
        (WebCore::createStringWithEscapedUnsafeCharacters): Deleted.
        (WebCore::userVisibleString): Deleted.
        (WebCore::isUserVisibleURL): Deleted.
        (WebCore::rangeOfURLScheme): Deleted.
        (WebCore::looksLikeAbsoluteURL): Deleted.
        * platform/mediastream/MediaEndpointConfiguration.h:
        * platform/network/BlobPart.h:
        * platform/network/BlobRegistry.h:
        * platform/network/BlobRegistryImpl.h:
        * platform/network/BlobResourceHandle.cpp:
        * platform/network/CookieRequestHeaderFieldProxy.h:
        * platform/network/CredentialStorage.cpp:
        * platform/network/CredentialStorage.h:
        * platform/network/DataURLDecoder.cpp:
        * platform/network/DataURLDecoder.h:
        * platform/network/FormData.h:
        * platform/network/ProxyServer.h:
        * platform/network/ResourceErrorBase.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::didReceiveResponse):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::redirectedRequest const):
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.h:
        * platform/network/SocketStreamHandle.h:
        * platform/network/cf/DNSResolveQueueCFNet.cpp:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        * platform/network/cf/ProxyServerCFNet.cpp:
        * platform/network/cf/ResourceErrorCF.cpp:
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        * platform/network/curl/CookieJarCurlDatabase.cpp: Added.
        (WebCore::cookiesForSession):
        (WebCore::CookieJarCurlDatabase::setCookiesFromDOM const):
        (WebCore::CookieJarCurlDatabase::setCookiesFromHTTPResponse const):
        (WebCore::CookieJarCurlDatabase::cookiesForDOM const):
        (WebCore::CookieJarCurlDatabase::cookieRequestHeaderFieldValue const):
        (WebCore::CookieJarCurlDatabase::cookiesEnabled const):
        (WebCore::CookieJarCurlDatabase::getRawCookies const):
        (WebCore::CookieJarCurlDatabase::deleteCookie const):
        (WebCore::CookieJarCurlDatabase::getHostnamesWithCookies const):
        (WebCore::CookieJarCurlDatabase::deleteCookiesForHostnames const):
        (WebCore::CookieJarCurlDatabase::deleteAllCookies const):
        (WebCore::CookieJarCurlDatabase::deleteAllCookiesModifiedSince const):
        * platform/network/curl/CookieJarDB.cpp:
        * platform/network/curl/CookieUtil.h:
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/CurlProxySettings.h:
        * platform/network/curl/CurlResponse.h:
        * platform/network/curl/NetworkStorageSessionCurl.cpp:
        * platform/network/curl/ProxyServerCurl.cpp:
        * platform/network/curl/SocketStreamHandleImplCurl.cpp:
        * platform/network/mac/ResourceErrorMac.mm:
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        * platform/network/soup/ProxyServerSoup.cpp:
        * platform/network/soup/ResourceHandleSoup.cpp:
        * platform/network/soup/ResourceRequest.h:
        * platform/network/soup/ResourceRequestSoup.cpp:
        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        * platform/network/soup/SoupNetworkSession.cpp:
        * platform/network/soup/SoupNetworkSession.h:
        * platform/text/TextEncoding.h:
        * platform/win/BString.cpp:
        * platform/win/BString.h:
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::markupToCFHTML):
        * platform/win/ClipboardUtilitiesWin.h:
        * platform/win/DragImageWin.cpp:
        * platform/win/PasteboardWin.cpp:
        * plugins/PluginData.h:
        * rendering/HitTestResult.h:
        * rendering/RenderAttachment.cpp:
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::sourceURI const):
        * svg/SVGURIReference.cpp:
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageCache.h:
        * svg/graphics/SVGImageForContainer.h:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        * testing/Internals.mm:
        (WebCore::Internals::userVisibleString):
        * testing/MockContentFilter.cpp:
        (WebCore::MockContentFilter::willSendRequest):
        * testing/MockPaymentCoordinator.cpp:
        * testing/js/WebCoreTestSupport.cpp:
        * workers/AbstractWorker.h:
        * workers/WorkerGlobalScope.h:
        * workers/WorkerGlobalScopeProxy.h:
        * workers/WorkerInspectorProxy.h:
        * workers/WorkerLocation.h:
        * workers/WorkerScriptLoader.h:
        * workers/WorkerThread.cpp:
        * workers/WorkerThread.h:
        * workers/service/ServiceWorker.h:
        * workers/service/ServiceWorkerClientData.h:
        * workers/service/ServiceWorkerContainer.cpp:
        * workers/service/ServiceWorkerContextData.h:
        * workers/service/ServiceWorkerData.h:
        * workers/service/ServiceWorkerJobData.h:
        * workers/service/ServiceWorkerRegistrationKey.cpp:
        * workers/service/ServiceWorkerRegistrationKey.h:
        (WTF::HashTraits<WebCore::ServiceWorkerRegistrationKey>::constructDeletedValue):
        * worklets/WorkletGlobalScope.h:
        * xml/XMLHttpRequest.h:

2018-11-30  Chris Dumez  <cdumez@apple.com>

        Drop unused Cross-Origin-Window-Policy from HTTPHeaderNames.in
        https://bugs.webkit.org/show_bug.cgi?id=192253

        Reviewed by Geoffrey Garen.

        * platform/network/HTTPHeaderNames.in:

2018-11-30  Justin Fan  <justin_fan@apple.com>

        [WebGPU] WebGPUQueue::submit and WebGPURenderingContext::present() implementation
        https://bugs.webkit.org/show_bug.cgi?id=192254

        Reviewed by Dean Jackson.

        Final plumbing to render onto an HTMLCanvasElement with WebGPU. Also added ref-test that draws 
        a green square onto a canvas using WebGPU; reference uses 2D canvas.

        Test: webgpu/simple-triangle-strip.html

        * Modules/webgpu/WebGPUCommandBuffer.h:
        * Modules/webgpu/WebGPUSwapChain.h: Needs to override platformLayer() for CanvasBasedRenderingContext.
        * platform/graphics/gpu/GPUQueue.h:
        * platform/graphics/gpu/GPUSwapChain.h:
        (WebCore::GPUSwapChain::metalLayer const): Renamed from platformLayer. 
        (WebCore::GPUSwapChain::platformLayer const): Deleted.
        * platform/graphics/gpu/cocoa/GPUQueueMetal.mm:
        (WebCore::GPUQueue::submit):
        * platform/graphics/gpu/cocoa/GPUSwapChainMetal.mm:
        (WebCore::GPUSwapChain::getNextTexture): Returns the texture of the swap layer's next drawable. 
        (WebCore::GPUSwapChain::present): Presents the last-returned drawable from getNextTexture, and frees it.
        (WebCore::GPUSwapChain::platformLayer const):

2018-11-30  Zalan Bujtas  <zalan@apple.com>

        Can’t use RalphLauren.com on iPad because hover menus don’t stay up
        https://bugs.webkit.org/show_bug.cgi?id=192236
        <rdar://problem/45792118>

        Reviewed by Geoffrey Garen.

        This patch introduces asynchronous content change observation.
        1. Start observing synchronous content change and timer install as the result of dispatching mouseMoved event.
        2. Start observing synchronous content change and style recalc schedule as the result of a timer callback (installed at #1).
        3. Start observing synchronous content change as the result of a style recalc (scheduled at #2).

        This patch also extends the timeout value from 100ms to 250ms. Certain content prefer longer timeouts (see http://briancherne.github.io/jquery-hoverIntent/ for details).  

        Test: fast/events/touch/ios/hover-when-style-change-is-async.html

        * dom/Document.cpp:
        (WebCore::Document::scheduleStyleRecalc):
        (WebCore::Document::updateStyleIfNeeded):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::fired):
        * platform/ios/wak/WKContentObservation.cpp:
        (WKStartObservingStyleRecalcScheduling):
        (WKStopObservingStyleRecalcScheduling):
        (WKIsObservingStyleRecalcScheduling):
        (WKSetShouldObserveNextStyleRecalc):
        (WKShouldObserveNextStyleRecalc):
        (WKSetObservedContentChange):
        * platform/ios/wak/WKContentObservation.h:

2018-11-30  Ryosuke Niwa  <rniwa@webkit.org>

        ShadowRoot should have styleSheets property
        https://bugs.webkit.org/show_bug.cgi?id=191311

        Reviewed by Antti Koivisto.

        Added the support for ShadowRoot.prototype.styleSheets by making StyleSheetList refer to either
        a document or a shadow root. We don't support the named getter in shadow root since that's not
        a standard feature: https://drafts.csswg.org/cssom/#the-stylesheetlist-interface

        Tests: fast/shadow-dom/shadowroot-stylesheets-wrapper-gc.html
               imported/w3c/web-platform-tests/shadow-dom/ShadowRoot-interface.html

        * css/StyleSheetList.cpp:
        (WebCore::StyleSheetList::StyleSheetList): Added a variant which takes ShadowRoot.
        (WebCore::StyleSheetList::styleSheets const):
        (WebCore::StyleSheetList::ownerNode): Added. The replacement for document() since now the opaque
        root could be either a Document or a ShadowRoot.
        (WebCore::StyleSheetList::detach): Renamed from detachFromDocument.
        (WebCore::StyleSheetList::namedItem const): Added a comment that the named getter is only supported
        for Document since it's not in the standard.
        * css/StyleSheetList.h:
        (WebCore::StyleSheetList::create): Added a variant which takes ShadowRoot.
        (WebCore::StyleSheetList::document): Deleted. Replaced by StyleSheetList::ownerNode in .cpp file.
        * css/StyleSheetList.idl:
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::styleSheets):
        * dom/Document.idl:
        * dom/DocumentOrShadowRoot.idl: Moved the declaration of styleSheets here from Document.idl.
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::~ShadowRoot): Call detach.
        (WebCore::ShadowRoot::styleSheets):
        * dom/ShadowRoot.h:

2018-11-30  Chris Dumez  <cdumez@apple.com>

        [PSON] We are sometimes swapping processes even though there is an opened window with an opener link to us
        https://bugs.webkit.org/show_bug.cgi?id=192242

        Reviewed by Geoffrey Garen.

        Move the setting of the openedViaWindowOpenWithOpener & hasOpenedFrames flags on the
        NavigationAction from FrameLoader::loadURL(), to PolicyChecker::checkNavigationPolicy()
        to make sure those are always accurate and so that the UIProcess can make correct process
        swapping decisions.

        NavigationAction objects are created in other places than FrameLoader::loadURL() as well.
        Even PolicyChecker::checkNavigationPolicy() will create a NavigationAction object if
        there is not already one.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::hasOpenedFrames const):
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):

2018-11-30  Don Olmstead  <don.olmstead@sony.com>

        Rename ENABLE_SUBTLE_CRYPTO to ENABLE_WEB_CRYPTO
        https://bugs.webkit.org/show_bug.cgi?id=192197

        Reviewed by Jiewen Tan.

        No new tests. No change in behavior.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::readTerminal):
        * crypto/CommonCryptoUtilities.cpp:
        * crypto/CommonCryptoUtilities.h:
        * crypto/CryptoAlgorithm.cpp:
        * crypto/CryptoAlgorithm.h:
        * crypto/CryptoAlgorithmIdentifier.h:
        * crypto/CryptoAlgorithmParameters.h:
        * crypto/CryptoAlgorithmParameters.idl:
        * crypto/CryptoAlgorithmRegistry.cpp:
        * crypto/CryptoAlgorithmRegistry.h:
        * crypto/CryptoKey.cpp:
        * crypto/CryptoKey.h:
        * crypto/CryptoKey.idl:
        * crypto/CryptoKeyFormat.h:
        * crypto/CryptoKeyPair.h:
        * crypto/CryptoKeyPair.idl:
        * crypto/CryptoKeyType.h:
        * crypto/CryptoKeyUsage.h:
        * crypto/CryptoKeyUsage.idl:
        * crypto/JsonWebKey.h:
        * crypto/JsonWebKey.idl:
        * crypto/RsaOtherPrimesInfo.h:
        * crypto/RsaOtherPrimesInfo.idl:
        * crypto/SerializedCryptoKeyWrap.h:
        * crypto/SubtleCrypto.cpp:
        * crypto/SubtleCrypto.h:
        * crypto/SubtleCrypto.idl:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_CFB.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_CFB.h:
        * crypto/algorithms/CryptoAlgorithmAES_CTR.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_CTR.h:
        * crypto/algorithms/CryptoAlgorithmAES_GCM.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_GCM.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmECDH.cpp:
        * crypto/algorithms/CryptoAlgorithmECDH.h:
        * crypto/algorithms/CryptoAlgorithmECDSA.cpp:
        * crypto/algorithms/CryptoAlgorithmECDSA.h:
        * crypto/algorithms/CryptoAlgorithmHKDF.cpp:
        * crypto/algorithms/CryptoAlgorithmHKDF.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmPBKDF2.cpp:
        * crypto/algorithms/CryptoAlgorithmPBKDF2.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.cpp:
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.h:
        * crypto/algorithms/CryptoAlgorithmSHA1.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA1.h:
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA224.h:
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA256.h:
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA384.h:
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA512.h:
        * crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:
        * crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:
        * crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:
        * crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:
        * crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp:
        * crypto/gcrypt/CryptoAlgorithmECDHGCrypt.cpp:
        * crypto/gcrypt/CryptoAlgorithmECDSAGCrypt.cpp:
        * crypto/gcrypt/CryptoAlgorithmHKDFGCrypt.cpp:
        * crypto/gcrypt/CryptoAlgorithmHMACGCrypt.cpp:
        * crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:
        * crypto/gcrypt/CryptoAlgorithmRSAES_PKCS1_v1_5GCrypt.cpp:
        * crypto/gcrypt/CryptoAlgorithmRSASSA_PKCS1_v1_5GCrypt.cpp:
        * crypto/gcrypt/CryptoAlgorithmRSA_OAEPGCrypt.cpp:
        * crypto/gcrypt/CryptoAlgorithmRSA_PSSGCrypt.cpp:
        * crypto/gcrypt/CryptoAlgorithmRegistryGCrypt.cpp:
        * crypto/gcrypt/CryptoKeyECGCrypt.cpp:
        * crypto/gcrypt/CryptoKeyRSAGCrypt.cpp:
        * crypto/gcrypt/SerializedCryptoKeyWrapGCrypt.cpp:
        * crypto/keys/CryptoAesKeyAlgorithm.idl:
        * crypto/keys/CryptoEcKeyAlgorithm.idl:
        * crypto/keys/CryptoHmacKeyAlgorithm.idl:
        * crypto/keys/CryptoKeyAES.cpp:
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyAlgorithm.idl:
        * crypto/keys/CryptoKeyEC.cpp:
        * crypto/keys/CryptoKeyEC.h:
        * crypto/keys/CryptoKeyHMAC.cpp:
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.cpp:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/keys/CryptoKeyRSAComponents.cpp:
        * crypto/keys/CryptoKeyRSAComponents.h:
        * crypto/keys/CryptoKeyRaw.cpp:
        * crypto/keys/CryptoKeyRaw.h:
        * crypto/keys/CryptoRsaHashedKeyAlgorithm.idl:
        * crypto/keys/CryptoRsaKeyAlgorithm.idl:
        * crypto/mac/CommonCryptoDERUtilities.cpp:
        * crypto/mac/CommonCryptoDERUtilities.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        * crypto/mac/CryptoAlgorithmAES_CFBMac.cpp:
        * crypto/mac/CryptoAlgorithmAES_CTRMac.cpp:
        * crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:
        * crypto/mac/CryptoAlgorithmAES_KWMac.cpp:
        * crypto/mac/CryptoAlgorithmECDHMac.cpp:
        * crypto/mac/CryptoAlgorithmECDSAMac.cpp:
        * crypto/mac/CryptoAlgorithmHKDFMac.cpp:
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        * crypto/mac/CryptoAlgorithmPBKDF2Mac.cpp:
        * crypto/mac/CryptoAlgorithmRSAES_PKCS1_v1_5Mac.cpp:
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp:
        * crypto/mac/CryptoAlgorithmRSA_PSSMac.cpp:
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        * crypto/mac/CryptoDigestAlgorithm.h:
        * crypto/mac/CryptoKeyECMac.cpp:
        * crypto/mac/CryptoKeyMac.cpp:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        * crypto/mac/SerializedCryptoKeyWrapMac.mm:
        * crypto/parameters/AesCbcCfbParams.idl:
        * crypto/parameters/AesCtrParams.idl:
        * crypto/parameters/AesGcmParams.idl:
        * crypto/parameters/AesKeyParams.idl:
        * crypto/parameters/CryptoAlgorithmAesCbcCfbParams.h:
        * crypto/parameters/CryptoAlgorithmAesCtrParams.h:
        * crypto/parameters/CryptoAlgorithmAesGcmParams.h:
        * crypto/parameters/CryptoAlgorithmAesKeyParams.h:
        * crypto/parameters/CryptoAlgorithmEcKeyParams.h:
        * crypto/parameters/CryptoAlgorithmEcdhKeyDeriveParams.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:
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmRsaOaepParams.h:
        * crypto/parameters/CryptoAlgorithmRsaPssParams.h:
        * crypto/parameters/EcKeyParams.idl:
        * crypto/parameters/EcdhKeyDeriveParams.idl:
        * crypto/parameters/EcdsaParams.idl:
        * crypto/parameters/HkdfParams.idl:
        * crypto/parameters/HmacKeyParams.idl:
        * crypto/parameters/Pbkdf2Params.idl:
        * crypto/parameters/RsaHashedImportParams.idl:
        * crypto/parameters/RsaHashedKeyGenParams.idl:
        * crypto/parameters/RsaKeyGenParams.idl:
        * crypto/parameters/RsaOaepParams.idl:
        * crypto/parameters/RsaPssParams.idl:
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * page/ChromeClient.h:
        * page/Crypto.cpp:
        (WebCore::Crypto::Crypto):
        * page/Crypto.h:
        * page/Crypto.idl:
        * platform/GCrypt.cmake:
        * platform/LocalizedStrings.cpp:
        * platform/LocalizedStrings.h:
        * workers/WorkerGlobalScope.cpp:
        * workers/WorkerGlobalScope.h:
        * worklets/WorkletGlobalScope.h:

2018-11-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        Replace "auto fill" with "AutoFill" in some localizable strings
        https://bugs.webkit.org/show_bug.cgi?id=192233
        <rdar://problem/46311614>

        Reviewed by Chris Fleizach.

        Replace "autofill" with "AutoFill".

        * en.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::AXAutoFillCredentialsLabel):
        (WebCore::AXAutoFillContactsLabel):
        (WebCore::AXAutoFillStrongPasswordLabel):
        (WebCore::AXAutoFillCreditCardLabel):

2018-11-29  Ryosuke Niwa  <rniwa@webkit.org>

        Add CEReactions=NotNeeded on all the relevant IDL files
        https://bugs.webkit.org/show_bug.cgi?id=188368
        <rdar://problem/42987753>

        Rubber-stamped by Antti Koivisto.

        Based on a patch written by Frederic Wang. Added CEReactions=NotNeeded to all the places
        we don't need CEReactions because we don't implement customized builtins but are marked with
        CEReactions in the HTML specification.

        * html/HTMLAnchorElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLBRElement.idl:
        * html/HTMLBaseElement.idl:
        * html/HTMLBodyElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLDListElement.idl:
        * html/HTMLDataElement.idl:
        * html/HTMLDetailsElement.idl:
        * html/HTMLDirectoryElement.idl:
        * html/HTMLDivElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFontElement.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLFrameSetElement.idl:
        * html/HTMLHRElement.idl:
        * html/HTMLHeadingElement.idl:
        * html/HTMLHtmlElement.idl:
        * html/HTMLHyperlinkElementUtils.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLLIElement.idl:
        * html/HTMLLabelElement.idl:
        * html/HTMLLegendElement.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLMapElement.idl:
        * html/HTMLMarqueeElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLMenuElement.idl:
        * html/HTMLMetaElement.idl:
        * html/HTMLMeterElement.idl:
        * html/HTMLModElement.idl:
        * html/HTMLOListElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptGroupElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLOutputElement.idl:
        * html/HTMLParagraphElement.idl:
        * html/HTMLParamElement.idl:
        * html/HTMLPreElement.idl:
        * html/HTMLProgressElement.idl:
        * html/HTMLQuoteElement.idl:
        * html/HTMLScriptElement.idl:
        * html/HTMLSlotElement.idl:
        * html/HTMLSourceElement.idl:
        * html/HTMLStyleElement.idl:
        * html/HTMLTableCaptionElement.idl:
        * html/HTMLTableCellElement.idl:
        * html/HTMLTableColElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLTimeElement.idl:
        * html/HTMLTrackElement.idl:
        * html/HTMLUListElement.idl:
        * html/HTMLVideoElement.idl:

2018-11-30  Alexey Proskuryakov  <ap@apple.com>

        Move USE_CFNETWORK_IGNORE_HSTS to its proper place
        https://bugs.webkit.org/show_bug.cgi?id=192173

        Reviewed by Tim Horton.

        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::schemeWasUpgradedDueToDynamicHSTS):

2018-11-30  Basuke Suzuki  <basuke.suzuki@sony.com>

        [Curl] Add API for ProtectionSpace.
        https://bugs.webkit.org/show_bug.cgi?id=191648

        Reviewed by Alex Christensen.

        Create a platform dependent header and implementation files for ProtectionSpace.

        No new tests because there's no behavior change.

        * platform/Curl.cmake:
        * platform/network/ProtectionSpace.h:
        * platform/network/curl/ProtectionSpaceCurl.cpp: Added.
        (WebCore::ProtectionSpace::certificateInfo const):
        * platform/network/curl/ProtectionSpaceCurl.h: Added.
        (WebCore::ProtectionSpace::ProtectionSpace):
        (WebCore::ProtectionSpace::encodingRequiresPlatformData const):
        (WebCore::ProtectionSpace::platformCompare):

2018-11-30  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Flesh out WebGPURenderPassDescriptor to match the WebGPU IDL
        https://bugs.webkit.org/show_bug.cgi?id=192213

        Reviewed by Dean Jackson.

        WebGPU prototype now uses WebGPURenderPassColorAttachmentDescriptor in WebGPURenderPassDescriptor to match the WebGPU Sketch.
        WebGPU developer can now also set the clearColor in WebGPURenderPassDescriptor.

        No new tests. Older WebGPURenderPass* tests updated. 

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/webgpu/WebGPUColor.h: Added. Typedef'd to GPUColor.h.
        * Modules/webgpu/WebGPUColor.idl: Added.
        * Modules/webgpu/WebGPUCommandBuffer.cpp:
        (WebCore::WebGPUCommandBuffer::beginRenderPass): Updated to error check and support the new structure of WebGPURenderPassDescriptor.
        * Modules/webgpu/WebGPURenderPassColorAttachmentDescriptor.h: Added.
        * Modules/webgpu/WebGPURenderPassColorAttachmentDescriptor.idl: Added.
        * Modules/webgpu/WebGPURenderPassDescriptor.h: 
        * Modules/webgpu/WebGPURenderPassDescriptor.idl: Updated to match the sketch IDL.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/GPUColor.h: Added.
        * platform/graphics/gpu/GPURenderPassColorAttachmentDescriptor.h: Added. Backing struct for WebGPU__.
        * platform/graphics/gpu/GPURenderPassDescriptor.h: Updated to match new WebGPURenderPassDescriptor.
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::GPURenderPassEncoder::create): Now also uses clearColor set by developer.

2018-11-30  Andy Estes  <aestes@apple.com>

        [Cocoa] Add some WKA extension points
        https://bugs.webkit.org/show_bug.cgi?id=192131
        <rdar://problem/46330293>

        Reviewed by Tim Horton.

        * DerivedSources.make: Added an extension point for derived sources.
        * Modules/applepay/PaymentCoordinatorClient.h: Added an extension point for
        PaymentCoordinatorClient.
        * SourcesCocoa.txt: Added WebCoreAdditions.mm as a non-unified source.
        * WebCore.xcodeproj/project.pbxproj: Added WebCoreAdditions.mm.
        * bindings/js/WebCoreBuiltinNames.h: Added an extension point for built-in names.
        * page/SettingsBase.h: Added an extension point for settings.
        * platform/cocoa/WebCoreAdditions.mm: Added.

2018-11-30  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][EME] CDMInstance should be shipped as a GstContext to the decryptors
        https://bugs.webkit.org/show_bug.cgi?id=192075

        Reviewed by Philippe Normand.

        So far, we were shipping the CDMInstance in an event to the
        decryptors and they were requesting it with bus messages when it
        was not found. Now we ship it with a GstContext that is set to the
        pipeline and read from the decryptors, which is now always
        available.

        As a consequence of changing this flow, the attemptToDecrypt one
        was affected as well because it was tied to CDMInstance
        shipment. A workaround was added: when the decryptors send the
        waitingForKey, an attemptToDecrypt will be performed. A FIXME was
        added for this. A subconsequence is that
        attemptToDecryptWithInstance is reworked to rely always in
        attemptToDecryptWithLocal instance, the former becomes final and
        the latter virtual.

        This is a rework, no new tests needed.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::cdmInstanceAttached):
        (WebCore::MediaPlayerPrivateGStreamerBase::cdmInstanceDetached):
        (WebCore::MediaPlayerPrivateGStreamerBase::attemptToDecryptWithLocalInstance):
        (WebCore::MediaPlayerPrivateGStreamerBase::dispatchCDMInstance): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (webkit_media_common_encryption_decrypt_class_init):
        (webkitMediaCommonEncryptionDecryptTransformInPlace):
        (webkitMediaCommonEncryptionDecryptIsCDMInstanceAvailable):
        (webkitMediaCommonEncryptionDecryptSinkEventHandler):
        (webKitMediaCommonEncryptionDecryptorSetContext):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::attemptToDecryptWithLocalInstance):
        (WebCore::MediaPlayerPrivateGStreamerMSE::attemptToDecryptWithInstance): Deleted.
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:

2018-11-30  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Compute min/maxHeight margins only when they are needed.
        https://bugs.webkit.org/show_bug.cgi?id=192223

        Reviewed by Antti Koivisto.

        Test: fast/block/block-only/collapsed-margin-with-min-height.html

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):

2018-11-30  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Geometry::inFlowNonReplacedHeightAndMargin should check for empty inline formatting context.
        https://bugs.webkit.org/show_bug.cgi?id=192215

        Reviewed by Antti Koivisto.

        Check if the inline formatting context actually has any lines.

        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):

2018-11-30  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Do not use computed display box values for border and padding
        https://bugs.webkit.org/show_bug.cgi?id=192214

        Reviewed by Antti Koivisto.

        Border and padding values are not necessarily computed yet when we try to estimate the margin top value. Estimating margin top is required
        to be able to place floats (vertically) sooner than we would compute the final vertical position for a regular block box.

        <body><div style="float: left"></div><div><div style="margin: 10px;"></div></div>

        In the above example, to estimate a final vertical position of the floating box, we need to know whether the nested div's margin is collapsed
        all the way up to the body. However in order to find it out we need to check for borders and paddings (they stop margin collapsing).
        At the time when the floating box is being laied out, those <div> block boxes are still far down in the layout queue.

        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::hasBorder):
        (WebCore::Layout::hasPadding):
        (WebCore::Layout::hasBorderBefore):
        (WebCore::Layout::hasBorderAfter):
        (WebCore::Layout::hasPaddingBefore):
        (WebCore::Layout::hasPaddingAfter):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginTopCollapsedWithParent):
        (WebCore::Layout::isMarginBottomCollapsedThrough):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginTop):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginBottom):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginBottomCollapsedWithParent):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::collapsedMarginBottomFromLastChild):

2018-11-29  Frederic Wang  <fwang@igalia.com>

        Separate paint and scroll offsets for RenderLayerBacking::m_scrollingContentsLayer
        https://bugs.webkit.org/show_bug.cgi?id=183040

        Currently, scroll offset of RenderLayerBacking::m_scrollingContentsLayer is stored in the
        GraphicsLayer::m_offsetFromRenderer member used for paint offset. This patch separates these
        two concept by introducing a new GraphicsLayer::m_scrollOffset for the scroll offset. This
        makes the API a little bit cleaner, the code easier to understand and might avoid unnecessary
        repaints in composited scroll.

        Reviewed by Simon Fraser.

        No new tests, already covered by existing tests.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::setScrollOffset): Setter function to update the scroll offset
        of the content layer inside its scrolling parent layer. Ask a repaint if it has changed and
        is requested by the caller.
        (WebCore::GraphicsLayer::paintGraphicsLayerContents): Take into account the scroll offset
        when painting.
        (WebCore::GraphicsLayer::dumpProperties const): Dump the scroll offset property.
        * platform/graphics/GraphicsLayer.h: Include ScrollableArea for the ScrollOffset typedef.
        Add member for the scroll offset of the content layer inside its scrolling parent layer.
        (WebCore::GraphicsLayer::scrollOffset const): Getter function.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry): Do not include the scroll offset in the
        paint offset of m_scrollingContentsLayer since it is now taken into account in
        paintGraphicsLayerContents. Update the scroll offset of m_scrollingContentsLayer separately.
        Leave the paint offset of m_foregroundLayer unchanged.
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect): Take into account the scroll
        offset of m_scrollingContentsLayer when calculating the dirty rect.

2018-11-29  Simon Fraser  <simon.fraser@apple.com>

        Overflow scrolling layers need to be self-painting
        https://bugs.webkit.org/show_bug.cgi?id=192201

        Reviewed by Dean Jackson.
        
        Overflow scrolling layers paint their contents, so need to be self-painting in the RenderLayer sense.
        
        Without this change, the overflow in the testcase doesn't get any compositing layers.

        Test: compositing/scrolling/overflow-scrolling-layers-are-self-painting.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):

2018-11-29  Christopher Reid  <chris.reid@sony.com>

        [Win] listDirectory in FileSystemWin.cpp should not skip all directories
        https://bugs.webkit.org/show_bug.cgi?id=192042

        Reviewed by Fujii Hironori.

        Covered by existing tests.

        listDirectory is not returning any child directories which is causing
        ASSERT(diskUsage >= databaseFileSize) in SQLiteIDBBackingStore.cpp to fail.

        Change listDirectory in FileSystemWin to match FileSystemPOSIX's behavior.
        listDirectory should only skip the current and previous directories.

        * platform/win/FileSystemWin.cpp:

2018-11-29  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238713.

        Breaks internal builds.

        Reverted changeset:

        "[Cocoa] Add some WKA extension points"
        https://bugs.webkit.org/show_bug.cgi?id=192131
        https://trac.webkit.org/changeset/238713

2018-11-29  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238680.

        Caused existing webrtc layout tests to fail an assertion.

        Reverted changeset:

        "A sender created through addTransceiver and populated using
        addTrack should have its source set"
        https://bugs.webkit.org/show_bug.cgi?id=192136
        https://trac.webkit.org/changeset/238680

2018-11-29  Justin Fan  <justin_fan@apple.com>

        Remove dangling WebGPU file references from WebCore project
        https://bugs.webkit.org/show_bug.cgi?id=192185

        Unreviewed project file gardening.

        No new tests.

        * WebCore.xcodeproj/project.pbxproj:

2018-11-29  Keith Rollin  <krollin@apple.com>

        Unreviewed build fix.

        r238637 introduced some DerivedSources.make changes that could produce
        some invalid .idl files, leading to IDLParser.pm error messages.

        * DerivedSources.make:

2018-11-29  Simon Fraser  <simon.fraser@apple.com>

        Add an internal feature flag to enable async overflow scrolling
        https://bugs.webkit.org/show_bug.cgi?id=192184

        Reviewed by Tim Horton.

        Add a new internal feature flag that will enable async overflow-scrolling for
        most overflow:scroll elements. Defaults to off.
        
        Make the "UseAcceleratedTouchScrolling" terminology in RenderLayer etc be more generic,
        and refer to async overflow scrolling.

        * page/Settings.yaml:
        * rendering/RenderLayer.cpp:
        (WebCore::canCreateStackingContext): Remove a line which is not necessary, since -webkit-overflow-scrolling: touch
        already triggers non-auto z-index via code in StyleResolver::adjustRenderStyle().
        (WebCore::RenderLayer::canUseCompositedScrolling const):
        (WebCore::RenderLayer::hasCompositedScrollableOverflow const):
        (WebCore::RenderLayer::handleTouchEvent):
        (WebCore::RenderLayer::usesAsyncScrolling const):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        (WebCore::RenderLayer::showsOverflowControls const):
        (WebCore::RenderLayer::calculateClipRects const):
        (WebCore::RenderLayer::canUseAcceleratedTouchScrolling const): Deleted.
        (WebCore::RenderLayer::hasTouchScrollableOverflow const): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::layerOrAncestorIsTransformedOrUsingCompositedScrolling):
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::RenderLayerBacking::computeParentGraphicsLayerRect const):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForOverflowScrolling const):
        (WebCore::RenderLayerCompositor::isAsyncScrollableStickyLayer const):
        (WebCore::RenderLayerCompositor::useCoordinatedScrollingForLayer const):

2018-11-29  Andy Estes  <aestes@apple.com>

        [Cocoa] Add some WKA extension points
        https://bugs.webkit.org/show_bug.cgi?id=192131
        <rdar://problem/46330293>

        Reviewed by Tim Horton.

        * DerivedSources.make: Added an extension point for derived sources.
        * Modules/applepay/PaymentCoordinatorClient.h: Added an extension point for
        PaymentCoordinatorClient.
        * SourcesCocoa.txt: Added WebCoreAdditions.mm as a non-unified source.
        * WebCore.xcodeproj/project.pbxproj: Added WebCoreAdditions.mm.
        * bindings/js/WebCoreBuiltinNames.h: Added an extension point for built-in names.
        * page/SettingsBase.h: Added an extension point for settings.
        * platform/cocoa/WebCoreAdditions.mm: Added.

2018-11-29  Tim Horton  <timothy_horton@apple.com>

        Make drawing tools available when an editable image is focused
        https://bugs.webkit.org/show_bug.cgi?id=192172
        <rdar://problem/30337960>

        Reviewed by Dean Jackson.

        * editing/Editor.cpp:
        (WebCore::Editor::insertEditableImage):
        * editing/Editor.h:
        * editing/InsertEditableImageCommand.cpp:
        (WebCore::InsertEditableImageCommand::insertEditableImage):
        (WebCore::InsertEditableImageCommand::doApply):
        * editing/InsertEditableImageCommand.h:
        Add InsertEditableImageCommand::insertEditableImage, which returns the
        inserted image element.

        * html/HTMLImageElement.h:
        Make HTMLImageElement focusable if it is editable.

2018-11-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][Quirk] Body and html height stretching.
        https://bugs.webkit.org/show_bug.cgi?id=192154

        Reviewed by Antti Koivisto.

        This patch takes the document box's margin/border/padding into account when stretching html/body to the height of the initial containing block.

        Tests: fast/block/block-only/body-height-with-auto-html-height-quirk.html
               fast/block/block-only/body-height-with-auto-html-height-quirk2.html
               fast/block/block-only/body-height-with-non-auto-html-height-quirk.html
               fast/block/block-only/body-height-with-non-auto-html-height-quirk2.html

        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::estimatedMarginBottom):
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedHeight):

2018-11-29  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Replace forward declare of WebGPUCommandBuffer with include
        https://bugs.webkit.org/show_bug.cgi?id=192179

        Unreviewed build fix.

        No new tests. No behavior change.

        * Modules/webgpu/WebGPUProgrammablePassEncoder.cpp:
        * Modules/webgpu/WebGPUProgrammablePassEncoder.h:

2018-11-29  Zalan Bujtas  <zalan@apple.com>

        [ContentObservation] Make WKSetObservedContentChange logic more explicit.
        https://bugs.webkit.org/show_bug.cgi?id=192183

        Reviewed by Simon Fraser.

        * platform/ios/wak/WKContentObservation.cpp:
        (WKSetObservedContentChange):
        (WebThreadRemoveObservedDOMTimer):

2018-11-29  Youenn Fablet  <youenn@apple.com>

        CSS subresource loads should not be observable from resource timing if the stylesheet is opaque
        https://bugs.webkit.org/show_bug.cgi?id=192132

        Reviewed by Ryosuke Niwa.

        Introduce a new ResourceLoaderOptions to determine whether a load is made from a resource that is opaque.
        Make use of that option to disable exposing such loads to the web page through resource timing.
        The same option might later be used to bypass service workers.

        Make use of this option for CSS subresource loads.
        When the CSS stylesheet is opaque for the page, set this option.

        Test: http/tests/security/clean-origin-exposed-resource-timing.html
              http/tests/security/cross-origin-resource-timing.html

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::CSSCursorImageValue):
        (WebCore::CSSCursorImageValue::loadImage):
        * css/CSSCursorImageValue.h:
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::cachedFont):
        * css/CSSFontFaceSrcValue.h:
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::CSSImageSetValue):
        (WebCore::CSSImageSetValue::loadBestFitImage):
        * css/CSSImageSetValue.h:
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::CSSImageValue):
        (WebCore::CSSImageValue::loadImage):
        * css/CSSImageValue.h:
        * css/CSSStyleSheet.h:
        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::setCSSStyleSheet):
        (WebCore::StyleRuleImport::requestStyleSheet):
        * css/StyleSheetContents.h:
        * css/parser/CSSParserContext.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeCursor):
        (WebCore::consumeFontFaceSrcURI):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeImageSet):
        (WebCore::CSSPropertyParserHelpers::consumeImage):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::collectStyleForPresentationAttribute):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::initializeStyleSheet):
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::collectStyleForPresentationAttribute):
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::collectStyleForPresentationAttribute):
        * loader/ResourceLoaderOptions.h:
        * loader/ResourceTimingInformation.cpp:
        (WebCore::ResourceTimingInformation::shouldAddResourceTiming):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::srcValue const):

2018-11-29  Megan Gardner  <megan_gardner@apple.com>

        Move Lookup Code for better cross platform usage
        https://bugs.webkit.org/show_bug.cgi?id=191732

        Reviewed by Alex Christensen.

        Not currenlty testable

        DictionaryLookup uses Reveal now, which is slated to be cross-platform.
        That patch gates the parts of DictionaryLookup that currently do not have
        an available implementation on iOS. Once Reveal is ready, this code will be
        replaced or expanded upon, as appropriate.

        * editing/mac/DictionaryLookup.h:
        * editing/mac/DictionaryLookup.mm:
        (WebCore::showPopupOrCreateAnimationController):
        (WebCore::DictionaryLookup::showPopup):
        (WebCore::DictionaryLookup::hidePopup):
        (WebCore::DictionaryLookup::animationControllerForPopup):

2018-11-29  Joseph Pecoraro  <pecoraro@apple.com>

        [Cocoa] Move ServerTimingParser.* into a better group in the Xcode project
        https://bugs.webkit.org/show_bug.cgi?id=192180

        Reviewed by Simon Fraser.

        * WebCore.xcodeproj/project.pbxproj:

2018-11-29  Zalan Bujtas  <zalan@apple.com>

        [ContentObservation] DOMTimer::install should explicitly check if timer observation is on
        https://bugs.webkit.org/show_bug.cgi?id=192181

        Reviewed by Simon Fraser.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        * platform/ios/wak/WKContentObservation.cpp:
        (WKIsObservingDOMTimerScheduling):
        * platform/ios/wak/WKContentObservation.h:

2018-11-29  Ryosuke Niwa  <rniwa@webkit.org>

        Executing "insertunorderedlist" while selecting a contenteditable element inside a shadow dom hangs the browser
        https://bugs.webkit.org/show_bug.cgi?id=184049
        <rdar://problem/38931033>

        Reviewed by Antti Koivisto.

        The primary hung was caused by TextIterator::advance traversing the next node in the tree order using
        NodeTraversal::next which doesn't take the composed tree into account. Fixed the bug by traversing
        the composed tree while sharing code with StylizedMarkupAccumulator.

        This revealed a second hang in InsertListCommand::doApply() caused by endingSelection() being null,
        which was caused by CompositeEditCommand::moveParagraphs failing to restore the ending selection properly
        because it was computing the text indices difference from the beginning of the document until the destination.

        Fixed this second bug by computing the indices against the beginning of the root editable element.
        Note that editability never crosses a shadow boundary.

        Test: editing/execCommand/insert-unordered-list-in-shadow-tree.html

        * dom/ComposedTreeIterator.h:
        (WebCore::nextSkippingChildrenInComposedTreeIgnoringUserAgentShadow): Extracted out of nextSkippingChildren
        in markup.cpp.
        (WebCore::nextInComposedTreeIgnoringUserAgentShadow): Added.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Compute the index from the beginning of the root editable
        element as opposed to the beginning of the document.
        * editing/TextIterator.cpp:
        (WebCore::nextNode): Added.
        (WebCore::isDescendantOf): Added.
        (WebCore::TextIterator::advance): Use the newly added functions to traverse the composed tree when the options
        contains TextIteratorTraversesFlatTree.
        * editing/markup.cpp:

2018-11-29  Zalan Bujtas  <zalan@apple.com>

        [ContentObservation] Decouple content change and DOM timer scheduling observation
        https://bugs.webkit.org/show_bug.cgi?id=192170

        Reviewed by Simon Fraser.

        This is in preparation for adding style recalc scheduling observation (the main goal here is to simplify the indeterminate change logic).

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::fired):
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::mouseMoved):
        * platform/ios/wak/WKContentObservation.cpp:
        (WKStartObservingContentChanges):
        (WKStopObservingContentChanges):
        (WKStartObservingDOMTimerSchedules):
        (WKStopObservingDOMTimerSchedules):
        (WKSetObservedContentChange):
        (WebThreadAddObservedDOMTimer):
        (WKBeginObservingContentChanges): Deleted.
        * platform/ios/wak/WKContentObservation.h:

2018-11-29  Frederic Wang  <fwang@igalia.com>

        Make reconcileViewportConstrainedLayerPositions start from a specified scrolling node
        https://bugs.webkit.org/show_bug.cgi?id=180002

        Reviewed by Simon Fraser.

        For non-programmatic scrolling of frames, AsyncScrollingCoordinator::reconcileScrollingState
        currently always call reconcileViewportConstrainedLayerPositions for the main frame
        since async subframe scrolling is not supported yet (bug 171667 and bug 149264). This
        function in turn calls reconcileLayerPositionForViewportRect on the whole scrolling tree to
        readjust position of fixed/sticky descendants. This patch refactors a bit the code so that
        the operation is actually only applied to the descendants of the frame's scrolling node,
        which would mean a small optimization when subframe are asynchronously scrollable. The code
        is already covered by reconcile-layer-position-recursive.html.

        No new tests, behavior unchanged and already covered by existing tests.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::reconcileScrollingState): Pass the frame's scrolling
        node id.
        (WebCore::AsyncScrollingCoordinator::reconcileViewportConstrainedLayerPositions): Start
        reconciliation from the specified scrolling node and log its ID.
        * page/scrolling/AsyncScrollingCoordinator.h: Add ScrollingNodeID parameter.
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::reconcileViewportConstrainedLayerPositions): Ditto.

2018-11-29  Zalan Bujtas  <zalan@apple.com>

        Rename *ObservedContentModifier(s) to *ObservedDOMTimer(s)
        https://bugs.webkit.org/show_bug.cgi?id=192168

        Reviewed by Simon Fraser.

        * dom/Document.cpp:
        (WebCore::Document::platformSuspendOrStopActiveDOMObjects):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::fired):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clearTimeout):
        * page/Frame.cpp:
        (WebCore::Frame::willDetachPage):
        * platform/ios/wak/WKContentObservation.cpp:
        (WKBeginObservingContentChanges):
        (WKSetObservedContentChange):
        (WebThreadGetObservedDOMTimers):
        (WebThreadCountOfObservedDOMTimers):
        (WebThreadClearObservedDOMTimers):
        (WebThreadContainsObservedDOMTimer):
        (WebThreadAddObservedDOMTimer):
        (WebThreadRemoveObservedDOMTimer):
        (WebThreadCountOfObservedContentModifiers): Deleted.
        (WebThreadClearObservedContentModifiers): Deleted.
        (WebThreadContainsObservedContentModifier): Deleted.
        (WebThreadAddObservedContentModifier): Deleted.
        (WebThreadRemoveObservedContentModifier): Deleted.
        * platform/ios/wak/WKContentObservation.h:
        * platform/ios/wak/WKContentObservationInternal.h:

2018-11-29  Justin Fan  <justin_fan@apple.com>

        [WebGPU] WebGPURenderPassEncoder::setPipeline, draw, and endPass prototypes
        https://bugs.webkit.org/show_bug.cgi?id=192134

        Reviewed by Dean Jackson.

        Wrap up prototype features for WebGPURenderPassEncoder. 

        Test: webgpu/render-command-encoding.html

        * Modules/webgpu/WebGPUCommandBuffer.cpp: 
        (WebCore::WebGPUCommandBuffer::beginRenderPass):
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createRenderPipeline const):
        * Modules/webgpu/WebGPUProgrammablePassEncoder.cpp:
        (WebCore::WebGPUProgrammablePassEncoder::WebGPUProgrammablePassEncoder):
        (WebCore::WebGPUProgrammablePassEncoder::endPass): Returns a reference to the WebGPUCommandBuffer that created this encoder.
        (WebCore::WebGPUProgrammablePassEncoder::setPipeline):
        * Modules/webgpu/WebGPUProgrammablePassEncoder.h: Updated to support endPass and setPipeline.
        * Modules/webgpu/WebGPUProgrammablePassEncoder.idl:
        * Modules/webgpu/WebGPURenderPassEncoder.cpp:
        (WebCore::WebGPURenderPassEncoder::create): Must be provided with the WebGPUCommandBuffer.
        (WebCore::WebGPURenderPassEncoder::WebGPURenderPassEncoder):
        (WebCore::WebGPURenderPassEncoder::draw):
        * Modules/webgpu/WebGPURenderPassEncoder.h: Updated to cache a reference to the WebGPUCommandBuffer, and for draw.
        * Modules/webgpu/WebGPURenderPassEncoder.idl:
        * Modules/webgpu/WebGPURenderPipeline.cpp:
        (WebCore::WebGPURenderPipeline::create):
        (WebCore::WebGPURenderPipeline::WebGPURenderPipeline):
        * Modules/webgpu/WebGPURenderPipeline.h:
        (WebCore::WebGPURenderPipeline::renderPipeline):
        * Modules/webgpu/WebGPUTexture.cpp:
        * Modules/webgpu/WebGPUTexture.h: Replaced include with forward declaration.
        * platform/graphics/gpu/GPUProgrammablePassEncoder.h: Updated to support new WebGPU_PassEncoder functionality.
        * platform/graphics/gpu/GPURenderPassEncoder.h:
        (WebCore::GPURenderPassEncoder::~GPURenderPassEncoder): Now ends encoding on the MTLCommandEncoder, if not already ended, before freeing it.
        * platform/graphics/gpu/GPURenderPipeline.h: Now remembers the GPUPrimitiveTopology that it was created with.
        (WebCore::GPURenderPipeline::primitiveTopology const): 
        * platform/graphics/gpu/cocoa/GPUProgrammablePassEncoderMetal.mm:
        (WebCore::GPUProgrammablePassEncoder::endPass): Calls endEncoding on the backing MTLCommandEncoder, if not already ended.
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::GPURenderPassEncoder::platformPassEncoder const):
        (WebCore::GPURenderPassEncoder::setPipeline): Added.
        (WebCore::primitiveTypeForGPUPrimitiveTopology): Added. Helper function to convert GPUPrimitiveTopology to MTLPrimitiveType.
        (WebCore::GPURenderPassEncoder::draw): Added. Draws using primitive topology specified during pipeline creation. 
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::setFunctionsForPipelineDescriptor):
        (WebCore::GPURenderPipeline::create):
        (WebCore::GPURenderPipeline::GPURenderPipeline): Now must store the GPURenderPipelineDescriptor for later reference. 

2018-11-29  Justin Michaud  <justin_michaud@apple.com>

        CSS Painting API should pass 'this' correctly to paint callback, and repaint when properties change.
        https://bugs.webkit.org/show_bug.cgi?id=191443

        Reviewed by Dean Jackson.

        Instantiate a new instance of the paint class, and pass it as 'this' object when the paint callback is called. 
        Also, this patch makes sure that custom paint elements get repainted when properties that they care about get changed.
        Finally, we fix two reference cycles that caused WorkletGlobalScope to never be destroyed.

        Tests: fast/css-custom-paint/animate-repaint.html
               fast/css-custom-paint/animate.html

        * bindings/js/JSDOMWrapper.cpp:
        * bindings/js/JSPaintWorkletGlobalScopeCustom.cpp:
        (WebCore::JSPaintWorkletGlobalScope::visitAdditionalChildren):
        * bindings/js/JSWorkletGlobalScopeBase.cpp:
        (WebCore::toJS):
        * bindings/js/ScriptState.cpp:
        (WebCore::execStateFromWorkletGlobalScope):
        * css/CSSPaintCallback.h:
        * css/CSSPaintCallback.idl:
        * css/CSSPaintImageValue.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::vm):
        * platform/graphics/CustomPaintImage.cpp:
        (WebCore::CustomPaintImage::CustomPaintImage):
        (WebCore::CustomPaintImage::doCustomPaint):
        * platform/graphics/CustomPaintImage.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::addCustomPaintWatchProperty):
        (WebCore::RenderStyle::changeRequiresRepaint const):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h:
        * testing/Internals.cpp:
        (WebCore::Internals::isAnyWorkletGlobalScopeAlive const):
        * testing/Internals.h:
        * testing/Internals.idl:
        * worklets/PaintWorkletGlobalScope.cpp:
        (WebCore::PaintWorkletGlobalScope::devicePixelRatio const):
        (WebCore::PaintWorkletGlobalScope::PaintDefinition::PaintDefinition):
        (WebCore::PaintWorkletGlobalScope::registerPaint):
        * worklets/PaintWorkletGlobalScope.h:
        (WebCore::PaintWorkletGlobalScope::~PaintWorkletGlobalScope):
        * worklets/WorkletGlobalScope.cpp:
        (WebCore::WorkletGlobalScope::WorkletGlobalScope):
        (WebCore::WorkletGlobalScope::~WorkletGlobalScope):
        (WebCore::WorkletGlobalScope::prepareForDestruction):
        (WebCore::WorkletGlobalScope::allWorkletGlobalScopesSet):
        (WebCore::WorkletGlobalScope::isJSExecutionForbidden const):
        (WebCore::WorkletGlobalScope::logExceptionToConsole):
        (WebCore::WorkletGlobalScope::addConsoleMessage):
        (WebCore::WorkletGlobalScope::addMessage):
        * worklets/WorkletGlobalScope.h:
        (WebCore::WorkletGlobalScope::script):
        (WebCore::WorkletGlobalScope::responsibleDocument):
        (WebCore::WorkletGlobalScope::responsibleDocument const):
        (WebCore::WorkletGlobalScope::identifier const): Deleted.
        (WebCore::WorkletGlobalScope::responsableDocument): Deleted.
        (WebCore::WorkletGlobalScope::responsableDocument const): Deleted.
        * worklets/WorkletScriptController.cpp:
        (WebCore::WorkletScriptController::~WorkletScriptController):
        (WebCore::WorkletScriptController::disableEval):
        (WebCore::WorkletScriptController::disableWebAssembly):
        (WebCore::WorkletScriptController::initScript):

2018-11-29  Alexey Proskuryakov  <ap@apple.com>

        Modernize the check for kCFURLRequestContentDecoderSkipURLCheck existence
        https://bugs.webkit.org/show_bug.cgi?id=192041

        Reviewed by Tim Horton.

        * loader/ResourceLoaderOptions.h: Added a FIXME for poor naming of loader options.
        There is a lot of code that needs to be cleaned up here.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::applySniffingPoliciesIfNeeded):

2018-11-29  Youenn Fablet  <youenn@apple.com>

        Updating a service worker during a navigation load sometimes makes the load fail
        https://bugs.webkit.org/show_bug.cgi?id=191986
        <rdar://problem/46259790>

        Reviewed by Chris Dumez.

        Previously, we were registering a document as service worker client at creation of the document.
        According the service worker spec, this should be done when handling the fetch event of the corresponding navigation load.
        This ensures that the service worker will have a client and will not get updated in the middle of the navigation load.

        At navigation load start, we do not have a document yet since it is created when receiving the first bytes.
        Instead, we register a temporary document when starting the navigation load and unregister it when the real document is registered.

        Test: imported/w3c/web-platform-tests/service-workers/service-worker/update-on-navigation.https.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitData):
        (WebCore::DocumentLoader::registerTemporaryServiceWorkerClient):
        (WebCore::DocumentLoader::unregisterTemporaryServiceWorkerClient):
        (WebCore::DocumentLoader::loadMainResource):
        (WebCore::DocumentLoader::clearMainResource):
        * loader/DocumentLoader.h:

2018-11-29  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238678.

        Breaks internal builds.

        Reverted changeset:

        "Move Lookup Code for better cross platform usage"
        https://bugs.webkit.org/show_bug.cgi?id=191732
        https://trac.webkit.org/changeset/238678

2018-11-29  Youenn Fablet  <youenn@apple.com>

        A sender created through addTransceiver and populated using addTrack should have its source set
        https://bugs.webkit.org/show_bug.cgi?id=192136

        Reviewed by Eric Carlson.

        In case libwebrtc backend is already created, we need to make sure to
        set the track source to the libwebrtc sender backend that is actually
        tied to the sender.

        Covered by updated test.

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::addTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:

2018-11-29  Megan Gardner  <megan_gardner@apple.com>

        Move Lookup Code for better cross platform usage
        https://bugs.webkit.org/show_bug.cgi?id=191732

        Reviewed by Alex Christensen.

        Not currenlty testable

        DictionaryLookup uses Reveal now, which is slated to be cross-platform.
        That patch gates the parts of DictionaryLookup that currently do not have
        an available implementation on iOS. Once Reveal is ready, this code will be
        replaced or expanded upon, as appropriate.

        * editing/mac/DictionaryLookup.h:
        * editing/mac/DictionaryLookup.mm:
        (WebCore::showPopupOrCreateAnimationController):
        (WebCore::DictionaryLookup::showPopup):
        (WebCore::DictionaryLookup::hidePopup):
        (WebCore::DictionaryLookup::animationControllerForPopup):

2018-11-29  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: breaks if binary data (Uint8Array) and autoIncrement key in store
        https://bugs.webkit.org/show_bug.cgi?id=185869
        <rdar://problem/40453623>

        Reviewed by Geoffrey Garen.

        lexicalGlobalObject is casted to JSDOMGlobalObject in CloneSerializer::dumpArrayBufferView, 
        so we should use JSDOMGlobalObject instead of JSGlobalObject in IDB database thread.

        Covered by modified test: storage/indexeddb/objectstore-autoincrement.html

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::databaseThreadVM):
        (WebCore::IDBServer::UniqueIDBDatabase::databaseThreadExecState):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::create):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWrapper.cpp:
        (WebCore::JSDOMObject::JSDOMObject):

2018-11-29  Sihui Liu  <sihui_liu@apple.com>

        Unexpected constructor / instanceof  behavior when retrieving indexedDB data in an iframe
        https://bugs.webkit.org/show_bug.cgi?id=185906
        <rdar://problem/40583100>

        Reviewed by Geoffrey Garen.

        ScriptExecutionContext::execState() returned state of main frame, so deserialization of 
        IDBValue in iframe used constructors of main frame, which is wrong.

        Test: storage/indexeddb/instanceof-iframe.html

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::execState):

2018-11-29  Don Olmstead  <don.olmstead@sony.com>

        Make generic ScrollAnimator
        https://bugs.webkit.org/show_bug.cgi?id=192128

        Reviewed by Michael Catanzaro.

        No new tests. No change in behavior.

        Moves ScrollAnimatorGtk into ScrollAnimatorGeneric where it can be used
        by other implementations. Fixed some compilation issues around using
        this as a default implementation.

        Removing ScrollAnimatorSmooth since it is dead code and doesn't even
        compile at this time.

        Fixing a compilation issue within LowPowerModeNotifierGLib
        implementation that appeared due to unified sources changes.

        * PlatformGTK.cmake:
        * SourcesGTK.txt:
        * platform/LowPowerModeNotifier.h:
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::swipeVelocity const):
        * platform/ScrollAnimatorSmooth.cpp: Removed.
        * platform/ScrollAnimatorSmooth.h: Removed.
        * platform/generic/ScrollAnimatorGeneric.cpp: Renamed from Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp.
        (WebCore::ScrollAnimator::create):
        (WebCore::ScrollAnimatorGeneric::ScrollAnimatorGeneric):
        (WebCore::ScrollAnimatorGeneric::ensureSmoothScrollingAnimation):
        (WebCore::ScrollAnimatorGeneric::scroll):
        (WebCore::ScrollAnimatorGeneric::scrollToOffsetWithoutAnimation):
        (WebCore::ScrollAnimatorGeneric::computeVelocity):
        (WebCore::ScrollAnimatorGeneric::handleWheelEvent):
        (WebCore::ScrollAnimatorGeneric::willEndLiveResize):
        (WebCore::ScrollAnimatorGeneric::updatePosition):
        (WebCore::ScrollAnimatorGeneric::didAddVerticalScrollbar):
        (WebCore::ScrollAnimatorGeneric::didAddHorizontalScrollbar):
        (WebCore::ScrollAnimatorGeneric::willRemoveVerticalScrollbar):
        (WebCore::ScrollAnimatorGeneric::willRemoveHorizontalScrollbar):
        (WebCore::ScrollAnimatorGeneric::updateOverlayScrollbarsOpacity):
        (WebCore::ScrollAnimatorGeneric::overlayScrollbarAnimationTimerFired):
        (WebCore::ScrollAnimatorGeneric::showOverlayScrollbars):
        (WebCore::ScrollAnimatorGeneric::hideOverlayScrollbars):
        (WebCore::ScrollAnimatorGeneric::mouseEnteredContentArea):
        (WebCore::ScrollAnimatorGeneric::mouseExitedContentArea):
        (WebCore::ScrollAnimatorGeneric::mouseMovedInContentArea):
        (WebCore::ScrollAnimatorGeneric::contentAreaDidShow):
        (WebCore::ScrollAnimatorGeneric::contentAreaDidHide):
        (WebCore::ScrollAnimatorGeneric::notifyContentAreaScrolled):
        (WebCore::ScrollAnimatorGeneric::lockOverlayScrollbarStateToHidden):
        * platform/generic/ScrollAnimatorGeneric.h: Renamed from Source/WebCore/platform/gtk/ScrollAnimatorGtk.h.
        * platform/glib/LowPowerModeNotifierGLib.cpp:
        * platform/gtk/PlatformWheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::swipeVelocity const): Deleted.

2018-11-28  Dean Jackson  <dino@apple.com>

        [ES Modules] Allow .mjs content when loaded from file://
        https://bugs.webkit.org/show_bug.cgi?id=192100
        <rdar://problem/46320065>

        Reviewed by Sam Weinig.

        Node JS requires ES Module files to be identified by the file
        extension of ".mjs" (no relation to Maciej Stachowiak). This new
        extension causes issues because it isn't recognised as a JavaScript
        file. When using the script tag, the author is able to force the type
        of the referenced file using an attribute, but this isn't possible
        for the import() function or import statement.

        Add a new entry into our table that maps file extensions to MIME types
        so that when a .mjs file is loaded from a file:// reference it is
        identified as JavaScript.

        Test: js/dom/modules/import-mjs-module.html

        * platform/network/mac/WebCoreURLResponse.mm: Add .mjs to the existing dictionary.
        (WebCore::createExtensionToMIMETypeMap):
        * platform/network/ios/WebCoreURLResponseIOS.mm: Add code just for .mjs.
        (WebCore::createExtensionToMIMETypeMap):

2018-11-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][Quirk] Width does not need stretching quirk.
        https://bugs.webkit.org/show_bug.cgi?id=192135

        Reviewed by Antti Koivisto.

        In BFC the block box's width (auto) always streches to the content width of the containing block.

        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::needsStretching):
        (WebCore::Layout::BlockFormattingContext::Quirks::isStretchedToInitialContainingBlock): Deleted.
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedWidth): Deleted.

2018-11-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][Quirk] Move quirk functions to dedicated classes.
        https://bugs.webkit.org/show_bug.cgi?id=192133

        Reviewed by Antti Koivisto.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedHeightValue):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        (WebCore::Layout::initialContainingBlock): Deleted.
        (WebCore::Layout::isStretchedToInitialContainingBlock): Deleted.
        (WebCore::Layout::stretchHeightToInitialContainingBlockQuirk): Deleted.
        (WebCore::Layout::stretchWidthToInitialContainingBlock): Deleted.
        * layout/blockformatting/BlockFormattingState.cpp:
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginTopCollapsedWithParent):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginTop):
        (WebCore::Layout::isQuirkContainer): Deleted.
        (WebCore::Layout::hasMarginTopQuirkValue): Deleted.
        (WebCore::Layout::shouldIgnoreMarginTopInQuirkContext): Deleted.
        (WebCore::Layout::isMarginTopCollapsedWithParent): Deleted.
        * layout/inlineformatting/InlineFormattingContext.cpp:
        * layout/inlineformatting/text/TextUtil.h:

2018-11-29  Rob Buis  <rbuis@igalia.com>

        Remove some superfluous code in ContentSecurityPolicy::upgradeInsecureRequestIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=192076

        Reviewed by Frédéric Wang.

        Since we do an early return if the protocol is not http or ws, the if check
        for ws protocol and else statement are not needed, so use an ASSERT instead.

        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::upgradeInsecureRequestIfNeeded const):

2018-11-29  Frederic Wang  <fwang@igalia.com>

        Add ParentRelativeScrollableRect to ScrollingCoordinator::ScrollingGeometry
        https://bugs.webkit.org/show_bug.cgi?id=172914

        Reviewed by Simon Fraser.

        This patch adds a ParentRelativeScrollableRect ScrollingCoordinator::ScrollingGeometry and
        the corresponding set/get/dump APIs. Currently, the setter is never used so the behavior is
        unchanged. In the future, this rect will be used for hit testing of subframes during
        asynchronous macOS scrolling (but 172917).

        No new tests, behavior unchanged.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateFrameScrollingNode):
        (WebCore::AsyncScrollingCoordinator::updateOverflowScrollingNode):
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setParentRelativeScrollableRect):
        (WebCore::ScrollingStateScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingStateScrollingNode.h:
        (WebCore::ScrollingStateScrollingNode::parentRelativeScrollableRect const):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::parentRelativeScrollableRect const):

2018-11-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOSMac] Dropping text selections from web content into editable elements crashes the web process
        https://bugs.webkit.org/show_bug.cgi?id=192113
        <rdar://problem/46323701>

        Reviewed by Ryosuke Niwa.

        In iOSMac, registering invalid UTIs on NSItemProvider when starting a drag or handling a drop does not work.
        Since iOS writes and reads only "Apple Web Archive pasteboard type" (a.k.a. `WebArchivePboardType`) during drag
        and drop as well as copy and paste, we fail to read or write any web archive data, and subsequently fall back to
        reading RTF or flat RTFD, both of which are not supported in iOSMac, since UIFoundation links against the
        system's macOS WebKit stack.

        To fix this, we add support for reading and writing com.apple.webarchive (`kUTTypeWebArchive`) on iOS, so that
        WebKit-based iOSMac applications can understand web archive data from the host running macOS, and the host can
        also understand web archive data written by the iOSMac app. Additionally, don't allow reading RTF and flat RTFD
        as web content in iOSMac. (Note that writing RTF and flat RTFD is still safe, since it does not depend on
        UIFoundation.framework but rather `WebCore::HTMLConverter`).

        Test: DragAndDropTests.ModernWebArchiveType

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::createFragment):

        Additionally make sure that we never call into UIFoundation's NSAttributedString to markup conversion codepath
        by making `createFragment` an empty stub on iOSMac.

        * platform/ios/PasteboardIOS.mm:
        (WebCore::supportedImageTypes):
        (WebCore::isTypeAllowedByReadingPolicy):
        (WebCore::Pasteboard::readPasteboardWebContentDataForType):
        (WebCore::Pasteboard::supportedWebContentPasteboardTypes):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write):

2018-11-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r238653 and r238656.
        https://bugs.webkit.org/show_bug.cgi?id=192130

        Breaks iOS build (Requested by smfr on #webkit).

        Reverted changesets:

        "Move Lookup Code for better cross platform usage"
        https://bugs.webkit.org/show_bug.cgi?id=191732
        https://trac.webkit.org/changeset/238653

        "Attempt to fix the iOS build by only including RevealSPI.h
        when it's needed."
        https://trac.webkit.org/changeset/238656

2018-11-28  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix the iOS build by only including RevealSPI.h when it's needed.

        * editing/cocoa/DictionaryLookup.mm:

2018-11-28  Alex Christensen  <achristensen@webkit.org>

        Modernize BlobRegistry::writeBlobsToTemporaryFiles
        https://bugs.webkit.org/show_bug.cgi?id=192117

        Reviewed by Dean Jackson.

        No change in behavior.  Just use CompletionHandlers and the new sendWithAsyncReply instead of two way messaging
        and manual completion handler management.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::writeBlobsToDiskForIndexedDB):
        * platform/network/BlobRegistry.h:
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::writeBlobsToTemporaryFiles):
        * platform/network/BlobRegistryImpl.h:

2018-11-15  Megan Gardner  <megan_gardner@apple.com>

        Move Lookup Code for better cross platform usage
        https://bugs.webkit.org/show_bug.cgi?id=191732

        Reviewed by Alex Christensen.

        Not currenlty testable

        DictionaryLookup uses Reveal now, which is slated to be cross-platform.
        That patch gates the parts of DictionaryLookup that currently do not have
        an available implementation on iOS. Once Reveal is ready, this code will be
        replaced or expanded upon, as appropriate.

        * editing/mac/DictionaryLookup.h:
        * editing/mac/DictionaryLookup.mm:
        (WebCore::showPopupOrCreateAnimationController):
        (WebCore::DictionaryLookup::showPopup):
        (WebCore::DictionaryLookup::hidePopup):
        (WebCore::DictionaryLookup::animationControllerForPopup):

2018-11-28  Christopher Reid  <chris.reid@sony.com>

        SQLiteDatabase::open is constantly printing "SQLite database failed to checkpoint: database table is locked" errors
        https://bugs.webkit.org/show_bug.cgi?id=192111

        Reviewed by Alex Christensen.

        Ensure the journal_mode=WAL statement is finalized before wal_checkpoint is executed.

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

2018-11-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Updating href on linearGradient and radialGradient doesn't update its rendering
        https://bugs.webkit.org/show_bug.cgi?id=191934

        Reviewed by Ryosuke Niwa.

        Mark the gradient renderer for repaint when the value of the 'href'
        attribute changes.

        Tests: fast/shadow-dom/svg-linear-gradient-dynamic-update-href-in-shadow-tree.html
               fast/shadow-dom/svg-radial-gradient-dynamic-update-href-in-shadow-tree.html
               svg/dynamic-updates/SVGLinearGradientElement-svgdom-href-prop.html
               svg/dynamic-updates/SVGRadialGradientElement-svgdom-href-prop.html

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


2018-11-28  Youenn Fablet  <youenn@apple.com>

        imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-transceivers.https.html is flaky on iOS simulator
        https://bugs.webkit.org/show_bug.cgi?id=192037

        Reviewed by Eric Carlson.

        The stats report JS map should be created when resolving the stats promise with WebCore RTCStatsReport.
        But resolving the promise might fail in case of a page being suspended.
        In that case, no JSRTCStatsReport is created and there is no backing map.
        Update the code to reflect that.
        Covered by existing test.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::getStats):
        * Modules/mediastream/libwebrtc/LibWebRTCStatsCollector.cpp:
        (WebCore::LibWebRTCStatsCollector::~LibWebRTCStatsCollector):
        (WebCore::LibWebRTCStatsCollector::OnStatsDelivered):
        * Modules/mediastream/libwebrtc/LibWebRTCStatsCollector.h:

2018-11-28  Keith Rollin  <krollin@apple.com>

        Update generate-{derived,unified}-sources scripts to support generating .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=192031
        <rdar://problem/46286816>

        Reviewed by Alex Christensen.

        The Generate Derived Sources and Generate Unified Sources build phases
        in Xcode need to have their inputs and outputs specified. This
        specification will come in the form of .xcfilelist files that will be
        attached to these build phases. There is one .xcfilelist file that
        lists the input file and one that lists the output files. As part of
        this work, the various generate-{derived,unified}-sources scripts that
        are executed in these Generate build phases are modified to help in
        the creation of these .xcfilelist files. In particular, they can now
        be invoked with command-line parameters. These parameters are then
        used to alter the normal execution of these scripts, causing them to
        produce the .xcfilelist files as opposed to actually generating the
        files that are listed in those files.

        No new tests -- no changed functionality.

        * Scripts/generate-derived-sources.sh:
        * Scripts/generate-unified-sources.sh:

2018-11-28  Keith Rollin  <krollin@apple.com>

        Revert print_all_generated_files work in r238008; tighten up target specifications
        https://bugs.webkit.org/show_bug.cgi?id=192025
        <rdar://problem/46284301>

        Reviewed by Alex Christensen.

        In r238008, I added a facility for DerivedSources.make makefiles to
        print out the list of files that they generate. This output was used
        in the generation of .xcfilelist files used to specify the output of
        the associated Generate Derived Sources build phases in Xcode. This
        approach worked, but it meant that people would need to follow a
        specific convention to keep this mechanism working.

        Instead of continuing this approach, I'm going to implement a new
        facility based on the output of `make` when passed the -d flag (which
        prints dependency information). This new mechanism is completely
        automatic and doesn't need maintainers to follow a convention. To that
        end, remove most of the work performed in r238008 that supports the
        print_all_generated_files target.

        At the same time, it's important for the sets of targets and their
        dependencies to be complete and correct. Therefore, also include
        changes to bring those up-to-date. As part of that, you'll see
        prevalent use of a particular technique. Here's an example:

            BYTECODE_FILES = \
                Bytecodes.h \
                BytecodeIndices.h \
                BytecodeStructs.h \
                InitBytecodes.asm \
            #
            BYTECODE_FILES_PATTERNS = $(subst .,%,$(BYTECODE_FILES))

            all : $(BYTECODE_FILES)

            $(BYTECODE_FILES_PATTERNS): $(wildcard $(JavaScriptCore)/generator/*.rb) $(JavaScriptCore)/bytecode/BytecodeList.rb
                ...

        These lines indicate a set of generated files (those specified in
        BYTECODE_FILES). These files are generated by the BytecodeList.rb
        tool. But, as opposed to the normal rule where a single foo.output is
        generated by foo.input plus some additional dependencies, this rule
        produces multiple output files from a tool whose connection to the
        output files is not immediately clear. A special approach is needed
        where a single rule produces multiple output files. The normal way to
        implement this is to use an .INTERMEDIATE target. However, we used
        this approach in the past and ran into a problem with it, addressing
        it with an alternate approach in r210507. The above example shows this
        approach. The .'s in the list of target files are replaced with %'s,
        and the result is used as the left side of the dependency rule.

        No new tests -- no changed functionality.

        * DerivedSources.make:

2018-11-28  Alex Christensen  <achristensen@webkit.org>

        Remove dead code from an earlier attempt at implementing safe browsing
        https://bugs.webkit.org/show_bug.cgi?id=192067

        Reviewed by Chris Dumez.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.cpp:
        (WebCore::EmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::setShouldSkipSafeBrowsingCheck): Deleted.
        (WebCore::FrameLoadRequest::shouldSkipSafeBrowsingCheck): Deleted.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadArchive):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::loadPostRequest):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::loadWithNavigationAction):
        * loader/FrameLoaderClient.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        * loader/PolicyChecker.h:
        * loader/ShouldSkipSafeBrowsingCheck.h: Removed.

2018-11-28  Alex Christensen  <achristensen@webkit.org>

        Add SessionIDs wherever BlobURLs are used in SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=192062

        Reviewed by Dean Jackson.

        Just adding infrastructure for fixing "the blob bug"

        * Modules/indexeddb/IDBDatabaseIdentifier.cpp:
        (WebCore::IDBDatabaseIdentifier::IDBDatabaseIdentifier):
        (WebCore::IDBDatabaseIdentifier::isolatedCopy const):
        * Modules/indexeddb/IDBDatabaseIdentifier.h:
        (WebCore::IDBDatabaseIdentifier::hash const):
        (WebCore::IDBDatabaseIdentifier::sessionID const):
        (WebCore::IDBDatabaseIdentifier::encode const):
        (WebCore::IDBDatabaseIdentifier::decode):
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::openInternal):
        (WebCore::IDBFactory::deleteDatabase):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::putOrAddOnServer):
        * Modules/indexeddb/IDBValue.cpp:
        (WebCore::IDBValue::IDBValue):
        (WebCore::IDBValue::setAsIsolatedCopy):
        * Modules/indexeddb/IDBValue.h:
        (WebCore::IDBValue::sessionID const):
        (WebCore::IDBValue::encode const):
        (WebCore::IDBValue::decode):
        * Modules/indexeddb/server/MemoryIndexCursor.cpp:
        (WebCore::IDBServer::MemoryIndexCursor::currentData):
        * Modules/indexeddb/server/MemoryObjectStoreCursor.cpp:
        (WebCore::IDBServer::MemoryObjectStoreCursor::currentData):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::getBlobRecordsForObjectStoreRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetIndexRecordForOneKey):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::internalFetchNextRecord):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::performPutOrAdd):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::deserializeIDBValueToJSValue):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneSerializer::CloneSerializer):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::deserialize):
        (WebCore::CloneDeserializer::CloneDeserializer):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::deserialize):
        (WebCore::SerializedScriptValue::writeBlobsToDiskForIndexedDB):
        (WebCore::SerializedScriptValue::writeBlobsToDiskForIndexedDBSynchronously):
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::sessionID const):

2018-11-28  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Begin implementation of WebGPURenderPassEncoder and barebones WebGPURenderPassDescriptor
        https://bugs.webkit.org/show_bug.cgi?id=191990

        Reviewed by Dean Jackson.

        Begin implementation of WebGPURenderPassEncoder and its parent interface, WebGPUProgrammablePassEncoder.
        Also add code to allow creation of a primitive WebGPURenderPassDescriptor with the sole purpose of providing 
        a WebGPUTextureView reference to the render pass creation function, WebGPUCommandBuffer::beginRenderPass().

        Test: webgpu/render-passes.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/webgpu/WebGPUCommandBuffer.cpp:
        (WebCore::WebGPUCommandBuffer::WebGPUCommandBuffer):
        (WebCore::WebGPUCommandBuffer::beginRenderPass): Added. Returns a WebGPURenderPassEncoder upon success.
        * Modules/webgpu/WebGPUCommandBuffer.h:
        * Modules/webgpu/WebGPUCommandBuffer.idl:
        * Modules/webgpu/WebGPUProgrammablePassEncoder.cpp: Added.
        * Modules/webgpu/WebGPUProgrammablePassEncoder.h: Added.
        * Modules/webgpu/WebGPUProgrammablePassEncoder.idl: Added. Empty (for now) interface parenting WebGPURenderPassEncoder.
        * Modules/webgpu/WebGPURenderPassDescriptor.h:
        * Modules/webgpu/WebGPURenderPassDescriptor.idl: Added. Directly handles a WebGPUTextureView attachment; all other color attachment properties set by implementation for now.
        * Modules/webgpu/WebGPURenderPassEncoder.cpp: Added.
        (WebCore::WebGPURenderPassEncoder::create):
        (WebCore::WebGPURenderPassEncoder::WebGPURenderPassEncoder):
        (WebCore::WebGPURenderPassEncoder::passEncoder const):
        * Modules/webgpu/WebGPURenderPassEncoder.h: Added. Interface to GPURenderPassEncoder.
        * Modules/webgpu/WebGPURenderPassEncoder.idl: Added. Allows WebGPU developer to encode commands for the WebGPUCommandBuffer.
        * Modules/webgpu/WebGPUTextureView.cpp:
        (WebCore::WebGPUTextureView::WebGPUTextureView):
        * Modules/webgpu/WebGPUTextureView.h:
        (WebCore::WebGPUTextureView::texture):
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * platform/graphics/gpu/GPUCommandBuffer.h:
        (WebCore::GPUCommandBuffer::platformCommandBuffer const):
        * platform/graphics/gpu/GPUProgrammablePassEncoder.h: Added. Base class for GPURenderPassEncoder.
        * platform/graphics/gpu/GPURenderPassDescriptor.h: Added.
        * platform/graphics/gpu/GPURenderPassEncoder.h: Added. Wrapper class for MTLRenderCommandEncoder.
        * platform/graphics/gpu/GPUTexture.h:
        (WebCore::GPUTexture::platformTexture const):
        * platform/graphics/gpu/cocoa/GPUProgrammablePassEncoderMetal.mm: Added.
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm: Added.
        (WebCore::GPURenderPassEncoder::create): Creates the backing MTLRenderCommandEncoder; returns null if this fails. 
        (WebCore::GPURenderPassEncoder::GPURenderPassEncoder):
        (WebCore::GPURenderPassEncoder::~GPURenderPassEncoder): End encoding before destroying the MTLCommandEncoder to prevent an exception.
        (WebCore::GPURenderPassEncoder::platformPassEncoder const):

2018-11-28  Rob Buis  <rbuis@igalia.com>

        [XHR] Document.lastModified doesn't work for non-rendered documents
        https://bugs.webkit.org/show_bug.cgi?id=179375

        Reviewed by Alexey Proskuryakov.

        Add setOverrideLastModified to override last modified date for
        standalone Documents.

        Behavior matches Firefox and Chrome.

        Test: web-platform-tests/xhr/responsexml-document-properties.htm

        * dom/Document.cpp:
        (WebCore::Document::overrideLastModified):
        (WebCore::Document::lastModified const): no need to test m_frame since that's already done in loader().
        (WebCore::Document::lastModified): Deleted.
        * dom/Document.h:
        * xml/XMLHttpRequest.cpp:

2018-11-28  Yongjun Zhang  <yongjun_zhang@apple.com>

        Allow WebKit clients to specify a minimum effective width for layout.
        https://bugs.webkit.org/show_bug.cgi?id=191499
        <rdar://problem/45362678>

        Reviewed by Wenson Hsieh.

        If we ignore the meta viewport (_shouldIgnoreMetaViewport is true), the default layout width will be device
        width. For clients that wish to lay out the content with a different width value, we would need to add a way
        to specify the effective width for layout.

        Tests: fast/viewport/ios/ipad/viewport-overriden-by-minimum-effective-width-if-ignore-meta-viewport.html
               fast/viewport/ios/ipad/viewport-unchanged-by-minimum-effective-width-if-not-ignore-meta-viewport.html

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::setViewLayoutSize): Add a new argument effectiveWidth.
        (WebCore::ViewportConfiguration::nativeWebpageParameters): Make sure minimumScale for nativeWebpageParameters
            is small enough so that it won't clamp out the initial scale. If content is wider than the viewport, this
            ensures we can still zoom out the page.
        (WebCore::ViewportConfiguration::updateConfiguration): update _minimumEffectiveDeviceWidth and apply that to
            the layout size scale computation.
        (WebCore::ViewportConfiguration::effectiveLayoutSizeScaleFactor): A helper method to return the effective
            layout scale factor which is also effected by _minimumEffectiveDeviceWidth.
        (WebCore::ViewportConfiguration::updateMinimumLayoutSize): Update m_minimumLayoutSize based on effectiveLayoutSizeScaleFactor().
        (WebCore::ViewportConfiguration::description const): Also dump m_minimumEffectiveDeviceWidth.
        * page/ViewportConfiguration.h: Add a member variable m_minimumEffectiveDeviceWidth.

2018-11-28  Stephan Szabo  <stephan.szabo@sony.com>

        Make generic EventHandler methods
        https://bugs.webkit.org/show_bug.cgi?id=192032

        Reviewed by Michael Catanzaro.

        No new tests. No new behavior.

        Move mostly generic for non-Apple platform implementations
        of methods from EventHandlerGlib into EventHandler. Two
        of these also had different Windows implementations, so
        to limit behavior change from this, those are currently
        overridden for Windows as well as Mac and IOS.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::widgetDidHandleWheelEvent):
        (WebCore::EventHandler::tabsToAllFormControls const):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::eventActivatedView const):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMousePressEventToSubframe): Deleted.
        (WebCore::EventHandler::passMouseReleaseEventToSubframe): Deleted.
        (WebCore::EventHandler::widgetDidHandleWheelEvent): Deleted.
        (WebCore::EventHandler::tabsToAllFormControls const): Deleted.
        (WebCore::EventHandler::focusDocumentView): Deleted.
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget): Deleted.
        (WebCore::EventHandler::accessKeyModifiers): Deleted.
        * platform/glib/EventHandlerGLib.cpp:
        (WebCore::EventHandler::tabsToAllFormControls const): Deleted.
        (WebCore::EventHandler::focusDocumentView): Deleted.
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget): Deleted.
        (WebCore::EventHandler::passMouseDownEventToWidget): Deleted.
        (WebCore::EventHandler::eventActivatedView const): Deleted.
        (WebCore::EventHandler::widgetDidHandleWheelEvent): Deleted.
        (WebCore::EventHandler::passMousePressEventToSubframe): Deleted.
        (WebCore::EventHandler::passMouseMoveEventToSubframe): Deleted.
        (WebCore::EventHandler::passMouseReleaseEventToSubframe): Deleted.
        (WebCore::EventHandler::accessKeyModifiers): Deleted.

2018-11-28  Zalan Bujtas  <zalan@apple.com>

        [LFC][Quirk] Use non-collapsed vertical margin values when the container is stretched to the size of the ICB.
        https://bugs.webkit.org/show_bug.cgi?id=192078

        Reviewed by Antti Koivisto.

        This quirk happens when the body height is 0 which means its vertical margins collapse through (top and bottom margins are adjoining).
        However now that we stretch the body they don't collapse through anymore, so we need to use the non-collapsed values instead.

        * layout/LayoutUnits.h:
        (WebCore::Layout::HeightAndMargin::usedMarginValues const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::stretchHeightToInitialContainingBlock):

2018-11-28  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add support for quirk container's collapsing top margin in quirks mode.
        https://bugs.webkit.org/show_bug.cgi?id=192070

        Reviewed by Antti Koivisto.

        In quirk mode when the top margin collapsing is computed for a quirk container (body, table cell) and the canditate margin value is
        also a quirk value, we just ignore it.

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::isQuirkContainer):
        (WebCore::Layout::hasMarginTopQuirkValue):
        (WebCore::Layout::shouldIgnoreMarginTopInQuirkContext):
        (WebCore::Layout::isMarginTopCollapsedWithParent):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginTop):
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::isTableCell const):

2018-11-28  Ali Juma  <ajuma@chromium.org>

        Intersection Observer: rootMargin: '' gives weird results
        https://bugs.webkit.org/show_bug.cgi?id=191975

        Reviewed by Simon Fraser.

        When converting the rootMargin string into a LengthBox, explicitly construct a Length
        of size 0px for each dimension, instead of using Length's default constructor. The
        default constructor creates a Length with value Auto, which causes us to incorrectly
        apply a non-zero rootMargin.

        Test: imported/w3c/web-platform-tests/intersection-observer/empty-root-margin.html

        * page/IntersectionObserver.cpp:
        (WebCore::parseRootMargin):

2018-11-28  Thibault Saunier  <tsaunier@igalia.com>

        [WebRTC][GStreamer] Make sure to have the default microphone on the top of the list
        https://bugs.webkit.org/show_bug.cgi?id=192026

        Reviewed by Philippe Normand.

        Otherwise we might end up picking a useless one in some applications
        (not sure what those application do though).

        GStreamer patch proposed as https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/merge_requests/34/diffs

        * platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.cpp:
        (WebCore::sortDevices):
        (WebCore::GStreamerCaptureDeviceManager::addDevice):
        (WebCore::GStreamerCaptureDeviceManager::refreshCaptureDevices):
        * platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.h:

2018-11-28  Thibault Saunier  <tsaunier@igalia.com>

        [WebRTC][GStreamer] Tag all cameras with as 'Unknown' facing mode
        https://bugs.webkit.org/show_bug.cgi?id=192028

        Reviewed by Philippe Normand.

        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        (WebCore::GStreamerVideoCaptureSource::capabilities):

2018-11-28  Thibault Saunier  <tsaunier@igalia.com>

        [WebRTC][GStreamer] Use a GUniquePtr to hold the GstAudioConverter in our OutgoingAudioSource
        https://bugs.webkit.org/show_bug.cgi?id=192027

        Reviewed by Xabier Rodriguez-Calvar.

        Cleaning up a bit the code.

        It is a minor refactoring, no new test required.

        * platform/graphics/gstreamer/GUniquePtrGStreamer.h:
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp:
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::~RealtimeOutgoingAudioSourceLibWebRTC):
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::audioSamplesAvailable):
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::pullAudioData):
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.h:

2018-11-28  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Do not run device monitor for device type we do not handle
        https://bugs.webkit.org/show_bug.cgi?id=191904

        This is useless work and it throws warning about use GstDeviceMonitor without filters.

        Reviewed by Philippe Normand.

        * platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.cpp:
        (WebCore::GStreamerCaptureDeviceManager::refreshCaptureDevices):

2018-11-27  Rob Buis  <rbuis@igalia.com>

        Block more ports (427, 548, 6697)
        https://bugs.webkit.org/show_bug.cgi?id=186092

        Reviewed by Frédéric Wang.

        Block port 427, ports 548 and 6697 are aleady blocked and
        are tested by the updated request-bad-port.html wpt test.

        Behavior matches Firefox and Chrome.

        Test: web-platform-tests/fetch/api/request/request-bad-port.html

        * platform/URL.cpp:
        (WebCore::portAllowed):

2018-11-27  Youenn Fablet  <youenn@apple.com>

        Log WebRTC stats in inspector console only when setting is verbose
        https://bugs.webkit.org/show_bug.cgi?id=192014

        Reviewed by Eric Carlson.

        Add a WebRTCStats channel that is used by default to output WebRTC stats in console.
        When WebRTC Debug logging is enabled, log WebRTC stats in WebRTC channel,
        so that they appear as debug information in Web Inspector.

        No change of JS behavior.
        Covered by manually testing what is logged in inspector and console.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::OnStatsDelivered):
        * platform/Logging.h:

2018-11-27  Simon Fraser  <simon.fraser@apple.com>

        Fix the mis-spelled "m_clienstWaitingForAsyncDecoding"
        https://bugs.webkit.org/show_bug.cgi?id=192060

        Reviewed by Wenson Hsieh.

        Fix the mis-spelling of "m_clienstWaitingForAsyncDecoding".

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::didRemoveClient):
        (WebCore::CachedImage::isClientWaitingForAsyncDecoding const):
        (WebCore::CachedImage::addClientWaitingForAsyncDecoding):
        (WebCore::CachedImage::removeAllClientsWaitingForAsyncDecoding):
        (WebCore::CachedImage::allClientsRemoved):
        (WebCore::CachedImage::clear):
        (WebCore::CachedImage::createImage):
        (WebCore::CachedImage::imageFrameAvailable):
        * loader/cache/CachedImage.h:

2018-11-27  Mark Lam  <mark.lam@apple.com>

        ENABLE_FAST_JIT_PERMISSIONS should be false for iosmac.
        https://bugs.webkit.org/show_bug.cgi?id=192055
        <rdar://problem/46288783>

        Reviewed by Saam Barati.

        No new tests needed.  Removing an invalid configuration that is not used in WebCore.

        * Configurations/FeatureDefines.xcconfig:

2018-11-27  Jiewen Tan  <jiewen_tan@apple.com>

        Remove kCCNotVerified
        https://bugs.webkit.org/show_bug.cgi?id=192034
        <rdar://problem/46235863>

        Reviewed by Alexey Proskuryakov.

        No change of behaviours.

        * crypto/CommonCryptoUtilities.h:
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::verifyRSASSA_PKCS1_v1_5):

2018-11-27  Simon Fraser  <simon.fraser@apple.com>

        Avoid triggering compositing updates when only the root layer is composited
        https://bugs.webkit.org/show_bug.cgi?id=191813

        Reviewed by Zalan Bujtas.

        If we know that the only composited layer is the root, we can avoid triggering deep
        compositing updates sometimes, for example when layout changes size or position,
        or when z-order lists change.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::updateCompositingLayersAfterScroll):
        (WebCore::outputPaintOrderTreeRecursive):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBackingAndHierarchy): Consult the layer.hasCompositingDescendant()
        flag to cut off descendants traversal when possible.
        (WebCore::RenderLayerCompositor::layerStyleChanged):

2018-11-27  Eric Carlson  <eric.carlson@apple.com>

        Refactor duplicate code for calling into media controls
        https://bugs.webkit.org/show_bug.cgi?id=192040
        <rdar://problem/46278931>

        Reviewed by Youenn Fablet.

        No new tests, no functional change.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setupAndCallJS):
        (WebCore::HTMLMediaElement::updateCaptionContainer):
        (WebCore::HTMLMediaElement::configureTextTrackDisplay):
        (WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript):
        (WebCore::HTMLMediaElement::setControllerJSProperty):
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot):
        (WebCore::HTMLMediaElement::updateMediaControlsAfterPresentationModeChange):
        (WebCore::HTMLMediaElement::getCurrentMediaControlsStatus):
        * html/HTMLMediaElement.h:

2018-11-27  Simon Fraser  <simon.fraser@apple.com>

        Momentum scrolling ends at the wrong place when a scrolling overflow element has a non-zero border
        https://bugs.webkit.org/show_bug.cgi?id=191322

        Reviewed by Dean Jackson.
        
        The scrolling momentum logic in ScrollController::handleWheelEvent() which computes whether the scroll is pinned
        to the end makes use of ScrollableArea::visibleContentRect(). RenderLayer's implementation of this was incorrect when
        the layer's element had borders, causing the momentum scroll to stop early.
        
        Fix by using the correct size (visible size, not layer size).

        Test: fast/scrolling/momentum-scroll-with-borders.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::visibleContentRectInternal const):

2018-11-27  Simon Fraser  <simon.fraser@apple.com>

        Composited and tiled layers fail to update on scrolling in WebView
        https://bugs.webkit.org/show_bug.cgi?id=191821
        rdar://problem/46009272

        Reviewed by Zalan Bujtas.
        
        We relied on AppKit calling -[NSView viewWillDraw] on scrolling to trigger compositing
        layer flushes which are necessary to update backing store attachment, and tile coverage
        for tiled layers. However, we no longer get these reliably in WebView, so explicitly trigger
        flushes if necessary from FrameView::scrollOffsetChangedViaPlatformWidgetImpl().
        didChangeVisibleRect() is the same code path used by iOS UIWebView for the same purpose.

        Tests: compositing/backing/backing-store-attachment-scroll.html
               compositing/tiling/tile-coverage-on-scroll.html

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollOffsetChangedViaPlatformWidgetImpl):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateCoverage):

2018-11-27  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Add support for forcing color scheme appearance in DOM tree.
        https://bugs.webkit.org/show_bug.cgi?id=191820
        rdar://problem/46153172

        Reviewed by Devin Rousso.

        Test: inspector/css/force-page-appearance.html

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::defaultAppearanceDidChangeImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::defaultAppearanceDidChange):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::enable): Fire defaultAppearanceDidChange() on macOS Majave.
        (WebCore::InspectorPageAgent::disable): Call setForcedAppearance() with empty string.
        (WebCore::InspectorPageAgent::defaultAppearanceDidChange): Added.
        (WebCore::InspectorPageAgent::setForcedAppearance): Added.
        * inspector/agents/InspectorPageAgent.h:
        * page/Page.cpp:
        (WebCore::Page::setUseDarkAppearance): Call InspectorInstrumentation::defaultAppearanceDidChange().
        (WebCore::Page::useDarkAppearance const): Return override value if not nullopt.
        (WebCore::Page::setUseDarkAppearanceOverride): Added.
        * page/Page.h:
        (WebCore::Page::defaultUseDarkAppearance const): Added.

2018-11-27  Tim Horton  <timothy_horton@apple.com>

        Serialize and deserialize editable image strokes
        https://bugs.webkit.org/show_bug.cgi?id=192002
        <rdar://problem/30900149>

        Reviewed by Dean Jackson.

        Test: editing/images/paste-editable-image.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):
        (WebCore::HTMLImageElement::insertedIntoAncestor):
        (WebCore::HTMLImageElement::didFinishInsertingNode):
        (WebCore::HTMLImageElement::removedFromAncestor):
        (WebCore::HTMLImageElement::hasEditableImageAttribute const):
        (WebCore::HTMLImageElement::updateEditableImage):
        Call updateEditableImage() from didFinishInsertingNode instead of insertedIntoAncestor.
        This is helpful because it means we get the final, deduplicated attachment identifier
        instead of the original one when cloning or pasting.

        This also means that isConnected() is now always accurate when updateEditableImage()
        is called, so we can remove the argument that allowed us to lie from inside insertedIntoAncestor.

        * html/HTMLImageElement.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::isEditableImage const):
        Make use of hasEditableImage instead of separately checking for the attribute.

2018-11-16  Jiewen Tan  <jiewen_tan@apple.com>

        Disallow loading webarchives as iframes
        https://bugs.webkit.org/show_bug.cgi?id=191728
        <rdar://problem/45524528>

        Reviewed by Youenn Fablet.

        Disallow loading webarchives as iframes. We don't allow loading remote webarchives.
        Now, this policy is hardened to disallow loading webarchives as iframes for local
        documents as well.

        To allow old tests still be able to run, a flag is added to always allow loading local
        webarchives in document. The flag can be set via window.internals.

        Tests: webarchive/loading/test-loading-archive-subresource.html
               webarchive/loading/test-loading-top-archive.html

        * dom/Document.h:
        (WebCore::Document::setAlwaysAllowLocalWebarchive):
        (WebCore::Document::alwaysAllowLocalWebarchive):
        * loader/DocumentLoader.cpp:
        (WebCore::disallowWebArchive):
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        (WebCore::isRemoteWebArchive): Deleted.
        * testing/Internals.cpp:
        (WebCore::Internals::setAlwaysAllowLocalWebarchive const):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-11-27  Jer Noble  <jer.noble@apple.com>

        Unregister CDMSessionMediaSourceAVFObjC for error notifications during destruction.
        https://bugs.webkit.org/show_bug.cgi?id=191985
        <rdar://problem/45972018>

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::~CDMSessionMediaSourceAVFObjC):

2018-11-27  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Use LibWebRTC provided vp8 decoders and encoders
        https://bugs.webkit.org/show_bug.cgi?id=191861

        The GStreamer implementations are less feature full and less tested, now that Apple
        also use the LibWebRTC provided implementations it makes a lot of sense for us to
        do the same.

        Basically everything related to temporal scalability is not implemented in GStreamer.

        We should make sure to use GStreamer elements on low powered platforms and for
        accelerated encoders and decoders.

        Reviewed by Philippe Normand.

        This is mostly refactoring, no new test required.

        * platform/graphics/gstreamer/GStreamerCommon.h: Added GstMappedFrame similar to GstMappedBuffer but for video frames.
        (WebCore::GstMappedFrame::GstMappedFrame):
        (WebCore::GstMappedFrame::get):
        (WebCore::GstMappedFrame::ComponentData):
        (WebCore::GstMappedFrame::ComponentStride):
        (WebCore::GstMappedFrame::info):
        (WebCore::GstMappedFrame::width):
        (WebCore::GstMappedFrame::height):
        (WebCore::GstMappedFrame::format):
        (WebCore::GstMappedFrame::~GstMappedFrame):
        (WebCore::GstMappedFrame::operator bool const):
        * platform/graphics/gstreamer/GUniquePtrGStreamer.h:
        * platform/mediastream/gstreamer/GStreamerVideoFrameLibWebRTC.cpp:
        (WebCore::GStreamerVideoFrameLibWebRTC::ToI420): Implemented support for converting frame formats with the GstVideoConverter API
        * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:
        (WebCore::GStreamerVideoDecoder::GstDecoderFactory):
        (WebCore::GStreamerVideoDecoder::HasGstDecoder):
        (WebCore::VP8Decoder::Create): Creates a `webrtc::LibvpxVp8Decoder()` if GStreamer decoder would be the LibVPX based one.
        (WebCore::GStreamerVideoDecoderFactory::CreateVideoDecoder):
        * platform/mediastream/libwebrtc/GStreamerVideoEncoder.cpp:
        (gst_webrtc_video_encoder_class_init):
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp: Stop using vp8enc and use LibWebRTC based implementation
        (WebCore::GStreamerH264Encoder::GStreamerH264Encoder): Renamed H264Encoder to GStreamerH264Encoder to be more coherent with what is done in LibVPX
        (WebCore::GStreamerVP8Encoder::GStreamerVP8Encoder): Renamed VP8Encoder to GStreamerVP8Encoder to be more coherent with what is done in LibVPX
        (WebCore::GStreamerVideoEncoderFactory::CreateVideoEncoder):
        (WebCore::GStreamerVideoEncoderFactory::GetSupportedFormats const):

2018-11-27  Javier Fernandez  <jfernandez@igalia.com>

        [css-grid] align-self center and position sticky don't work together
        https://bugs.webkit.org/show_bug.cgi?id=191963

        Reviewed by Manuel Rego Casasnovas.

        This is a fix for a regression introduced in r515391, where we landed
        the implementation of alignment for positioned objects in a Grid Layout
        container.

        We assumed that items with non-static positions shouldn't honor the
        CSS Box Alignment properties. This is only true for out-of-flow items,
        absolute or fixed positioned elements. However, sticky positioned
        elements are treated as relative positioned items, but they indeed use
        non-static position to define their behavior.

        No new tests, this change is covered by current tests and make several cases to pass now.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::columnAxisPositionForChild const):
        (WebCore::RenderGrid::rowAxisPositionForChild const):

2018-11-26  Daniel Bates  <dabates@apple.com>

        REGRESSION (r238078): Do not draw caps lock indicator when Strong Password button is shown
        https://bugs.webkit.org/show_bug.cgi?id=191969
        <rdar://problem/46247569>

        Reviewed by Dean Jackson.

        Following r238078 we now support drawing the caps lock indicator in password fields on iOS.
        However it is not meaningful to show the caps lock indicator when the Strong Password button
        is visible because the password field is not editable. We should not paint the caps lock
        indicator when the Strong Password button is visible.

        Tests: fast/forms/auto-fill-button/caps-lock-indicator-should-be-visible-after-hiding-auto-fill-strong-password-button.html
               fast/forms/auto-fill-button/caps-lock-indicator-should-not-be-visible-when-auto-fill-strong-password-button-is-visible.html

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::shouldDrawCapsLockIndicator const): Do not draw the caps
        lock indicator when the password field has the Strong Password button.
        (WebCore::TextFieldInputType::updateAutoFillButton): Call capsLockStateMayHaveChanged() to
        update the visibility of the caps lock indicator when the auto fill button has changed.

2018-11-26  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238357.

        One of the layout tests added with this change is failing on Mojave.

        Reverted changeset:
        "REGRESSION (r238078): Do not draw caps lock indicator when Strong Password button is shown"
        https://bugs.webkit.org/show_bug.cgi?id=191969
        https://trac.webkit.org/changeset/238513

2018-11-26  Tim Horton  <timothy_horton@apple.com>

        Insert <attachment> elements under editable images to make their backing data accessible
        https://bugs.webkit.org/show_bug.cgi?id=191844
        <rdar://problem/30900149>

        Reviewed by Simon Fraser.

        Test: editing/images/editable-image-creates-attachment.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):
        (WebCore::HTMLImageElement::insertedIntoAncestor):
        (WebCore::HTMLImageElement::removedFromAncestor):
        When the x-apple-editable-image attribute changes, or the element is
        moved into or out of a document, call updateEditableImage.

        (WebCore::HTMLImageElement::editableImageViewID const):
        Adopt EditableImageReference.

        (WebCore::HTMLImageElement::updateEditableImage):
        When the image element moves into a document, the setting is on, and
        the appropriate attribute is applied, add an <attachment> into the
        shadow DOM, and inform the UI process both of the editable image's
        creation and that it should be associated with the new attachment.

        Use an EditableImageReference to extend the lifetime of the
        corresponding editable image in the UI process, and to communicate
        the attachment association.

        If the element was cloned from another editable image element, use the
        EditableImageReference and attachmentID from the original; the embedded
        view will be re-parented under this element's layer, and the attachment
        will be cloned (with a new ID) by editing code if the element is parented.

        (WebCore::HTMLImageElement::attachmentIdentifier const):
        (WebCore::HTMLImageElement::copyNonAttributePropertiesFromElement):
        Store the aforementioned bits of information when cloned so that we can
        reconstitute the appropriate attachment data and embedded view.

        * html/HTMLImageElement.h:
        * page/ChromeClient.h:

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/EditableImageReference.cpp: Added.
        (WebCore::EditableImageReference::EditableImageReference):
        (WebCore::EditableImageReference::~EditableImageReference):
        (WebCore::EditableImageReference::associateWithAttachment):
        * page/EditableImageReference.h: Added.
        (WebCore::EditableImageReference::create):
        (WebCore::EditableImageReference::embeddedViewID const):
        Add EditableImageReference, which manages the lifetime of the UI-side
        EditableImage and helps clients communicate about it. It is refcounted
        so that cloned <img> elements can potentially borrow the UI-side state
        (in the case where they end up getting parented).

        * page/NavigatorBase.cpp:
        Fix an unrelated unified build failure that I exposed.

2018-11-26  Jer Noble  <jer.noble@apple.com>

        Adopt -setOverrideRouteSharingPolicy:routingContextUID: SPI
        https://bugs.webkit.org/show_bug.cgi?id=190951
        <rdar://problem/45213065>

        Reviewed by Alex Christensen.

        Request the correct route policy and context from the VideoFullscreenModel.

        * platform/cocoa/VideoFullscreenModel.h:
        (WebCore::VideoFullscreenModel::requestRouteSharingPolicyAndContextUID):
        * platform/cocoa/VideoFullscreenModelVideoElement.h:
        * platform/cocoa/VideoFullscreenModelVideoElement.mm:
        (WebCore::VideoFullscreenModelVideoElement::requestRouteSharingPolicyAndContextUID):
        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerViewController setWebKitOverrideRouteSharingPolicy:routingContextUID:]):
        (VideoFullscreenInterfaceAVKit::setVideoFullscreenModel):
        (VideoFullscreenInterfaceAVKit::doSetup):

2018-11-24  Ryosuke Niwa  <rniwa@webkit.org>

        SVG use element inside a shadow tree cannot reference an element in the same tree
        https://bugs.webkit.org/show_bug.cgi?id=174977
        <rdar://problem/33665636>

        Reviewed by Zalan Bujtas.

        Make fragment URL references used by SVGelements within a shadow tree to refer to other elements
        in the same shadow tree. To do this, this patch makes targetElementFromIRIString take a TreeScope
        instead of a Document, and updates its call sites.

        This patch updates the most uses of targetElementFromIRIString except CSS cursor image, altGraph,
        and glyphRef since the cursor image isn't really a SVG feature, and there aren't really real world
        use cases in which altGraph and glyphRef are used within shadow trees.

        Tests: fast/shadow-dom/svg-animate-href-change-in-shadow-tree.html
               fast/shadow-dom/svg-animate-href-in-shadow-tree.html
               fast/shadow-dom/svg-feimage-href-in-shadow-tree.html
               fast/shadow-dom/svg-linear-gradient-href-in-shadow-tree.html
               fast/shadow-dom/svg-mpath-href-change-in-shadow-tree.html
               fast/shadow-dom/svg-mpath-href-in-shadow-tree.html
               fast/shadow-dom/svg-radial-gradient-href-in-shadow-tree.html
               fast/shadow-dom/svg-text-path-href-change-in-shadow-tree.html
               fast/shadow-dom/svg-text-path-href-in-shadow-tree.html
               fast/shadow-dom/svg-thref-href-change-in-shadow-tree.html
               fast/shadow-dom/svg-thref-href-in-shadow-tree.html
               fast/shadow-dom/svg-use-href-change-in-shadow-tree.html
               fast/shadow-dom/svg-use-href-in-shadow-tree.html

        * accessibility/AccessibilitySVGElement.cpp:
        (WebCore::AccessibilitySVGElement::targetForUseElement const):
        * css/CSSCursorImageValue.cpp:
        * rendering/svg/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::layoutPath const):
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::hasValidGlyphElements const):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::buildPendingResource):
        (WebCore::SVGFEImageElement::build):
        * svg/SVGGlyphRefElement.cpp:
        (WebCore::SVGGlyphRefElement::hasValidGlyphElement const):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::collectGradientAttributes):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::buildPendingResource):
        (WebCore::SVGMPathElement::pathElement):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::collectGradientAttributes):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::buildPendingResource):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::buildPendingResource):
        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::targetElementFromIRIString):
        * svg/SVGURIReference.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::updateShadowTree):
        (WebCore::SVGUseElement::findTarget const):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::buildPendingResource):
        (WebCore::SVGSMILElement::insertedIntoAncestor):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::FEImage):
        (WebCore::FEImage::createWithIRIReference):
        (WebCore::FEImage::referencedRenderer const):
        * svg/graphics/filters/SVGFEImage.h:

2018-11-26  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r238357.

        Casued three css tests to fail and crash on ios sim

        Reverted changeset:

        "Avoid triggering compositing updates when only the root layer
        is composited"
        https://bugs.webkit.org/show_bug.cgi?id=191813
        https://trac.webkit.org/changeset/238357

2018-11-26  Daniel Bates  <dabates@apple.com>

        Caret disappears at end of password field when caps lock indicator is shown; password field
        not scrolled when caps lock indicator is shown
        https://bugs.webkit.org/show_bug.cgi?id=191164
        <rdar://problem/45738179>

        Reviewed by Dean Jackson.

        Fixes an issue where the caret may be occluded by- or paint on top of- the caps lock indicator on
        Mac and iOS, respectively.

        If there has not been a previous selection in a focused password field, including a caret
        selection made by pressing the arrow keys, then we never scroll the password field to reveal
        the current selection when the caps lock indicator is made visible. When the caps lock indicator
        is made visible or hidden the size of the inner text renderer changes as it shrinks or expands
        to make space for the caps lock indicator or to fill the void of the now hidden caps lock indicator,
        respectively. We should detect such size changes and schedule an update and reveal of the current
        selection after layout.

        Test: fast/forms/password-scrolled-after-caps-lock-toggled.html

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setNeedsSelectionUpdate): Modified to take an enum to override the current
        selection reveal mode for the next update.
        * editing/FrameSelection.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout): Schedule post-layout a selection update that
        reveals the current selection. We pass FrameSelection::RevealSelectionAfterUpdate::Forced to ensure
        that the scheduled selection update scrolls to the reveal the current selection regardless of selection
        reveal mode. This is necessary because typing into a password field does not change the current
        selection reveal mode.

2018-11-26  Daniel Bates  <dabates@apple.com>

        Placeholder text is not repainted after caps lock indicator is hidden
        https://bugs.webkit.org/show_bug.cgi?id=191968
        <rdar://problem/46247234>

        Reviewed by Zalan Bujtas.

        Fixes an issue where the placeholder text in a password field is not repainted when the
        caps lock indicator is hidden.

        The placeholder renderer is special. It is an excluded child renderer and does not take
        part in normal flow layout. It is also created and destroyed as needed. The caps lock
        indicator is also special in that it is implemented as a RenderImage and we do not know
        its dimensions before it is loaded and the load happens asynchronously. As a result we
        detect when the inner text size changes and mark the placeholder as dirty as a way to
        keep the dimensions of the placeholder in sync with the dimensions of the inner text.

        Test: fast/repaint/placeholder-after-caps-lock-hidden.html

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout): Mark the placeholder as needing layout
        the size of the inner text changes.

2018-11-26  Jeremy Jones  <jeremyj@apple.com>

        Picture-in-picture window size changes unnecesarily when URL changes.
        https://bugs.webkit.org/show_bug.cgi?id=191787

        Reviewed by Jer Noble.

        When loading a new URL, the video dimensions are temporarily 0,0. Instead of 
        defaulting back to 4:3 sized pip window temporarily, keep the old dimensions until
        there is a new valid size.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::videoDimensionsChanged):

2018-11-26  Andy Estes  <aestes@apple.com>

        [Cocoa] Make it easier to encode NSObjects
        https://bugs.webkit.org/show_bug.cgi?id=191948

        Reviewed by Dean Jackson.

        * Modules/applepay/Payment.h: Changed the PKPayment * constructor to take a
        RetainPtr<PKPayment>&& instead.
        * Modules/applepay/PaymentContact.h: Ditto for PKContact.
        * Modules/applepay/PaymentMerchantSession.h: Ditto for PKPaymentMerchantSession.
        * Modules/applepay/PaymentMethod.h: Ditto for PKPaymentMethod.
        * Modules/applepay/cocoa/PaymentCocoa.mm:
        (WebCore::Payment::Payment): Moved definition out-of-line.
        (WebCore::Payment::pkPayment const): Ditto.
        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
        (WebCore::PaymentContact::PaymentContact): Ditto.
        (WebCore::PaymentContact::pkContact const): Ditto.
        * Modules/applepay/cocoa/PaymentMethodCocoa.mm:
        (WebCore::PaymentMethod::PaymentMethod): Ditto.
        (WebCore::PaymentMethod::pkPaymentMethod const): Ditto.

2018-11-26  Daniel Bates  <dabates@apple.com>

        REGRESSION (r238078): Do not draw caps lock indicator when Strong Password button is shown
        https://bugs.webkit.org/show_bug.cgi?id=191969
        <rdar://problem/46247569>

        Reviewed by Dean Jackson.

        Following r238078 we now support drawing the caps lock indicator in password fields on iOS.
        However it is not meaningful to show the caps lock indicator when the Strong Password button
        is visible because the password field is not editable. We should not paint the caps lock
        indicator when the Strong Password button is visible.

        Tests: fast/forms/auto-fill-button/caps-lock-indicator-should-be-visible-when-after-hiding-auto-fill-strong-password-button.html
               fast/forms/auto-fill-button/caps-lock-indicator-should-not-be-visible-when-auto-fill-strong-password-button-is-visible.html

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::shouldDrawCapsLockIndicator const): Do not draw the caps
        lock indicator when the password field has the Strong Password button.
        (WebCore::TextFieldInputType::updateAutoFillButton): Call capsLockStateMayHaveChanged() to
        update the visibility of the caps lock indicator when the auto fill button has changed.

2018-11-26  Sam Weinig  <sam@webkit.org>

        Streamline ListHashSet use in floating object code
        https://bugs.webkit.org/show_bug.cgi?id=191957

        Reviewed by Alex Christensen.

        Simplify use of ListHashSet by using new raw pointer overloads and
        making use of reversed order of template arguments in the find() and
        contains() overloads that take hash translators.  

        * rendering/FloatingObjects.cpp:
        (WebCore::FloatingObjects::remove):
        Use raw pointer overloads of contains and remove. Remove seperate call
        to find / check agains end() which is unnecessary as remove() already
        does that.
        
        * rendering/FloatingObjects.h:
        (WebCore::FloatingObjectHashFunctions::hash):
        (WebCore::FloatingObjectHashFunctions::equal):
        (WebCore::FloatingObjectHashTranslator::hash):
        (WebCore::FloatingObjectHashTranslator::equal):
        Add hash()/equal() overloads for the raw pointer cases. As the FIXME
        notes, this could be simplified by changing PtrHashBase to use designated
        bottleneck functions for hash() and equal().

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::containsFloat const):
        (WebCore::RenderBlockFlow::insertFloatingObject):
        (WebCore::RenderBlockFlow::removeFloatingObject):
        (WebCore::RenderBlockFlow::hasOverhangingFloat):
        (WebCore::RenderBlockFlow::addIntrudingFloats):
        Use simplified calls.
        
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::linkToEndLineIfNeeded):
        Use simplified calls.

2018-11-26  Jeremy Jones  <jeremyj@apple.com>

        Use Full Screen consistently in localizable strings.
        https://bugs.webkit.org/show_bug.cgi?id=190363
        rdar://problem/43882333

        Reviewed by Jon Lee.

        No new tests because only change is to localizable strings.

        Rename "Fullscreen" to "Full Screen" in localizable strings for consistency.

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::contextMenuItemTagEnterVideoFullscreen):
        (WebCore::contextMenuItemTagExitVideoFullscreen):
        (WebCore::localizedMediaControlElementHelpText):

2018-11-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] Reduce the use of WKSI library calls: CoreAnimation
        https://bugs.webkit.org/show_bug.cgi?id=191777
        <rdar://problem/46140542>

        Reviewed by Zalan Bujtas.

        Update the Windows build of WebKit to refer to the SPI headers, rather than WebKitSystemInterface.
        Move a small amount of glue code from WKSI to WebCore, and remove any includes or link
        directives for WebKitSystemInterface.lib.
        
        No new tests. No change in behavior.

        * platform/graphics/BitmapImage.cpp:
        * platform/graphics/ca/win/CACFLayerTreeHost.h:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (layerTreeHostForLayer):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/cg/PathCG.cpp:
        * platform/graphics/cg/PatternCG.cpp:
        * platform/graphics/win/WKCAImageQueue.cpp:

2018-11-25  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Use float box's margin box to adjust the line constraints.
        https://bugs.webkit.org/show_bug.cgi?id=191961

        Reviewed by Antti Koivisto.

        Test: fast/inline/inline-content-with-float-and-margin.html

        (WebCore::Layout::outputMismatchingComplexLineInformationIfNeeded):
        (WebCore::Layout::LayoutState::verifyAndOutputMismatchingLayoutTree const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutInlineContent const):

2018-11-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Accessing default web context before gtk_init results in drawing failure (Gtk-WARNING **: drawing failure for widget 'WebKitWebView': invalid value for an input Visual*)
        https://bugs.webkit.org/show_bug.cgi?id=150303

        Reviewed by Michael Catanzaro.

        Ensure gtk has been initialized before trying to get the default display.

        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::createPlatformDisplay):

2018-11-26  Javier Fernandez  <jfernandez@igalia.com>

        [css-grid] absolute positioned child is sized wrongly when using auto-fit, generating spurious collapsed tracks
        https://bugs.webkit.org/show_bug.cgi?id=191938

        Reviewed by Manuel Rego Casasnovas.

        The guttersSize function has a complex logic to compute the gaps in a
        specific GridSpan, considering different scenarios of collapsed tracks
        for such span.

        The first case is avoiding the duplicated gap because of trailing
        collapsed tracks.

        The second case considered is looking for non-empty tracks before the
        GridSpan end, if it points to an empty track, so we must add this gap.

        The last case is to consider the gap of non-empty tracks after the
        GridSpan end line, if it points to an empty track.

        There are several cases that are not considered or incorrectly computed.
        This patch addresses those cases; basically, we should only consider gaps
        when there are non-empty tracks before and after the collapsed tracks.
        Additionally, we should avoid duplicating the gaps size adding both,
        before and after non-empty track's gap.

        No new tests, this change is covered by current tests and make several cases to pass now.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::guttersSize const):

2018-11-26  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Fix grid container sizing under min-content height
        https://bugs.webkit.org/show_bug.cgi?id=191889

        Reviewed by Javier Fernandez.

        The spec is quite clear
        (https://drafts.csswg.org/css-sizing/#valdef-width-min-content):
          "min-content
             If specified for the inline axis, use the min-content inline size;
             otherwise behaves as the property’s initial value."

        So if a grid container has "height: min-content" it should behave
        the same than with "height: auto".

        The patch removes computeIntrinsicLogicalContentHeightUsing() in
        RenderGrid as we don't need a custom one anymore.
        We can also get rid of m_minContentHeight and m_maxContentHeight
        attributes that were only used for this logic.

        Test: fast/css-grid-layout/grid-track-sizing-with-orthogonal-flows.html
              fast/css-grid-layout/maximize-tracks-definite-indefinite-height.html
              imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-container-sizing-constraints-001.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths const):
        (WebCore::RenderGrid::computeTrackSizesForIndefiniteSize const):
        * rendering/RenderGrid.h:

2018-11-25  Zalan Bujtas  <zalan@apple.com>

        [LFC] Remove PointInContainingBlock and PositionInContainingBlock
        https://bugs.webkit.org/show_bug.cgi?id=191954

        Reviewed by Antti Koivisto.

        Use Point and Position instead. Points and positions are by default in the containing block's coordinate system.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::contentHeightForFormattingContextRoot):
        * layout/LayoutUnits.h:
        (WebCore::Layout::Position::operator LayoutUnit const):
        (WebCore::Layout::operator<):
        (WebCore::Layout::operator==):
        * layout/floats/FloatAvoider.cpp:
        (WebCore::Layout::FloatAvoider::FloatAvoider):
        (WebCore::Layout::FloatAvoider::setHorizontalConstraints):
        (WebCore::Layout::FloatAvoider::horizontalPositionCandidate):
        (WebCore::Layout::FloatAvoider::initialHorizontalPosition const):
        * layout/floats/FloatBox.cpp:
        (WebCore::Layout::FloatBox::horizontalPositionCandidate):
        (WebCore::Layout::FloatBox::verticalPositionCandidate):
        (WebCore::Layout::FloatBox::initialVerticalPosition const):
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::positionForFloatAvoiding const):
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        (WebCore::Layout::FloatingContext::floatingPosition const):
        (WebCore::Layout::FloatingPair::horizontalConstraints const):
        (WebCore::Layout::FloatingPair::bottom const):
        * layout/floats/FloatingContext.h:
        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::constraints const):
        (WebCore::Layout::FloatingState::bottom const):
        * layout/floats/FloatingState.h:
        (WebCore::Layout::FloatingState::FloatItem::bottom const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::initializeNewLine const):

2018-11-25  Zalan Bujtas  <zalan@apple.com>

        [LFC] Rename Layout::Position to Layout::Point
        https://bugs.webkit.org/show_bug.cgi?id=191950

        Reviewed by Antti Koivisto.

        It actually represents a point.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::mapTopLeftToAncestor):
        (WebCore::Layout::FormattingContext::mapCoordinateToAncestor):
        * layout/FormattingContext.h:
        * layout/LayoutUnits.h:
        (WebCore::Layout::Point::Point):
        (WebCore::Layout::Point::moveBy):
        (WebCore::Layout::Position::operator LayoutPoint const): Deleted.
        (WebCore::Layout::Position::Position): Deleted.
        (WebCore::Layout::Position::moveBy): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition):
        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::constraints const):

2018-11-25  Zalan Bujtas  <zalan@apple.com>

        [LFC] Floating code should use typed positions (PositionInContextRoot).
        https://bugs.webkit.org/show_bug.cgi?id=191949

        Reviewed by Antti Koivisto.

        Use PositionInContextRoot instead of LayoutUnit.

        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::constraints const):
        (WebCore::Layout::FloatingState::bottom const):
        * layout/floats/FloatingState.h:
        (WebCore::Layout::FloatingState::leftBottom const):
        (WebCore::Layout::FloatingState::rightBottom const):
        (WebCore::Layout::FloatingState::bottom const):

2018-11-25  Zalan Bujtas  <zalan@apple.com>

        Fix build after r238472.

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::splitInlineRunIfNeeded const):
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::runWidth):
        * layout/inlineformatting/InlineLineBreaker.cpp:
        (WebCore::Layout::InlineLineBreaker::textWidth const):

2018-11-25  Tim Horton  <timothy_horton@apple.com>

        Make it possible to insert editable images with a gesture
        https://bugs.webkit.org/show_bug.cgi?id=191937

        Reviewed by Wenson Hsieh.

        Tests:
            editing/images/redo-insert-editable-image-maintains-strokes.html,
            editing/images/undo-insert-editable-image.html,
            editing/images/basic-editable-image-from-execCommand.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * Source/WebCore/editing/EditorCommand.cpp:
        * Source/WebCore/en.lproj/Localizable.strings:
        * editing/EditAction.h:
        * editing/Editor.cpp:
        (WebCore::Editor::insertEditableImage):
        * editing/Editor.h:
        * editing/InsertEditableImageCommand.cpp: Added.
        (WebCore::InsertEditableImageCommand::InsertEditableImageCommand):
        (WebCore::InsertEditableImageCommand::doApply):
        * editing/InsertEditableImageCommand.h: Added.
        (WebCore::InsertEditableImageCommand::create):
        * editing/VisibleSelection.cpp:
        Add an editor command that inserts an editable image.
        It will likely get a bit more complicated, but for now it just inserts
        a 100% by 300px editable image.

2018-11-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Fix a few localizable string descriptions in WebEditCommandProxy.cpp and WebEditorClient.mm
        https://bugs.webkit.org/show_bug.cgi?id=191945

        Reviewed by Anders Carlsson.

        Run `update-webkit-localizable-strings`.

        * en.lproj/Localizable.strings:

2018-11-24  Sam Weinig  <sam@webkit.org>

        Remove now unnecessary specialized ListHashSet from InlineItem.h
        https://bugs.webkit.org/show_bug.cgi?id=191946

        Reviewed by Zalan Bujtas.

        Now that ListHashSet supports raw pointer overloads for smart pointers,
        we can fix the FIXME in InlineItem.h and remove the specialized ListHashSet
        and ListHashSet::find calls.

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::splitInlineRunIfNeeded const):
        (WebCore::Layout::InlineFormattingContext::collectInlineContentForSubtree const):
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::runWidth):
        * layout/inlineformatting/InlineItem.h:
        (WebCore::Layout::InlineItemHashFunctions::hash): Deleted.
        (WebCore::Layout::InlineItemHashFunctions::equal): Deleted.
        (WebCore::Layout::InlineItemHashTranslator::hash): Deleted.
        (WebCore::Layout::InlineItemHashTranslator::equal): Deleted.
        * layout/inlineformatting/InlineLineBreaker.cpp:
        (WebCore::Layout::InlineLineBreaker::textWidth const):

2018-11-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Add WKWebView SPI to trigger and remove data detection
        https://bugs.webkit.org/show_bug.cgi?id=191918
        <rdar://problem/36185051>

        Reviewed by Tim Horton.

        Add a helper method on DataDetection to remove all data detected links in the given document. See WebKit changes
        for more detail.

        * editing/cocoa/DataDetection.h:
        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::removeDataDetectedLinksInDocument):

2018-11-24  Andy Estes  <aestes@apple.com>

        [Cocoa] SOFT_LINK_CLASS_FOR_{HEADER,SOURCE} should generate a more concise getter function
        https://bugs.webkit.org/show_bug.cgi?id=191899

        Reviewed by Dean Jackson.

        * editing/cocoa/DataDetection.mm:
        * editing/cocoa/FontAttributesCocoa.mm:
        * editing/cocoa/FontShadowCocoa.mm:
        * platform/cocoa/DataDetectorsCoreSoftLink.h:
        * platform/graphics/cocoa/ColorCocoa.mm:
        * platform/ios/PlatformScreenIOS.mm:

2018-11-23  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Enable Web Authentication as an experimental feature for macOS
        https://bugs.webkit.org/show_bug.cgi?id=191932
        rdar://problem/46225210

        Reviewed by Brent Fulgham.

        Add myself to the contact of Web Authentication.

        * features.json:

2018-11-23  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r236785): Nullptr crash in StyledMarkupAccumulator::traverseNodesForSerialization
        https://bugs.webkit.org/show_bug.cgi?id=191921

        Reviewed by Dean Jackson.

        The bug was caused by traverseNodesForSerialization not being able to traverse past the end of shadow root
        when skipping children of a node for which enterNode returns false because  it was using NodeTraversal's
        nextSkippingChildren instead of a member function which supports traversing the composed tree.

        Fixed the crash by using variant of nextSkippingChildren which knows how to traverse past the last node
        in a shadow tree. Also added more assertions to help debug issues like this in the future.

        Test: editing/pasteboard/copy-paste-across-shadow-boundaries-5.html

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::traverseNodesForSerialization):

2018-11-22  Ryosuke Niwa  <rniwa@webkit.org>

        Updating href on textPath doesn't update its rendering
        https://bugs.webkit.org/show_bug.cgi?id=191920

        Reviewed by Dean Jackson.

        Fixed the bug by invalidating the RenderSVGResource in SVGTextPathElement::svgAttributeChanged
        in addition to updating the pending resources.

        Test: svg/text/textpath-reference-update.html

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

2018-11-23  Ross Kirsling  <ross.kirsling@sony.com>

        Introduce user-defined literal for LayoutUnit
        https://bugs.webkit.org/show_bug.cgi?id=191915

        Reviewed by Dean Jackson.

        * platform/LayoutUnit.h:
        Introduce a user-defined literal for LayoutUnit, _lu, replacing the existing "fromPixel" factory function.

        * layout/FormattingContextGeometry.cpp:
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        * layout/inlineformatting/InlineLineBreaker.cpp:
        * page/FrameView.cpp:
        * page/FrameViewLayoutContext.h:
        * page/Page.cpp:
        * page/SpatialNavigation.h:
        * platform/ScrollableArea.cpp:
        * rendering/EllipsisBox.cpp:
        * rendering/FlexibleBoxAlgorithm.cpp:
        * rendering/FloatingObjects.cpp:
        * rendering/GridLayoutFunctions.cpp:
        * rendering/GridTrackSizingAlgorithm.cpp:
        * rendering/InlineFlowBox.cpp:
        * rendering/InlineTextBox.cpp:
        * rendering/LayoutState.h:
        * rendering/LogicalSelectionOffsetCaches.h:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        * rendering/RenderBox.cpp:
        * rendering/RenderBoxModelObject.cpp:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        * rendering/RenderDeprecatedFlexibleBox.h:
        * rendering/RenderElement.cpp:
        * rendering/RenderFlexibleBox.cpp:
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFragmentContainer.cpp:
        * rendering/RenderFragmentedFlow.cpp:
        * rendering/RenderGrid.cpp:
        * rendering/RenderGrid.h:
        * rendering/RenderImage.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderMultiColumnFlow.cpp:
        * rendering/RenderMultiColumnSet.cpp:
        * rendering/RenderReplaced.cpp:
        * rendering/RenderReplaced.h:
        * rendering/RenderRubyRun.h:
        * rendering/RenderTable.cpp:
        * rendering/RenderTable.h:
        * rendering/RenderTableSection.cpp:
        * rendering/RenderTheme.cpp:
        * rendering/RenderTreeAsText.cpp:
        * rendering/RenderView.cpp:
        * rendering/RootInlineBox.h:
        * rendering/SimpleLineLayout.cpp:
        * rendering/SimpleLineLayoutPagination.cpp:
        * rendering/TableLayout.h:
        * rendering/line/BreakingContext.h:
        * rendering/line/LineLayoutState.h:
        * rendering/line/LineWidth.h:
        * rendering/mathml/MathOperator.cpp:
        * rendering/mathml/MathOperator.h:
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLFraction.cpp:
        * rendering/mathml/RenderMathMLFraction.h:
        * rendering/mathml/RenderMathMLMath.cpp:
        * rendering/mathml/RenderMathMLMath.h:
        * rendering/mathml/RenderMathMLMenclose.h:
        * rendering/mathml/RenderMathMLOperator.cpp:
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLPadded.h:
        * rendering/mathml/RenderMathMLRoot.cpp:
        * rendering/mathml/RenderMathMLRoot.h:
        * rendering/mathml/RenderMathMLRow.h:
        * rendering/mathml/RenderMathMLScripts.cpp:
        * rendering/mathml/RenderMathMLScripts.h:
        * rendering/mathml/RenderMathMLSpace.h:
        * rendering/mathml/RenderMathMLToken.cpp:
        * rendering/mathml/RenderMathMLToken.h:
        * rendering/mathml/RenderMathMLUnderOver.h:
        * rendering/shapes/ShapeOutsideInfo.cpp:
        * rendering/style/CollapsedBorderValue.h:
        Update all instances of LayoutUnit(), LayoutUnit(0), LayoutUnit { 0 }, etc. and add any other
        literal conversions that will be needed when making non-int LayoutUnit constructors explicit.
        For good measure, also mark all default values for LayoutUnit parameters.

2018-11-23  Jim Mason  <jmason@ibinx.com>

        [GTK] Scrollbars not following gtk-primary-button-warps-slider setting
        https://bugs.webkit.org/show_bug.cgi?id=191067

        Updated code per the style guide, removed unreachable break (non-semantic change)

        Reviewed by Michael Catanzaro.

        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::ScrollbarThemeGtk::handleMousePressEvent):

2018-11-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Enable drag and drop support for iOSMac
        https://bugs.webkit.org/show_bug.cgi?id=191818
        <rdar://problem/43907454>

        Reviewed by Dean Jackson.

        Enables drag and drop by default on iOSMac by switching on ENABLE_DATA_INTERACTION and ENABLE_DRAG_SUPPORT. This
        enables support for dragging links, text selections, and images, though many advanced features (e.g. custom
        pasteboard data) will require additional support from the platform.

        * Configurations/FeatureDefines.xcconfig:
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::informationForItemAtIndex):
        (WebCore::registerItemToPasteboard):
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderLoadResult canBeRepresentedAsFileUpload]):
        (-[WebItemProviderPasteboard numberOfFiles]):

        Disable codepaths which attempt to access or set `teamData` or `preferredPresentationStyle` on `NSItemProvider`
        in iOSMac, since these are currently unimplemented.

2018-11-23  Zalan Butjas  <zalan@apple.com>

        [LFC][IFC] Add support for variable height runs.
        https://bugs.webkit.org/show_bug.cgi?id=191925

        Reviewed by Antti Koivisto.

        https://www.w3.org/TR/CSS22/visudet.html#inline-box-height

        10.8 Line height calculations: the 'line-height' and 'vertical-align' properties

        The height of each inline-level box in the line box is calculated. For replaced elements, inline-block elements,
        and inline-table elements, this is the height of their margin box; for inline boxes, this is their 'line-height'.

        The line box height is the distance between the uppermost box top and the lowermost box bottom.

        The minimum height consists of a minimum height above the baseline and a minimum depth below it,
        exactly as if each line box starts with a zero-width inline box with the element's font and line height properties.
        We call that imaginary box a "strut." (The name is inspired by TeX.).

        Test: fast/inline/inline-content-with-image-simple.html

        * layout/Verification.cpp:
        (WebCore::Layout::checkForMatchingNonTextRuns):
        (WebCore::Layout::checkForMatchingTextRuns):
        (WebCore::Layout::outputMismatchingComplexLineInformationIfNeeded):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::initializeNewLine const):
        (WebCore::Layout::InlineFormattingContext::splitInlineRunIfNeeded const):
        (WebCore::Layout::InlineFormattingContext::createFinalRuns const):
        (WebCore::Layout::InlineFormattingContext::appendContentToLine const):
        (WebCore::Layout::InlineFormattingContext::layoutInlineContent const):
        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::Line::logicalHeight const):
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::justifyRuns):
        * layout/inlineformatting/InlineRun.h:
        (WebCore::Layout::InlineRun::logicalWidth const):
        (WebCore::Layout::InlineRun::logicalHeight const):
        (WebCore::Layout::InlineRun::setLogicalWidth):
        (WebCore::Layout::InlineRun::width const): Deleted.
        (WebCore::Layout::InlineRun::height const): Deleted.
        (WebCore::Layout::InlineRun::setWidth): Deleted.
        * layout/inlineformatting/Line.cpp:
        (WebCore::Layout::InlineFormattingContext::Line::init):
        (WebCore::Layout::InlineFormattingContext::Line::appendContent):
        (WebCore::Layout::InlineFormattingContext::Line::close):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::outputInlineRuns):

2018-11-23  Antti Koivisto  <antti@apple.com>

        UI side compositing doesn't paint on Mac
        https://bugs.webkit.org/show_bug.cgi?id=191908

        Reviewed by Tim Horton.

        For clarity put RGB10 and RGB10A8 formats behind PLATFORM(IOS_FAMILY). They are not supported on Mac.

        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::IOSurface):
        (WebCore::IOSurface::ensurePlatformContext):
        (WebCore::IOSurface::format const):
        (WebCore::operator<<):

2018-11-23  Javier Fernandez  <jfernandez@igalia.com>

        [css-grid] Implement Baseline Alignment for grid items
        https://bugs.webkit.org/show_bug.cgi?id=145566

        Reviewed by Manuel Rego Casasnovas.

        This patch impements the Baseline Self-Alignment feature for grid items according to
        the CSS Box Alignment specification [1].

        This new layout logic is handled by the Self-Alignment (justify-self and align-self)
        and Default-Alignment (justify-items and align-items) CSS properties.

        This feature allows users to align the grid items sharing a Baseline Alignment Context,
        either row or column contexts, based on their respective baselines.

        [1] https://drafts.csswg.org/css-align-3/#baseline-align-self

        Tests: fast/css-grid-layout/grid-self-baseline-and-flex-tracks-with-indefinite-container-crash.html
               fast/css-grid-layout/grid-self-baseline-and-flexible-tracks-should-not-crash.html
               fast/css-grid-layout/grid-self-baseline-and-item-relayout-should-not-crash.html
               fast/css-grid-layout/grid-self-baseline-and-relative-sized-items-crash.html
               fast/css-grid-layout/grid-self-baseline-and-relative-sized-tracks-crash.html
               fast/css-grid-layout/grid-self-baseline-followed-by-item-style-change-should-not-crash.html

        * Sources.txt:
        * rendering/GridBaselineAlignment.cpp: Added.
        (WebCore::GridBaselineAlignment::marginOverForChild const):
        (WebCore::GridBaselineAlignment::marginUnderForChild const):
        (WebCore::GridBaselineAlignment::logicalAscentForChild const):
        (WebCore::GridBaselineAlignment::ascentForChild const):
        (WebCore::GridBaselineAlignment::descentForChild const):
        (WebCore::GridBaselineAlignment::isDescentBaselineForChild const):
        (WebCore::GridBaselineAlignment::isHorizontalBaselineAxis const):
        (WebCore::GridBaselineAlignment::isOrthogonalChildForBaseline const):
        (WebCore::GridBaselineAlignment::isParallelToBaselineAxisForChild const):
        (WebCore::GridBaselineAlignment::baselineGroupForChild const):
        (WebCore::GridBaselineAlignment::updateBaselineAlignmentContext):
        (WebCore::GridBaselineAlignment::baselineOffsetForChild const):
        (WebCore::GridBaselineAlignment::clear):
        (WebCore::BaselineGroup::BaselineGroup):
        (WebCore::BaselineGroup::update):
        (WebCore::BaselineGroup::isOppositeBlockFlow const):
        (WebCore::BaselineGroup::isOrthogonalBlockFlow const):
        (WebCore::BaselineGroup::isCompatible const):
        (WebCore::BaselineContext::BaselineContext):
        (WebCore::BaselineContext::sharedGroup const):
        (WebCore::BaselineContext::updateSharedGroup):
        (WebCore::BaselineContext::findCompatibleSharedGroup):
        * rendering/GridBaselineAlignment.h: Added.
        (WebCore::BaselineGroup::maxAscent const):
        (WebCore::BaselineGroup::maxDescent const):
        (WebCore::BaselineGroup::size const):
        (WebCore::isBaselinePosition):
        (WebCore::GridBaselineAlignment::setBlockFlow):
        * rendering/GridLayoutFunctions.h:
        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::gridAxisForDirection):
        (WebCore::gridDirectionForAxis):
        (WebCore::GridTrackSizingAlgorithm::availableSpace const):
        (WebCore::GridTrackSizingAlgorithm::isIntrinsicSizedGridArea const):
        (WebCore::GridTrackSizingAlgorithmStrategy::logicalHeightForChild const):
        (WebCore::GridTrackSizingAlgorithmStrategy::minContentForChild const):
        (WebCore::GridTrackSizingAlgorithmStrategy::maxContentForChild const):
        (WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const):
        (WebCore::GridTrackSizingAlgorithm::canParticipateInBaselineAlignment const):
        (WebCore::GridTrackSizingAlgorithm::participateInBaselineAlignment const):
        (WebCore::GridTrackSizingAlgorithm::updateBaselineAlignmentContext):
        (WebCore::GridTrackSizingAlgorithm::baselineOffsetForChild const):
        (WebCore::GridTrackSizingAlgorithm::clearBaselineItemsCache):
        (WebCore::GridTrackSizingAlgorithm::cacheBaselineAlignedItem):
        (WebCore::GridTrackSizingAlgorithm::copyBaselineItemsCache):
        (WebCore::GridTrackSizingAlgorithm::setup):
        (WebCore::GridTrackSizingAlgorithm::computeBaselineAlignmentContext):
        * rendering/GridTrackSizingAlgorithm.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::firstLineBaseline const):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths const):
        (WebCore::RenderGrid::placeItemsOnGrid const):
        (WebCore::RenderGrid::performGridItemsPreLayout const):
        (WebCore::synthesizedBaselineFromMarginBox):
        (WebCore::RenderGrid::isBaselineAlignmentForChild const):
        (WebCore::RenderGrid::baselinePosition const):
        (WebCore::RenderGrid::firstLineBaseline const):
        (WebCore::RenderGrid::inlineBlockBaseline const):
        (WebCore::RenderGrid::columnAxisBaselineOffsetForChild const):
        (WebCore::RenderGrid::rowAxisBaselineOffsetForChild const):
        (WebCore::RenderGrid::columnAxisOffsetForChild const):
        (WebCore::RenderGrid::rowAxisOffsetForChild const):
        * rendering/RenderGrid.h:

2018-11-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Address post-review feedback after r238438
        https://bugs.webkit.org/show_bug.cgi?id=191913

        Reviewed by Ryosuke Niwa.

        Replace `bool` arguments to `FrameSelection::setSelectedRange`, `Editor::replaceSelectionWithText`, and
        `Editor::replaceSelectionWithFragment` with `enum class`es instead. In particular, introduce the following:

        FrameSelection::ShouldCloseTyping { No, Yes }
        Editor::SelectReplacement { No, Yes }
        Editor::SmartReplace { No, Yes }
        Editor::MatchStyle { No, Yes }

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::selectText):
        * editing/Editor.cpp:
        (WebCore::Editor::handleTextEvent):
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::replaceSelectionWithText):
        (WebCore::Editor::setComposition):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::changeBackToReplacedString):
        (WebCore::Editor::transpose):
        (WebCore::Editor::insertAttachment):

        At various call sites, replace boolean arguments with named enums.

        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::expandSelectionToGranularity):
        (WebCore::executeDeleteToMark):
        (WebCore::executeSelectToMark):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelectedRange):
        * editing/FrameSelection.h:
        * page/Page.cpp:
        (WebCore::replaceRanges):

        Avoid a bit of ref-count churn, and adjust a few functions to take `const Vector&`s instead of `Vector&&`s.

        (WebCore::Page::replaceRangesWithText):
        (WebCore::Page::replaceSelectionWithText):
        * page/Page.h:

2018-11-21  Ryosuke Niwa  <rniwa@webkit.org>

        Modernize SVGURIReference::targetElementFromIRIString
        https://bugs.webkit.org/show_bug.cgi?id=191898

        Reviewed by Daniel Bates.

        Made targetElementFromIRIString return an element and the fragment identifier,
        and merged urlFromIRIStringWithFragmentIdentifier into it.

        Also replaced the code computing the full URL using the base URL after removing
        the fragment identifier and rejoining it later with a single call to completeURL.

        No new tests since there should be no observable behavior change.

        * accessibility/AccessibilitySVGElement.cpp:
        (WebCore::AccessibilitySVGElement::targetForUseElement const):
        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::updateCursorElement):
        * rendering/svg/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::layoutPath const):
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::hasValidGlyphElements const):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::buildPendingResource):
        * svg/SVGGlyphRefElement.cpp:
        (WebCore::SVGGlyphRefElement::hasValidGlyphElement const):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::collectGradientAttributes):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::buildPendingResource):
        (WebCore::SVGMPathElement::pathElement):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::collectGradientAttributes):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::detachTarget):
        (WebCore::SVGTRefElement::buildPendingResource):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::buildPendingResource):
        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::targetElementFromIRIString):
        (WebCore::urlFromIRIStringWithFragmentIdentifier): Deleted.
        * svg/SVGURIReference.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::findTarget const):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::buildPendingResource):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::referencedRenderer const):

2018-11-22  Dean Jackson  <dino@apple.com>

        Implement WebGPUQueue and device.getQueue()
        https://bugs.webkit.org/show_bug.cgi?id=191911
        <rdar://problem/46214871>

        Reviewed by Antoine Quint.

        Implement WebGPUDevice::getQueue(), which creates a WebGPUQueue
        instance if necessary. Also link WebGPUQueue to the existing
        GPUQueue object, and expose the label IDL property.

        This patch is based on some work from Justin Fan.

        Test: webgpu/queue-creation.html

        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
            New files.

        * Modules/webgpu/WebGPUCommandBuffer.h:
        (WebCore::WebGPUCommandBuffer::commandBuffer const):
            Expose a GPUCommandBuffer getter, used when submitting (even though
            the actual GPU submission isn't implemented yet).

        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::getQueue):
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDevice.idl:
            Implement getQueue().

        * Modules/webgpu/WebGPUQueue.cpp:
        (WebCore::WebGPUQueue::create):
        (WebCore::WebGPUQueue::WebGPUQueue):
        (WebCore::WebGPUQueue::submit):
        * Modules/webgpu/WebGPUQueue.h:
        (WebCore::WebGPUQueue::label const):
        (WebCore::WebGPUQueue::setLabel):
        * Modules/webgpu/WebGPUQueue.idl:
            New class. Mostly sends stuff onto GPUQueue.

        * bindings/js/WebCoreBuiltinNames.h:
            Add WebGPUQueue.

        * platform/graphics/gpu/GPUQueue.h:
        * platform/graphics/gpu/cocoa/GPUQueueMetal.mm:
        (WebCore::GPUQueue::create):
        (WebCore::GPUQueue::submit):
        (WebCore::GPUQueue::label const):
        (WebCore::GPUQueue::setLabel const):
            "label" getter/setter that uses
            the underlying MTLCommandQueue label property, but prefixes
            it with a WebKit identifier, so it can be correctly
            identified in system crash logs as coming from WebGPU.

2018-11-22  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Merge addNonBreakableStart/NonBreakableEnd calls.
        https://bugs.webkit.org/show_bug.cgi?id=191903

        Reviewed by Antti Koivisto.

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::collectInlineContentForSubtree const):

2018-11-22  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Offset formatting context root runs with horizontal margins.
        https://bugs.webkit.org/show_bug.cgi?id=191900

        Reviewed by Antti Koivisto.

        Inline runs generated by formatting roots (inline-block) need to be adjusted with the horizontal margins.
        (The test case has padding and border as well, but they are _inside_ the formatting context.)

        Test: fast/inline/inline-content-and-nested-formatting-root-with-margin-left-right.html

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::collectInlineContentForSubtree const):

2018-11-22  Simon Fraser  <simon.fraser@apple.com>

        Extremely small monospace text size when SVG is included as an img
        https://bugs.webkit.org/show_bug.cgi?id=191834

        Reviewed by Myles C. Maxfield.

        Give defaultFixedFontSize a reasonable default value in Settings, so that clients
        who omit to set it (like SVGImages) don't get broken rendering.

        Test: svg/text/monospace-text-size-in-img.html

        * page/Settings.yaml:

2018-11-22  Javier Fernandez  <jfernandez@igalia.com>

        Tables with vertical-lr writing-mode doesn't apply correctly vertical-align: baseline
        https://bugs.webkit.org/show_bug.cgi?id=191881

        Reviewed by Manuel Rego Casasnovas.

        We should use the font's descent value when wriring-mode flips line flow (vertical-lr).

        This change also fixes bug 170175, since Flexbox use the same code to determine the first
        line baseline of a flex item.

        Test: fast/writing-mode/vertical-align-table-baseline-latin.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::firstLineBaseline const):

2018-11-21  Ryosuke Niwa  <rniwa@webkit.org>

        Phantom focus/blur events fire on clicking between text input fields when listening with addEventListener
        https://bugs.webkit.org/show_bug.cgi?id=179990

        Reviewed by Tim Horton.

        The bug was caused by TemporarySelectionChange which is used by TextIndicator::createWithRange
        to set and restore the selection putting the focus on the newly mouse-down'ed input element
        and restoring the focus back to the input element which originally had the focus immediately.

        Fixed the bug by avoiding to set the focus since only selection highlights need to be updated here.
        Also made TemporarySelectionOption an enum class.

        Unfortunately, no new tests since force click testing is broken :( See <rdar://problem/31301721>.

        * editing/Editor.cpp:
        (WebCore::TemporarySelectionChange::TemporarySelectionChange):
        (WebCore::TemporarySelectionChange::~TemporarySelectionChange):
        (WebCore::TemporarySelectionChange::setSelection): Extracted. Fixed the bug by adding
        FrameSelection::DoNotSetFocus to the option when TemporarySelectionOption::DoNotSetFocus is set.
        * editing/Editor.h:
        * page/DragController.cpp:
        (WebCore::DragController::performDragOperation):
        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange): Set TemporarySelectionOption::DoNotSetFocus.

2018-11-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] [WebKit2] Add support for replacing find-in-page text matches
        https://bugs.webkit.org/show_bug.cgi?id=191786
        <rdar://problem/45813871>

        Reviewed by Ryosuke Niwa.

        Add support for replacing Find-in-Page matches. See below for details. Covered by new layout tests as well as a
        new API test.

        Tests: editing/find/find-and-replace-adjacent-words.html
               editing/find/find-and-replace-at-editing-boundary.html
               editing/find/find-and-replace-basic.html
               editing/find/find-and-replace-in-subframes.html
               editing/find/find-and-replace-no-matches.html
               editing/find/find-and-replace-noneditable-matches.html
               editing/find/find-and-replace-replacement-text-input-events.html

        API test: WebKit.FindAndReplace

        * page/Page.cpp:
        (WebCore::replaceRanges):
        (WebCore::Page::replaceRangesWithText):

        Add a helper that, given a list of Ranges, replaces each range with the given text. To do this, we first map
        each Range to editing offsets within the topmost editable root for each Range. This results in a map of editable
        root to list of editing offsets we need to replace. To apply the replacements, for each editable root in the
        map, we iterate over each replacement range (i.e. an offset and length), set the current selection to contain
        that replacement range, and use `Editor::replaceSelectionWithText`. To prevent prior text replacements from
        clobbering the offsets of latter text replacement ranges, we also iterate backwards through text replacement
        ranges when performing each replacement.

        Likewise, we also apply text replacement to each editing container in backwards order: for nodes in the same
        frame, we compare their position in the document, and for nodes in different frames, we instead compare their
        frames in frame tree traversal order.

        We map Ranges to editing offsets and back when performing text replacement because each text replacement may
        split or merge text nodes, which causes adjacent Ranges to shrink or extend while replacing text. In an earlier
        attempt to implement this, I simply iterated over each Range to replace and carried out text replacement for
        each Range. This led to incorrect behavior in some cases, such as replacing adjacent matches. Thus, by computing
        the set of text replacement offsets prior to replacing any text, we're able to target the correct ranges for
        replacement.

        (WebCore::Page::replaceSelectionWithText):

        Add a helper method on Page to replace the current selection with some text. This simply calls out to
        `Editor::replaceSelectionWithText`.

        * page/Page.h:

2018-11-21  Andy Estes  <aestes@apple.com>

        [Cocoa] Create a soft-linking file for PassKit
        https://bugs.webkit.org/show_bug.cgi?id=191875
        <rdar://problem/46203215>

        Reviewed by Myles Maxfield.

        * Modules/applepay/cocoa/PaymentContactCocoa.mm: Removed SOFT_LINK macros and included PassKitSoftLink.h instead.
        * Modules/applepay/cocoa/PaymentMerchantSessionCocoa.mm: Ditto.
        * SourcesCocoa.txt: Removed @no-unify from PaymentMerchantSessionCocoa.mm.
        * WebCore.xcodeproj/project.pbxproj: Removed PaymentMerchantSessionCocoa.mm from the WebCore target.
        * rendering/RenderThemeCocoa.mm: Removed SOFT_LINK macros and included PassKitSoftLink.h instead.

2018-11-21  Zalan Bujtas  <zalan@apple.com>

        [LFC] LayoutState should always be initialized with the initial containing block.
        https://bugs.webkit.org/show_bug.cgi?id=191896

        Reviewed by Antti Koivisto.

        There should always be only one LayoutState per layout tree (it does not mean that layout always starts at the ICB).
        The ICB is a special formatting context root because it does not have a parent formatting context. All the other formatting contexts
        first need to be laid out (partially at least e.g margin) in their parent formatting context.
        Having a non-null parent formatting context as root could lead to undefined behaviour.

        * layout/LayoutFormattingState.cpp:
        (WebCore::Layout::LayoutState::LayoutState):
        (WebCore::Layout::LayoutState::initializeRoot): Deleted.
        * layout/LayoutFormattingState.h:
        * layout/Verification.cpp:
        (WebCore::Layout::LayoutState::verifyAndOutputMismatchingLayoutTree const):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

2018-11-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Horizontal margins should be considered as non-breakable space
        https://bugs.webkit.org/show_bug.cgi?id=191894

        Reviewed by Antti Koivisto.

        Like padding and border, horizontal margins also force run breaks and offset them.

        Test: fast/inline/inline-content-with-margin-left-right.html

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::collectInlineContentForSubtree const):

2018-11-20  Ryosuke Niwa  <rniwa@webkit.org>

        Mutation observers doesn't get notified of character data mutation made by the parser
        https://bugs.webkit.org/show_bug.cgi?id=191874

        Reviewed by Antti Koivisto.

        Fixed the bug that CharacterData::parserAppendData was never notifying MutationObserver.

        Test: fast/dom/MutationObserver/observe-parser-character-data-change.html

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::parserAppendData):

2018-11-21  Claudio Saavedra  <csaavedra@igalia.com>

        [SOUP] Follow-up robustness improvements to the certificate decoder
        https://bugs.webkit.org/show_bug.cgi?id=191892

        Reviewed by Michael Catanzaro.

        If at any point the certificate fails to be constructed from
        the DER data, bail out. Likewise, if the certificate returned
        is NULL, return false from the decoder to notify the failure
        to decode it.

        * platform/network/soup/CertificateInfo.h:
        (WTF::Persistence::certificateFromCertificatesDataList):
        (WTF::Persistence::Coder<WebCore::CertificateInfo>::decode):

2018-11-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Border should be considered as non-breakable space
        https://bugs.webkit.org/show_bug.cgi?id=191891

        Reviewed by Antti Koivisto.

        Like padding, border also forces run breaks and offsets them.

        Test: fast/inline/inline-content-with-border-left-right.html

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::collectInlineContentForSubtree const):

2018-11-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Use contains and containsAll in InlineFormattingContext::splitInlineRunIfNeeded consistently
        https://bugs.webkit.org/show_bug.cgi?id=191890

        Rearrange the comment numbers to match the logic below.

        Reviewed by Antti Koivisto.

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::splitInlineRunIfNeeded const):

2018-11-20  Dean Jackson  <dino@apple.com>

        Move WebGPU platform code to platform/graphics/gpu
        https://bugs.webkit.org/show_bug.cgi?id=191867
        <rdar://problem/46190993>

        Reviewed by Antoine Quint.

        The underlying implementation of WebGPU doesn't need to live in
        Modules, since it technically could be used by other parts of the system. It
        makes more sense for it to be in platform/graphics/gpu.

        Move...
        - Modules/webgpu/GPU* -> platform/graphics/gpu
        - Modules/webgpu/cocoa -> platform/graphics/gpu/cocoa
        - platform/graphics/gpu/GPULegacy* -> platform/graphics/gpu/legacy/
        - platform/graphics/gpu/cocoa/GPULegacy* -> platform/graphics/gpu/legacy/cocoa

        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/GPUCommandBuffer.h: Renamed from Source/WebCore/Modules/webgpu/GPUCommandBuffer.h.
        * platform/graphics/gpu/GPUDevice.cpp: Renamed from Source/WebCore/Modules/webgpu/GPUDevice.cpp.
        (WebCore::GPUDevice::createShaderModule const):
        (WebCore::GPUDevice::createRenderPipeline const):
        (WebCore::GPUDevice::createCommandBuffer):
        (WebCore::GPUDevice::getQueue):
        * platform/graphics/gpu/GPUDevice.h: Renamed from Source/WebCore/Modules/webgpu/GPUDevice.h.
        (WebCore::GPUDevice::platformDevice const):
        * platform/graphics/gpu/GPUPipelineDescriptorBase.h: Renamed from Source/WebCore/Modules/webgpu/GPUPipelineDescriptorBase.h.
        * platform/graphics/gpu/GPUPipelineStageDescriptor.h: Renamed from Source/WebCore/Modules/webgpu/GPUPipelineStageDescriptor.h.
        * platform/graphics/gpu/GPUQueue.h: Renamed from Source/WebCore/Modules/webgpu/GPUQueue.h.
        (WebCore::GPUQueue::platformQueue const):
        * platform/graphics/gpu/GPURenderPipeline.h: Renamed from Source/WebCore/Modules/webgpu/GPURenderPipeline.h.
        (WebCore::GPURenderPipeline::platformRenderPipeline const):
        * platform/graphics/gpu/GPURenderPipelineDescriptor.h: Renamed from Source/WebCore/Modules/webgpu/GPURenderPipelineDescriptor.h.
        * platform/graphics/gpu/GPUShaderModule.h: Renamed from Source/WebCore/Modules/webgpu/GPUShaderModule.h.
        (WebCore::GPUShaderModule::platformShaderModule const):
        * platform/graphics/gpu/GPUShaderModuleDescriptor.h: Renamed from Source/WebCore/Modules/webgpu/GPUShaderModuleDescriptor.h.
        * platform/graphics/gpu/GPUSwapChain.h: Renamed from Source/WebCore/Modules/webgpu/GPUSwapChain.h.
        (WebCore::GPUSwapChain::platformLayer const):
        * platform/graphics/gpu/GPUTexture.h: Renamed from Source/WebCore/Modules/webgpu/GPUTexture.h.
        * platform/graphics/gpu/GPUTextureFormatEnum.h: Renamed from Source/WebCore/Modules/webgpu/GPUTextureFormatEnum.h.
        * platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm: Renamed from Source/WebCore/Modules/webgpu/cocoa/GPUCommandBufferMetal.mm.
        (WebCore::GPUCommandBuffer::create):
        (WebCore::GPUCommandBuffer::GPUCommandBuffer):
        * platform/graphics/gpu/cocoa/GPUDeviceMetal.mm: Renamed from Source/WebCore/Modules/webgpu/cocoa/GPUDeviceMetal.mm.
        (WebCore::GPUDevice::create):
        (WebCore::GPUDevice::GPUDevice):
        * platform/graphics/gpu/cocoa/GPUQueueMetal.mm: Renamed from Source/WebCore/Modules/webgpu/cocoa/GPUQueueMetal.mm.
        (WebCore::GPUQueue::create):
        (WebCore::GPUQueue::GPUQueue):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm: Renamed from Source/WebCore/Modules/webgpu/cocoa/GPURenderPipelineMetal.mm.
        (WebCore::setFunctionsForPipelineDescriptor):
        (WebCore::GPURenderPipeline::create):
        (WebCore::GPURenderPipeline::GPURenderPipeline):
        * platform/graphics/gpu/cocoa/GPUShaderModuleMetal.mm: Renamed from Source/WebCore/Modules/webgpu/cocoa/GPUShaderModuleMetal.mm.
        (WebCore::GPUShaderModule::create):
        (WebCore::GPUShaderModule::GPUShaderModule):
        * platform/graphics/gpu/cocoa/GPUSwapChainMetal.mm: Renamed from Source/WebCore/Modules/webgpu/cocoa/GPUSwapChainMetal.mm.
        (WebCore::GPUSwapChain::create):
        (WebCore::GPUSwapChain::GPUSwapChain):
        (WebCore::GPUSwapChain::setDevice):
        (WebCore::platformTextureFormatForGPUTextureFormat):
        (WebCore::GPUSwapChain::setFormat):
        (WebCore::GPUSwapChain::reshape):
        (WebCore::GPUSwapChain::getNextTexture):
        (WebCore::GPUSwapChain::present):
        * platform/graphics/gpu/cocoa/GPUTextureMetal.mm: Renamed from Source/WebCore/Modules/webgpu/cocoa/GPUTextureMetal.mm.
        (WebCore::GPUTexture::create):
        (WebCore::GPUTexture::GPUTexture):
        (WebCore::GPUTexture::createDefaultTextureView):
        * platform/graphics/gpu/legacy/GPULegacyBuffer.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyBuffer.cpp.
        (WebCore::GPULegacyBuffer::~GPULegacyBuffer):
        (WebCore::GPULegacyBuffer::length const):
        * platform/graphics/gpu/legacy/GPULegacyBuffer.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyBuffer.h.
        (WebCore::GPULegacyBuffer::contents const):
        (WebCore::GPULegacyBuffer::metal const):
        * platform/graphics/gpu/legacy/GPULegacyCommandBuffer.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyCommandBuffer.cpp.
        (WebCore::GPULegacyCommandBuffer::~GPULegacyCommandBuffer):
        * platform/graphics/gpu/legacy/GPULegacyCommandBuffer.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyCommandBuffer.h.
        (WebCore::GPULegacyCommandBuffer::metal const):
        * platform/graphics/gpu/legacy/GPULegacyCommandQueue.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyCommandQueue.cpp.
        (WebCore::GPULegacyCommandQueue::~GPULegacyCommandQueue):
        * platform/graphics/gpu/legacy/GPULegacyCommandQueue.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyCommandQueue.h.
        (WebCore::GPULegacyCommandQueue::metal const):
        * platform/graphics/gpu/legacy/GPULegacyComputeCommandEncoder.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyComputeCommandEncoder.cpp.
        (WebCore::GPULegacyComputeCommandEncoder::~GPULegacyComputeCommandEncoder):
        * platform/graphics/gpu/legacy/GPULegacyComputeCommandEncoder.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyComputeCommandEncoder.h.
        * platform/graphics/gpu/legacy/GPULegacyComputePipelineState.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyComputePipelineState.cpp.
        (WebCore::GPULegacyComputePipelineState::~GPULegacyComputePipelineState):
        * platform/graphics/gpu/legacy/GPULegacyComputePipelineState.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyComputePipelineState.h.
        (WebCore::GPULegacyComputePipelineState::metal const):
        * platform/graphics/gpu/legacy/GPULegacyDepthStencilDescriptor.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyDepthStencilDescriptor.cpp.
        (WebCore::GPULegacyDepthStencilDescriptor::~GPULegacyDepthStencilDescriptor):
        * platform/graphics/gpu/legacy/GPULegacyDepthStencilDescriptor.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyDepthStencilDescriptor.h.
        (WebCore::GPULegacyDepthStencilDescriptor::metal const):
        * platform/graphics/gpu/legacy/GPULegacyDepthStencilState.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyDepthStencilState.cpp.
        (WebCore::GPULegacyDepthStencilState::~GPULegacyDepthStencilState):
        * platform/graphics/gpu/legacy/GPULegacyDepthStencilState.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyDepthStencilState.h.
        (WebCore::GPULegacyDepthStencilState::metal const):
        * platform/graphics/gpu/legacy/GPULegacyDevice.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyDevice.cpp.
        (WebCore::GPULegacyDevice::~GPULegacyDevice):
        * platform/graphics/gpu/legacy/GPULegacyDevice.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyDevice.h.
        (WebCore::GPULegacyDevice::layer const):
        (WebCore::GPULegacyDevice::metal const):
        (WebCore::GPULegacyDevice::markLayerComposited const):
        * platform/graphics/gpu/legacy/GPULegacyDrawable.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyDrawable.cpp.
        (WebCore::GPULegacyDrawable::~GPULegacyDrawable):
        * platform/graphics/gpu/legacy/GPULegacyDrawable.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyDrawable.h.
        * platform/graphics/gpu/legacy/GPULegacyEnums.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyEnums.h.
        * platform/graphics/gpu/legacy/GPULegacyFunction.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyFunction.cpp.
        (WebCore::GPULegacyFunction::~GPULegacyFunction):
        * platform/graphics/gpu/legacy/GPULegacyFunction.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyFunction.h.
        (WebCore::GPULegacyFunction::metal const):
        * platform/graphics/gpu/legacy/GPULegacyLibrary.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyLibrary.cpp.
        (WebCore::GPULegacyLibrary::~GPULegacyLibrary):
        * platform/graphics/gpu/legacy/GPULegacyLibrary.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyLibrary.h.
        (WebCore::GPULegacyLibrary::metal const):
        * platform/graphics/gpu/legacy/GPULegacyRenderCommandEncoder.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyRenderCommandEncoder.cpp.
        (WebCore::GPULegacyRenderCommandEncoder::~GPULegacyRenderCommandEncoder):
        * platform/graphics/gpu/legacy/GPULegacyRenderCommandEncoder.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyRenderCommandEncoder.h.
        * platform/graphics/gpu/legacy/GPULegacyRenderPassAttachmentDescriptor.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyRenderPassAttachmentDescriptor.cpp.
        (WebCore::GPULegacyRenderPassAttachmentDescriptor::~GPULegacyRenderPassAttachmentDescriptor):
        * platform/graphics/gpu/legacy/GPULegacyRenderPassAttachmentDescriptor.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyRenderPassAttachmentDescriptor.h.
        * platform/graphics/gpu/legacy/GPULegacyRenderPassColorAttachmentDescriptor.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyRenderPassColorAttachmentDescriptor.cpp.
        (WebCore::GPULegacyRenderPassColorAttachmentDescriptor::~GPULegacyRenderPassColorAttachmentDescriptor):
        * platform/graphics/gpu/legacy/GPULegacyRenderPassColorAttachmentDescriptor.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyRenderPassColorAttachmentDescriptor.h.
        * platform/graphics/gpu/legacy/GPULegacyRenderPassDepthAttachmentDescriptor.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyRenderPassDepthAttachmentDescriptor.cpp.
        (WebCore::GPULegacyRenderPassDepthAttachmentDescriptor::~GPULegacyRenderPassDepthAttachmentDescriptor):
        * platform/graphics/gpu/legacy/GPULegacyRenderPassDepthAttachmentDescriptor.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyRenderPassDepthAttachmentDescriptor.h.
        * platform/graphics/gpu/legacy/GPULegacyRenderPassDescriptor.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyRenderPassDescriptor.cpp.
        (WebCore::GPULegacyRenderPassDescriptor::~GPULegacyRenderPassDescriptor):
        * platform/graphics/gpu/legacy/GPULegacyRenderPassDescriptor.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyRenderPassDescriptor.h.
        * platform/graphics/gpu/legacy/GPULegacyRenderPipelineColorAttachmentDescriptor.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyRenderPipelineColorAttachmentDescriptor.cpp.
        (WebCore::GPULegacyRenderPipelineColorAttachmentDescriptor::~GPULegacyRenderPipelineColorAttachmentDescriptor):
        * platform/graphics/gpu/legacy/GPULegacyRenderPipelineColorAttachmentDescriptor.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyRenderPipelineColorAttachmentDescriptor.h.
        * platform/graphics/gpu/legacy/GPULegacyRenderPipelineDescriptor.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyRenderPipelineDescriptor.cpp.
        (WebCore::GPULegacyRenderPipelineDescriptor::~GPULegacyRenderPipelineDescriptor):
        * platform/graphics/gpu/legacy/GPULegacyRenderPipelineDescriptor.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyRenderPipelineDescriptor.h.
        * platform/graphics/gpu/legacy/GPULegacyRenderPipelineState.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyRenderPipelineState.cpp.
        (WebCore::GPULegacyRenderPipelineState::~GPULegacyRenderPipelineState):
        * platform/graphics/gpu/legacy/GPULegacyRenderPipelineState.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyRenderPipelineState.h.
        * platform/graphics/gpu/legacy/GPULegacySize.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacySize.h.
        * platform/graphics/gpu/legacy/GPULegacyTexture.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyTexture.cpp.
        (WebCore::GPULegacyTexture::~GPULegacyTexture):
        * platform/graphics/gpu/legacy/GPULegacyTexture.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyTexture.h.
        * platform/graphics/gpu/legacy/GPULegacyTextureDescriptor.cpp: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyTextureDescriptor.cpp.
        (WebCore::GPULegacyTextureDescriptor::~GPULegacyTextureDescriptor):
        * platform/graphics/gpu/legacy/GPULegacyTextureDescriptor.h: Renamed from Source/WebCore/platform/graphics/gpu/GPULegacyTextureDescriptor.h.
        * platform/graphics/gpu/legacy/cocoa/GPULegacyBufferMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyBufferMetal.mm.
        (WebCore::GPULegacyBuffer::GPULegacyBuffer):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyCommandBufferMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyCommandBufferMetal.mm.
        (WebCore::GPULegacyCommandBuffer::GPULegacyCommandBuffer):
        (WebCore::GPULegacyCommandBuffer::presentDrawable const):
        (WebCore::GPULegacyCommandBuffer::commit const):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyCommandQueueMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyCommandQueueMetal.mm.
        (WebCore::GPULegacyCommandQueue::GPULegacyCommandQueue):
        (WebCore::GPULegacyCommandQueue::label const):
        (WebCore::GPULegacyCommandQueue::setLabel const):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyComputeCommandEncoderMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyComputeCommandEncoderMetal.mm.
        (WebCore::MTLSizeMake):
        (WebCore::GPULegacyComputeCommandEncoder::GPULegacyComputeCommandEncoder):
        (WebCore::GPULegacyComputeCommandEncoder::setComputePipelineState const):
        (WebCore::GPULegacyComputeCommandEncoder::setBuffer const):
        (WebCore::GPULegacyComputeCommandEncoder::dispatch const):
        (WebCore::GPULegacyComputeCommandEncoder::endEncoding const):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyComputePipelineStateMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyComputePipelineStateMetal.mm.
        (WebCore::GPULegacyComputePipelineState::GPULegacyComputePipelineState):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyDepthStencilDescriptorMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyDepthStencilDescriptorMetal.mm.
        (WebCore::GPULegacyDepthStencilDescriptor::GPULegacyDepthStencilDescriptor):
        (WebCore::GPULegacyDepthStencilDescriptor::depthWriteEnabled const):
        (WebCore::GPULegacyDepthStencilDescriptor::setDepthWriteEnabled const):
        (WebCore::GPULegacyDepthStencilDescriptor::depthCompareFunction const):
        (WebCore::GPULegacyDepthStencilDescriptor::setDepthCompareFunction const):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyDepthStencilStateMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyDepthStencilStateMetal.mm.
        (WebCore::GPULegacyDepthStencilState::GPULegacyDepthStencilState):
        (WebCore::GPULegacyDepthStencilState::label const):
        (WebCore::GPULegacyDepthStencilState::setLabel const):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyDeviceMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyDeviceMetal.mm.
        (WebCore::GPULegacyDevice::GPULegacyDevice):
        (WebCore::GPULegacyDevice::disconnect):
        (WebCore::GPULegacyDevice::reshape const):
        (WebCore::GPULegacyDevice::platformLayer const):
        (WebCore::GPULegacyDevice::operator! const):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyDrawableMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyDrawableMetal.mm.
        (WebCore::GPULegacyDrawable::GPULegacyDrawable):
        (WebCore::GPULegacyDrawable::release):
        (WebCore::GPULegacyDrawable::metal const):
        (WebCore::GPULegacyDrawable::texture const):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyFunctionMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyFunctionMetal.mm.
        (WebCore::GPULegacyFunction::GPULegacyFunction):
        (WebCore::GPULegacyFunction::name const):
        (WebCore::GPULegacyFunction::operator! const):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyLibraryMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyLibraryMetal.mm.
        (WebCore::GPULegacyLibrary::GPULegacyLibrary):
        (WebCore::GPULegacyLibrary::label const):
        (WebCore::GPULegacyLibrary::setLabel const):
        (WebCore::GPULegacyLibrary::functionNames const):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyRenderCommandEncoderMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyRenderCommandEncoderMetal.mm.
        (WebCore::GPULegacyRenderCommandEncoder::GPULegacyRenderCommandEncoder):
        (WebCore::GPULegacyRenderCommandEncoder::setRenderPipelineState const):
        (WebCore::GPULegacyRenderCommandEncoder::setDepthStencilState const):
        (WebCore::GPULegacyRenderCommandEncoder::setVertexBuffer const):
        (WebCore::GPULegacyRenderCommandEncoder::setFragmentBuffer const):
        (WebCore::GPULegacyRenderCommandEncoder::drawPrimitives const):
        (WebCore::GPULegacyRenderCommandEncoder::endEncoding const):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyRenderPassAttachmentDescriptorMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyRenderPassAttachmentDescriptorMetal.mm.
        (WebCore::GPULegacyRenderPassAttachmentDescriptor::GPULegacyRenderPassAttachmentDescriptor):
        (WebCore::GPULegacyRenderPassAttachmentDescriptor::loadAction const):
        (WebCore::GPULegacyRenderPassAttachmentDescriptor::setLoadAction const):
        (WebCore::GPULegacyRenderPassAttachmentDescriptor::storeAction const):
        (WebCore::GPULegacyRenderPassAttachmentDescriptor::setStoreAction const):
        (WebCore::GPULegacyRenderPassAttachmentDescriptor::setTexture const):
        (WebCore::GPULegacyRenderPassAttachmentDescriptor::metal const):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyRenderPassColorAttachmentDescriptorMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyRenderPassColorAttachmentDescriptorMetal.mm.
        (WebCore::GPULegacyRenderPassColorAttachmentDescriptor::GPULegacyRenderPassColorAttachmentDescriptor):
        (WebCore::GPULegacyRenderPassColorAttachmentDescriptor::clearColor const):
        (WebCore::GPULegacyRenderPassColorAttachmentDescriptor::setClearColor const):
        (WebCore::GPULegacyRenderPassColorAttachmentDescriptor::metal const):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyRenderPassDepthAttachmentDescriptorMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyRenderPassDepthAttachmentDescriptorMetal.mm.
        (WebCore::GPULegacyRenderPassDepthAttachmentDescriptor::GPULegacyRenderPassDepthAttachmentDescriptor):
        (WebCore::GPULegacyRenderPassDepthAttachmentDescriptor::clearDepth const):
        (WebCore::GPULegacyRenderPassDepthAttachmentDescriptor::setClearDepth const):
        (WebCore::GPULegacyRenderPassDepthAttachmentDescriptor::metal const):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyRenderPassDescriptorMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyRenderPassDescriptorMetal.mm.
        (WebCore::GPULegacyRenderPassDescriptor::GPULegacyRenderPassDescriptor):
        (WebCore::GPULegacyRenderPassDescriptor::colorAttachments const):
        (WebCore::GPULegacyRenderPassDescriptor::depthAttachment const):
        (WebCore::GPULegacyRenderPassDescriptor::metal const):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyRenderPipelineColorAttachmentDescriptorMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyRenderPipelineColorAttachmentDescriptorMetal.mm.
        (WebCore::GPULegacyRenderPipelineColorAttachmentDescriptor::GPULegacyRenderPipelineColorAttachmentDescriptor):
        (WebCore::GPULegacyRenderPipelineColorAttachmentDescriptor::pixelFormat const):
        (WebCore::GPULegacyRenderPipelineColorAttachmentDescriptor::setPixelFormat const):
        (WebCore::GPULegacyRenderPipelineColorAttachmentDescriptor::metal const):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyRenderPipelineDescriptorMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyRenderPipelineDescriptorMetal.mm.
        (WebCore::GPULegacyRenderPipelineDescriptor::GPULegacyRenderPipelineDescriptor):
        (WebCore::GPULegacyRenderPipelineDescriptor::depthAttachmentPixelFormat const):
        (WebCore::GPULegacyRenderPipelineDescriptor::setDepthAttachmentPixelFormat const):
        (WebCore::GPULegacyRenderPipelineDescriptor::setVertexFunction const):
        (WebCore::GPULegacyRenderPipelineDescriptor::setFragmentFunction const):
        (WebCore::GPULegacyRenderPipelineDescriptor::colorAttachments const):
        (WebCore::GPULegacyRenderPipelineDescriptor::reset const):
        (WebCore::GPULegacyRenderPipelineDescriptor::metal const):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyRenderPipelineStateMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyRenderPipelineStateMetal.mm.
        (WebCore::GPULegacyRenderPipelineState::GPULegacyRenderPipelineState):
        (WebCore::GPULegacyRenderPipelineState::label const):
        (WebCore::GPULegacyRenderPipelineState::setLabel const):
        (WebCore::GPULegacyRenderPipelineState::metal const):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyTextureDescriptorMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyTextureDescriptorMetal.mm.
        (WebCore::GPULegacyTextureDescriptor::GPULegacyTextureDescriptor):
        (WebCore::GPULegacyTextureDescriptor::width const):
        (WebCore::GPULegacyTextureDescriptor::setWidth const):
        (WebCore::GPULegacyTextureDescriptor::height const):
        (WebCore::GPULegacyTextureDescriptor::setHeight const):
        (WebCore::GPULegacyTextureDescriptor::sampleCount const):
        (WebCore::GPULegacyTextureDescriptor::setSampleCount const):
        (WebCore::GPULegacyTextureDescriptor::textureType const):
        (WebCore::GPULegacyTextureDescriptor::setTextureType const):
        (WebCore::GPULegacyTextureDescriptor::storageMode const):
        (WebCore::GPULegacyTextureDescriptor::setStorageMode const):
        (WebCore::GPULegacyTextureDescriptor::usage const):
        (WebCore::GPULegacyTextureDescriptor::setUsage const):
        (WebCore::GPULegacyTextureDescriptor::metal const):
        * platform/graphics/gpu/legacy/cocoa/GPULegacyTextureMetal.mm: Renamed from Source/WebCore/platform/graphics/metal/GPULegacyTextureMetal.mm.
        (WebCore::GPULegacyTexture::GPULegacyTexture):
        (WebCore::GPULegacyTexture::width const):
        (WebCore::GPULegacyTexture::height const):
        (WebCore::GPULegacyTexture::metal const):

2018-11-21  Adrian Perez de Castro  <aperez@igalia.com>

        [SOUP] Certificate decoder always returns GByteArray with zero size
        https://bugs.webkit.org/show_bug.cgi?id=191888

        Reviewed by Žan Doberšek.

        No new tests needed.

        * platform/network/soup/CertificateInfo.h:
        (WTF::Persistence::Coder<GRefPtr<GByteArray>>::decode): Add missing
        call to g_byte_array_set_size() to make sure byteArray->len has the
        correct value.

2018-11-21  Zalan Butjas  <zalan@apple.com>

        [LFC][IFC] Take nonBreakableStart/End into use.
        https://bugs.webkit.org/show_bug.cgi?id=191873

        Reviewed by Antti Koivisto.

        Offset the final inline runs with the nonBreakableStart/End values.
        (This patch also fixes relative positioned run verification.)

        Test: fast/inline/inline-content-with-padding-left-right.html

        * layout/Verification.cpp:
        (WebCore::Layout::LayoutState::verifyAndOutputMismatchingLayoutTree const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::splitInlineRunIfNeeded const):

2018-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r237845): [cairo] Hyperlink underscore layout issue
        https://bugs.webkit.org/show_bug.cgi?id=191630

        Reviewed by Michael Catanzaro.

        Only flip Y in GlyphToPathTranslator for ports using CG.

        * platform/graphics/FontCascade.cpp:
        (WebCore::GlyphToPathTranslator::GlyphToPathTranslator):

2018-11-21  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Refactor AppendPipeline deinitialization
        https://bugs.webkit.org/show_bug.cgi?id=191759

        Reviewed by Xabier Rodriguez-Calvar.

        AppendPipeline currently has a method, clearPlayerPrivate(), that the
        client code uses to deinitialize most of the AppendPipeline... just
        before actually destructing it in the next line of code.

        Since at that point there should not be alive RefPtr's pointing to the
        AppendPipeline there is no need for this kind of pre-deinitialization
        in this usage pattern. Instead, we can just rely on C++ destructors,
        cleaning the code a bit and removing the potential for the question
        "what if `clearPlayerPrivate() has been called before?`": it has not.

        Assertions have been added to ensure that there is only one alive
        RefPtr pointing to AppendPipeline, therefore guaranteeing its immediate
        destruction.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::~AppendPipeline):
        (WebCore::AppendPipeline::deinitialize):
        (WebCore::AppendPipeline::clearPlayerPrivate): Deleted.
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::~MediaPlayerPrivateGStreamerMSE):
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp:
        (WebCore::MediaSourceClientGStreamerMSE::removedFromMediaSource):

2018-11-20  Dean Jackson  <dino@apple.com>

        Removing using namespace WebCore from WebLayer
        https://bugs.webkit.org/show_bug.cgi?id=191870
        <rdar://problem/46192206>

        Rubber-stamped by Sam Weinig.

        Remove "using namespace WebCore" from WebLayer.mm
        because it will cause type clashes in unified source
        builds.

        * platform/graphics/mac/WebLayer.mm:
        (-[WebLayer drawInContext:]):
        (-[WebSimpleLayer setNeedsDisplay]):
        (-[WebSimpleLayer setNeedsDisplayInRect:]):
        (-[WebSimpleLayer display]):
        (-[WebSimpleLayer drawInContext:]):

2018-11-20  Ryosuke Niwa  <rniwa@webkit.org>

        Input element gains focus when a selectstart event listener on document prevents the default action
        https://bugs.webkit.org/show_bug.cgi?id=191714
        <rdar://problem/46174389>

        Reviewed by Antti Koivisto.

        The bug was caused by WebKit keep firing selectstart upon mousemove after the drag had already started
        when preventDefault had been called in the previous firings of selectstart event. Because input element
        has its own editable element and fires selectstart on the input element itself, which won't be prevented
        by selectstart on docuemnt, this allowed the selection to be set inside the input element even though
        the mouse cursor was simply passing over the input element after the drag had already started.

        Fixed the bug by not firing selectstart if the default action had been prevented by the initial firing
        of selectstart by setting m_mouseDownMayStartDrag to false. This also matches the behaviors of Chrome
        and Firefox.

        Test: fast/events/selectstart-prevent-default-should-not-focus-input.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateSelectionForMouseDownDispatchingSelectStart):
        (WebCore::EventHandler::updateSelectionForMouseDrag):

2018-11-20  Christopher Reid  <chris.reid@sony.com>

        Remove the need for LocalizedStringsWPE.cpp
        https://bugs.webkit.org/show_bug.cgi?id=191854

        Reviewed by Michael Catanzaro.

        No change in behavior.

        Consolidate "Search the Web" as the default search context menu text on non-COCOA ports.

        GTK, WPE, and non-CF WIN all had the same default localizedString function
        of String::fromUTF8. Move that to LocalizedString.cpp as the default implementation
        for all ports not using CF.

        * en.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        * platform/gtk/LocalizedStringsGtk.cpp:
        * platform/win/LocalizedStringsWin.cpp:
        * platform/wpe/LocalizedStringsWPE.cpp: Removed.

2018-11-20  Zan Dobersek  <zdobersek@igalia.com>

        Segfaults on https://terminalizer.com/
        https://bugs.webkit.org/show_bug.cgi?id=191805

        Reviewed by Michael Catanzaro.

        In HarfBuzzFace, the CacheEntry's HashMap object that caches Unicode
        codepoints and their corresponding glyph indices should allow zero
        values as valid keys since zero is a valid Unicode codepoint.

        This change enables properly caching zero codepoints, avoiding
        repetitive additions to the HashMap cache that end up in a crash.

        * platform/graphics/harfbuzz/HarfBuzzFace.h: Move the elongated
        GlyphCache type alias to the public section of HarfBuzzFace class
        declaration, making it reusable in the helper HarfBuzzFontData struct.
        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:

2018-11-20  Antti Koivisto  <antti@apple.com>

        Update hover state in composed tree
        https://bugs.webkit.org/show_bug.cgi?id=191860

        Reviewed by Zalan Bujtas.

        The code was already mostly switched over from render tree to composed tree.
        This patch replaces the remaining common ancestor search code with a DOM based equivalent.

        * dom/Document.cpp:
        (WebCore::findNearestCommonComposedAncestor):
        (WebCore::Document::updateHoverActiveState):
        (WebCore::nearestCommonHoverAncestor): Deleted.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::hoverAncestor const): Deleted.
        * rendering/RenderBlock.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::hoverAncestor const): Deleted.

        No longer needed.

        * rendering/RenderElement.h:

2018-11-20  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Measure run with non-breakable start/end.
        https://bugs.webkit.org/show_bug.cgi?id=191850

        Reviewed by Antti Koivisto.

        Line breaking needs to know the complete width of the run including padding etc.

        * layout/Verification.cpp:
        (WebCore::Layout::collectFlowBoxSubtree):
        (WebCore::Layout::collectInlineBoxes):
        (WebCore::Layout::outputMismatchingComplexLineInformationIfNeeded):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::splitInlineRunIfNeeded const):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::runWidth):
        * layout/inlineformatting/InlineLineBreaker.cpp:
        (WebCore::Layout::InlineLineBreaker::InlineLineBreaker):
        (WebCore::Layout::InlineLineBreaker::runWidth const):
        (WebCore::Layout::InlineLineBreaker::textWidth const):
        * layout/inlineformatting/InlineLineBreaker.h:
        * layout/inlineformatting/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::hyphenPositionBefore):
        (WebCore::Layout::TextUtil::width):
        (WebCore::Layout::TextUtil::fixedPitchWidth):
        (WebCore::Layout::TextUtil::TextUtil): Deleted.
        (WebCore::Layout::TextUtil::width const): Deleted.
        (WebCore::Layout::TextUtil::hyphenPositionBefore const): Deleted.
        (WebCore::Layout::TextUtil::textWidth const): Deleted.
        (WebCore::Layout::TextUtil::fixedPitchWidth const): Deleted.
        * layout/inlineformatting/text/TextUtil.h:

2018-11-20  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] InlineFormattingContext::Line should hold the list of runs for the current line.
        https://bugs.webkit.org/show_bug.cgi?id=191845

        Reviewed by Antti Koivisto.

        Collect the runs in InlineFormattingContext::Line and transfer them to InlineFormattingState during line closing.
        (In the most common cases, this is only one extra vector::append() call.)

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::splitInlineRunIfNeeded const):
        (WebCore::Layout::InlineFormattingContext::createFinalRuns const):
        (WebCore::Layout::InlineFormattingContext::postProcessInlineRuns const):
        (WebCore::Layout::InlineFormattingContext::closeLine const):
        (WebCore::Layout::InlineFormattingContext::appendContentToLine const):
        (WebCore::Layout::InlineFormattingContext::layoutInlineContent const):
        (WebCore::Layout::InlineFormattingContext::placeInFlowPositionedChildren const):
        (WebCore::Layout::InlineFormattingContext::splitInlineRunsIfNeeded const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::Line::hasContent const):
        (WebCore::Layout::InlineFormattingContext::Line::runs):
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::justifyRuns):
        (WebCore::Layout::InlineFormattingContext::Geometry::computeExpansionOpportunities):
        (WebCore::Layout::InlineFormattingContext::Geometry::alignRuns):
        * layout/inlineformatting/Line.cpp:
        (WebCore::Layout::InlineFormattingContext::Line::init):
        (WebCore::Layout::InlineFormattingContext::Line::adjustLogicalLeft):
        (WebCore::Layout::InlineFormattingContext::Line::contentLogicalRight const):
        (WebCore::Layout::InlineFormattingContext::Line::appendContent):
        (WebCore::Layout::InlineFormattingContext::Line::close):
        (WebCore::Layout::InlineFormattingContext::Line::Line): Deleted.

2018-11-20  Zalan Butjas  <zalan@apple.com>

        [LFC][IFC] Introduce InlineItem::nonBreakableStart/End
        https://bugs.webkit.org/show_bug.cgi?id=191839

        Reviewed by Antti Koivisto.

        Non-breakable start/end marks margin/padding/border space (even when it does not directly come from the associated layout box)

        <span style="padding: 5px"><span>nested content with padding parent</span</span>
        <nested content with padding parent> <- inline run has 5px non-breakable start/end.

        <span style="border: 5px solid green"><span style="padding-right: 10px; margin-right: 1px">1</span>2</span><span>    3</span>
        <1> <- inline run has 5px non-breakable start and 11px non-breakable end.
        <2> <- inline run has 0px non-breakable start and 5px non-breakable end.
        <3> <- no non-breakable values.

        This is what the runs look like (input to line breaking)
        <     1           2     >
        < > (whitespace)
        <3>
        The line breaking treats the paddding/border etc space as part of the run and as non-breaking opportunity.
        With the given runs the first position where we can break the line is at the whitespace.

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::collectInlineContentForSubtree const):
        * layout/inlineformatting/InlineItem.h:
        (WebCore::Layout::InlineItem::nonBreakableStart const):
        (WebCore::Layout::InlineItem::nonBreakableEnd const):
        (WebCore::Layout::InlineItem::addNonBreakableStart):
        (WebCore::Layout::InlineItem::addNonBreakableEnd):

2018-11-20  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move detaching rules from InlineFormattingState to InlineItem
        https://bugs.webkit.org/show_bug.cgi?id=191838

        Reviewed by Antti Koivisto.

        This is in preparation for adding more context to InlineItem. In addition to
        detaching rules it will also hold non-breakable start/end information.

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::splitInlineRunIfNeeded const):
        (WebCore::Layout::InlineFormattingContext::collectInlineContentForSubtree const):
        * layout/inlineformatting/InlineFormattingState.cpp:
        (WebCore::Layout::InlineFormattingState::addDetachingRule): Deleted.
        (WebCore::Layout::InlineFormattingState::detachingRules const): Deleted.
        * layout/inlineformatting/InlineFormattingState.h:
        (WebCore::Layout::InlineFormattingState::setDetachingRules): Deleted.
        * layout/inlineformatting/InlineItem.h:
        (WebCore::Layout::InlineItem::addDetachingRule):
        (WebCore::Layout::InlineItem::detachingRules const):

2018-11-20  Zalan Bujjtas  <zalan@apple.com>

        [LFC][IFC] InlineRunProvider::append() should just take const InlineItem&.
        https://bugs.webkit.org/show_bug.cgi?id=191837

        Reviewed by Antti Koivisto.

        This allows us to remove the InlineFormattingState dependency as well.

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::collectInlineContentForSubtree const):
        (WebCore::Layout::InlineFormattingContext::instrinsicWidthConstraints const):
        * layout/inlineformatting/InlineRunProvider.cpp:
        (WebCore::Layout::InlineRunProvider::InlineRunProvider):
        (WebCore::Layout::InlineRunProvider::append):
        * layout/inlineformatting/InlineRunProvider.h:

2018-11-20  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Enhance debugging by making sure to print the pipeline in MediaPlayerPrivateGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=191586

        Reviewed by Xabier Rodriguez-Calvar.

        This is minor changes that do not require tests.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setAudioStreamProperties):
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::setPlaybinURL):
        (WebCore::MediaPlayerPrivateGStreamer::loadFull):
        (WebCore::MediaPlayerPrivateGStreamer::commitLoad):
        (WebCore::MediaPlayerPrivateGStreamer::readyTimerFired):
        (WebCore::MediaPlayerPrivateGStreamer::changePipelineState):
        (WebCore::MediaPlayerPrivateGStreamer::prepareToPlay):
        (WebCore::MediaPlayerPrivateGStreamer::play):
        (WebCore::MediaPlayerPrivateGStreamer::pause):
        (WebCore::MediaPlayerPrivateGStreamer::durationMediaTime const):
        (WebCore::MediaPlayerPrivateGStreamer::seek):
        (WebCore::MediaPlayerPrivateGStreamer::updatePlaybackRate):
        (WebCore::MediaPlayerPrivateGStreamer::paused const):
        (WebCore::MediaPlayerPrivateGStreamer::enableTrack):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfText):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::processBufferingStats):
        (WebCore::MediaPlayerPrivateGStreamer::fillTimerFired):
        (WebCore::MediaPlayerPrivateGStreamer::maxMediaTimeSeekable const):
        (WebCore::MediaPlayerPrivateGStreamer::totalBytes const):
        (WebCore::MediaPlayerPrivateGStreamer::uriDecodeBinElementAddedCallback):
        (WebCore::MediaPlayerPrivateGStreamer::downloadBufferFileCreatedCallback):
        (WebCore::MediaPlayerPrivateGStreamer::sourceSetup):
        (WebCore::MediaPlayerPrivateGStreamer::asyncStateChangeDone):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        (WebCore::MediaPlayerPrivateGStreamer::loadNextLocation):
        (WebCore::MediaPlayerPrivateGStreamer::didEnd):
        (WebCore::MediaPlayerPrivateGStreamer::setDownloadBuffering):
        (WebCore::MediaPlayerPrivateGStreamer::setPreload):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):

2018-11-20  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Consider scrollbars in populateGridPositionsForDirection()
        https://bugs.webkit.org/show_bug.cgi?id=191656

        Reviewed by Javier Fernandez.

        We never care about scrollbars in RenderGrid::populateGridPositionsForDirection(),
        that's fine if the scrollbars are at the end (e.g. on the right in horizontal writing mode and LTR direction)
        but it causes problems when they're at the beginning (e.g. on the left in horizontal writing mode and RTL direction).

        The patch modifies the method so it takes into account scrollbar size
        in order to compute the position of the columns/rows depending on the direction and the writing mode.

        Tests: imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-001.html
               imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001.html
               imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::populateGridPositionsForDirection):

2018-11-19  Ryosuke Niwa  <rniwa@webkit.org>

        Click on node assigned to slot in button's shadow cause loss of button focus
        https://bugs.webkit.org/show_bug.cgi?id=191694
        <rdar://problem/46107920>

        Reviewed by Wenson Hsieh.

        Fixed the bug by traversing the parent in the composed tree when looking for an element to focus.

        Test: fast/shadow-dom/focus-slot-parent.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchMouseEvent): Fixed the bug. Also use RefPtr instead of a raw pointer.

2018-11-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r238350) [curl] CertificateInfo.h: error: template specialization requires 'template<>'
        https://bugs.webkit.org/show_bug.cgi?id=191849

        Unreviewed build fix for clang-cl builds.

        No new tests because there's no behaviour change.

        * platform/network/curl/CertificateInfo.h:
        (WTF::Persistence::Coder<WebCore::CertificateInfo>::encode):
        (WTF::Persistence::Coder<WebCore::CertificateInfo>::decode):

2018-11-19  Basuke Suzuki  <basuke.suzuki@sony.com>

        [Curl] Add API for CertificateInfo.
        https://bugs.webkit.org/show_bug.cgi?id=191647

        Reviewed by Alex Christensen.

        Minor changes for WebKit API.

        Tests: TestWebKitAPI/Tests/WebKit/curl/Certificates.cpp

        * platform/network/curl/CertificateInfo.h:
        * platform/network/curl/CertificateInfoCurl.cpp:
        (WebCore::CertificateInfo::CertificateInfo):
        (WebCore::CertificateInfo::makeCertificate):
        * platform/network/curl/CurlSSLVerifier.cpp:
        (WebCore::BIOHolder::asCertificate):

2018-11-19  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Begin implementing WebGPUTexture, WebGPUTextureView, and WebGPUTextureFormatEnum, and WebGPUSwapChain::configure upgrades
        https://bugs.webkit.org/show_bug.cgi?id=191794

        Reviewed by Dean Jackson.

        Test: webgpu/textures-textureviews.html

        Implement basic functionality for getting the next WebGPUTexture and TextureView from the WebGPURenderingContext
        to use as a render destination for the next draw call. Also introduce WebGPUTextureFormatEnum and the ability to 
        configure the context with a chosen texture format. 

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/webgpu/GPUSwapChain.h: Texture/Pixel format can now be set.
        * Modules/webgpu/GPUTexture.h: Added. Interface to a MTLTexture.
        * Modules/webgpu/GPUTextureFormatEnum.h: Added.
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createRenderPipeline const): Removed now-unnecessary enum class cast.
        * Modules/webgpu/WebGPURenderPipelineDescriptor.h: Rather than duplicate GPURenderPipelineDescriptor::PrimitiveTopology, alias to it.
        * Modules/webgpu/WebGPUSwapChain.cpp:
        (WebCore::WebGPUSwapChain::configure): Can now specify a specific texture format for the underlying CAMetalLayer.
        (WebCore::WebGPUSwapChain::getNextTexture): Added. Request the next drawable texture.
        * Modules/webgpu/WebGPUSwapChain.h: Expose getNextTexture().
        * Modules/webgpu/WebGPUSwapChain.idl:
        * Modules/webgpu/WebGPUTexture.cpp: Added. 
        (WebCore::WebGPUTexture::create):
        (WebCore::WebGPUTexture::WebGPUTexture):
        (WebCore::WebGPUTexture::createDefaultTextureView):
        * Modules/webgpu/WebGPUTexture.h: Added.
        * Modules/webgpu/WebGPUTexture.idl: Added.
        * Modules/webgpu/WebGPUTextureFormatEnum.h: Added. Type alias for GPUTextureFormatEnum.
        * Modules/webgpu/WebGPUTextureFormatEnum.idl: Added. Used to represent any texture format used by WebGPU.
        * Modules/webgpu/WebGPUTextureView.cpp: Added.
        (WebCore::WebGPUTextureView::create):
        (WebCore::WebGPUTextureView::WebGPUTextureView):
        * Modules/webgpu/WebGPUTextureView.h: Added.
        * Modules/webgpu/WebGPUTextureView.idl: Added.
        * Modules/webgpu/cocoa/GPUSwapChainMetal.mm: 
        (WebCore::GPUSwapChain::create):
        (WebCore::GPUSwapChain::setFormat): Called by WebGPUSwapChain::configure().
        (WebCore::GPUSwapChain::getNextTexture):
        * Modules/webgpu/cocoa/GPUTextureFormatEnumMetal.mm: Added.
        (WebCore::convertAndValidate): Convert the WebGPUTextureFormatEnum to a MTLPixelFormat.
        * Modules/webgpu/cocoa/GPUTextureMetal.mm: Added.
        (WebCore::GPUTexture::create):
        (WebCore::GPUTexture::GPUTexture):
        (WebCore::GPUTexture::createDefaultTextureView): Uses the pixelFormat of the original texture.
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2018-11-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: "Reload Web Inspector" button no longer partially works
        https://bugs.webkit.org/show_bug.cgi?id=191773
        <rdar://problem/46139932>

        Reviewed by Devin Rousso.

        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::reopen):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        Provide a host call to reopen an inspector window to reload it.

        * testing/Internals.cpp:
        Stub implementation, this is not used in tests.

2018-11-19  Rob Buis  <rbuis@igalia.com>

        Setting document.title should have no effect for non SVG/HTML documents
        https://bugs.webkit.org/show_bug.cgi?id=191643

        Reviewed by Chris Dumez.

        Setting document.title should have no effect for non SVG/HTML documents,
        see https://html.spec.whatwg.org/multipage/dom.html#document.title.

        Behavior matches Firefox and Chrome.

        Test: imported/w3c/web-platform-tests/html/dom/documents/dom-tree-accessors/document.title-not-in-html-svg.html

        * dom/Document.cpp:
        (WebCore::Document::setTitle):

2018-11-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Dragging image with a border-image larger than the image element crashes
        https://bugs.webkit.org/show_bug.cgi?id=191817
        <rdar://problem/46159222>

        Reviewed by Ryosuke Niwa.

        When dragging an image element, if the image element has:

        (1) box-sizing: border-box;
        (2) a border-image
        (3) a border-top-width that is at least as large as the height of the element and/or a border-left-width that is
            at least as large as the width of the element

        ...then upon drag, we will fail to create a suitable drag image using the bounding box of the image element
        since the size is empty, thereby causing a crash. To fix this, we bail out of this bounding-rect-dependent
        codepath for generating a drag image in the case where the bounding rect is empty, and instead fall back to an
        icon representation for the drag image.

        Test: fast/events/drag-image-with-border-image.html

        * page/DragController.cpp:
        (WebCore::DragController::doImageDrag):

2018-11-18  Zan Dobersek  <zdobersek@igalia.com>

        HarfBuzzFace::CacheEntry should use 32-bit values in its HashMap
        https://bugs.webkit.org/show_bug.cgi?id=191825

        Reviewed by Michael Catanzaro.

        The HashMap-based glyph cache contained in HarfBuzzFace::CacheEntry
        objects is used to map given Unicode codepoints to corresponding
        glyph indices (which occurs in the harfBuzzGetGlyph() function that's
        invoked by HarfBuzz).

        The 16-bit unsigned integer as the map's value type is not enough here
        when the glyph index mapping is done through Freetype -- its API returns
        32-bit glyph indices, and Cairo assigns this value to the 64-bit
        unsigned index variable in the cairo_glyph_t struct. The value type is
        thus bumped to 32 bits to match the unsigned type size of the index's
        origin.

        * platform/graphics/harfbuzz/HarfBuzzFace.h:
        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:

2018-11-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Remove all usages of UIItemProvider, UIItemProviderReading, and related classes
        https://bugs.webkit.org/show_bug.cgi?id=191819

        Reviewed by Dan Bernstein.

        Replace UIItemProvider (and related classes) with NSItemProvider.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::registerItemToPasteboard):
        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderDataRegistrar registerItemProvider:]):
        (-[WebItemProviderWritableObjectRegistrar initWithObject:]):
        (-[WebItemProviderWritableObjectRegistrar representingObject]):
        (-[WebItemProviderWritableObjectRegistrar registerItemProvider:]):
        (-[WebItemProviderRegistrationInfoList addRepresentingObject:]):
        (-[WebItemProviderRegistrationInfoList itemProvider]):
        (-[WebItemProviderPasteboard pasteboardTypes]):
        (-[WebItemProviderPasteboard _preLoadedDataConformingToType:forItemProviderAtIndex:]):
        (-[WebItemProviderPasteboard dataForPasteboardType:inItemSet:]):
        (allLoadableClasses):
        (classForTypeIdentifier):
        (-[WebItemProviderPasteboard valuesForPasteboardType:inItemSet:]):
        (-[WebItemProviderPasteboard numberOfFiles]):
        (-[WebItemProviderPasteboard itemProviderAtIndex:]):
        (-[WebItemProviderPasteboard enumerateItemProvidersWithBlock:]):
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::containsURL const):

2018-11-17  Ross Kirsling  <ross.kirsling@sony.com>

        Remove superfluous LayoutUnit initializations
        https://bugs.webkit.org/show_bug.cgi?id=191791

        Reviewed by Simon Fraser.

        First step toward making LayoutUnit constructors explicit:
        eliminate `= 0` when constructing LayoutUnit lvalues.

        * editing/Editor.cpp:
        (WebCore::Editor::firstRectForRange const):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::modify):
        (WebCore::FrameSelection::lineDirectionPointForBlockDirectionNavigation):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::RenderSliderContainer::computeLogicalHeight const):
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::justifyRuns):
        * page/FrameView.cpp:
        (WebCore::FrameView::forceLayoutForPagination):
        * page/SpatialNavigation.cpp:
        (WebCore::scrollInDirection):
        (WebCore::distanceDataForNode):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::layout):
        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::marginIntrinsicLogicalWidthForChild):
        (WebCore::GridTrackSizingAlgorithm::gridAreaBreadthForChild const):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment const):
        (WebCore::InlineFlowBox::computeUnderAnnotationAdjustment const):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::marginIntrinsicLogicalWidthForChild const):
        (WebCore::RenderBlock::layoutPositionedObject):
        (WebCore::RenderBlock::selectionGapRectsForRepaint):
        (WebCore::RenderBlock::paintSelection):
        (WebCore::RenderBlock::textIndentOffset const):
        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::rebuildFloatingObjectSetFromIntrudingFloats):
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::layoutBlockChildren):
        (WebCore::RenderBlockFlow::marginValuesForChild const):
        (WebCore::RenderBlockFlow::estimateLogicalTopPosition):
        (WebCore::RenderBlockFlow::applyBeforeBreak):
        (WebCore::RenderBlockFlow::applyAfterBreak):
        (WebCore::RenderBlockFlow::adjustBlockChildForPagination):
        (WebCore::RenderBlockFlow::clearFloats):
        (WebCore::RenderBlockFlow::lowestFloatLogicalBottom const):
        (WebCore::RenderBlockFlow::lowestInitialLetterLogicalBottom const):
        (WebCore::RenderBlockFlow::addOverhangingFloats):
        (WebCore::RenderBlockFlow::getClearDelta):
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths const):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::determineStartPosition):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::fillAvailableMeasure const):
        (WebCore::RenderBox::computeIntrinsicLogicalWidthUsing const):
        (WebCore::RenderBox::computeLogicalWidthInFragmentUsing const):
        (WebCore::RenderBox::computePercentageLogicalHeight const):
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing const):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing const):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing const):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced const):
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced const):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::computedCSSPadding const):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry const):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::marginWidthForChild):
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::validateFragments):
        (WebCore::RenderFragmentedFlow::adjustedPositionRelativeToOffsetParent const):
        (WebCore::RenderFragmentedFlow::updateFragmentsFragmentedFlowPortionRect):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paint):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::computePreferredLogicalWidths):
        (WebCore::RenderListMarker::updateMargins):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::initialBlockOffsetForPainting const):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::layoutBlock):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::convertStyleLogicalWidthToComputedWidth):
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::offsetWidthForColumn const):
        (WebCore::RenderTable::offsetHeightForColumn const):
        (WebCore::RenderTable::outerBorderBefore const):
        (WebCore::RenderTable::outerBorderAfter const):
        (WebCore::RenderTable::outerBorderStart const):
        (WebCore::RenderTable::outerBorderEnd const):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::logicalWidthFromColumns const):
        (WebCore::RenderTableCell::computeIntrinsicPadding):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::distributeExtraLogicalHeightToPercentRows):
        (WebCore::RenderTableSection::distributeExtraLogicalHeightToAutoRows):
        (WebCore::RenderTableSection::distributeRemainingExtraLogicalHeight):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::calcOuterBorderBefore const):
        (WebCore::RenderTableSection::calcOuterBorderAfter const):
        (WebCore::RenderTableSection::calcOuterBorderStart const):
        (WebCore::RenderTableSection::calcOuterBorderEnd const):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        (WebCore::RootInlineBox::beforeAnnotationsAdjustment const):
        (WebCore::RootInlineBox::lineSnapAdjustment const):
        (WebCore::RootInlineBox::verticalPositionForBox):
        * rendering/line/BreakingContext.h:
        (WebCore::inlineLogicalWidth):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::layoutItems):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::layoutBlock):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::computePreferredLogicalWidths):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::computePreferredLogicalWidths):
        (WebCore::RenderMathMLRoot::paint):
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::computePreferredLogicalWidths):
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::layoutBlock):
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::stretchHorizontalOperatorsAndLayoutChildren):
        (WebCore::RenderMathMLUnderOver::layoutBlock):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getShadowInsetExtent const):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):

2018-11-17  Simon Fraser  <simon.fraser@apple.com>

        Avoid triggering compositing updates when only the root layer is composited
        https://bugs.webkit.org/show_bug.cgi?id=191813

        Reviewed by Zalan Bujtas.

        If we know that the only composited layer is the root, we can avoid triggering deep
        compositing updates sometimes, for example when layout changes size or position,
        or when z-order lists change.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::updateCompositingLayersAfterScroll):
        (WebCore::outputPaintOrderTreeRecursive):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBackingAndHierarchy): Consult the layer.hasCompositingDescendant()
        flag to cut off descendants traversal when possible.
        (WebCore::RenderLayerCompositor::layerStyleChanged):

2018-11-17  Simon Fraser  <simon.fraser@apple.com>

        Fix an error in 238354 - !=, not ==.
        
        Fixes test failures.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerBecameNonComposited):

2018-11-17  Simon Fraser  <simon.fraser@apple.com>

        Clarify RenderLayerCompositor::hasAnyAdditionalCompositedLayers() and related code.
        https://bugs.webkit.org/show_bug.cgi?id=191810

        Reviewed by Zalan Bujtas.

        Rename m_compositedLayerCount to m_contentLayersCount and have it track layers other
        than the RenderView's layer.

        hasAnyAdditionalCompositedLayers() is really about whether we can drop out of compositing
        because no content layer is composited, and overlays don't require compositing, so
        rename it.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::needsCompositingForContentOrOverlays const):
        (WebCore::RenderLayerCompositor::layerBecameComposited):
        (WebCore::RenderLayerCompositor::layerBecameNonComposited):
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers const): Deleted.
        * rendering/RenderLayerCompositor.h:

2018-11-17  Simon Fraser  <simon.fraser@apple.com>

        Rename RenderLayerCompositor::inCompositingMode() to usesCompositing()
        https://bugs.webkit.org/show_bug.cgi?id=191808

        Reviewed by Zalan Bujtas.

        Other code uses "usesCompositing" so standardize on that (future changes will make
        "compositing mode" more ambiguous). Also remove a FrameView function that only
        had one caller.

        * page/FrameView.cpp:
        (WebCore::FrameView::clearBackingStores):
        (WebCore::FrameView::handleDeferredScrollbarsUpdateAfterDirectionChange):
        (WebCore::FrameView::delegatesScrollingDidChange):
        (WebCore::FrameView::hasCompositedContent const): Deleted.
        * page/FrameView.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::rebuildZOrderLists):
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::updateCompositingLayersAfterScroll):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingPolicy):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::layerStyleChanged):
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::parentFrameContentLayers):
        (WebCore::RenderLayerCompositor::setIsInWindow):
        (WebCore::RenderLayerCompositor::needsToBeComposited const):
        (WebCore::RenderLayerCompositor::reasonsForCompositing const):
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation const):
        (WebCore::RenderLayerCompositor::rootOrBodyStyleChanged):
        (WebCore::RenderLayerCompositor::rootBackgroundColorOrTransparencyChanged):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewAndCompositedLayers):
        (WebCore::RenderView::usesCompositing const):

2018-11-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: add button to show system certificate dialog
        https://bugs.webkit.org/show_bug.cgi?id=191458
        <rdar://problem/45977019>

        Reviewed by Joseph Pecoraro.

        Test: http/tests/inspector/network/getSerializedCertificate.html

        * inspector/agents/InspectorNetworkAgent.h:
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::getSerializedCertificate): Added.

        * inspector/InspectorFrontendHost.idl:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::supportsShowCertificate): Added.
        (WebCore::InspectorFrontendHost::showCertificate): Added.
        * inspector/InspectorFrontendClient.h:
        (InspectorFrontendClient::showCertificate): Added.
        * testing/Internals.cpp:
        (InspectorStubFrontend::showCertificate): Added.

        * platform/network/cf/CertificateInfo.h:
        (WTF::Persistence::encodeCFData): Added.
        (WTF::Persistence::decodeCFData): Added.
        (WTF::Persistence::encodeSecTrustRef): Added.
        (WTF::Persistence::decodeSecTrustRef): Added.
        (WTF::Persistence::encodeCertificateChain): Added.
        (WTF::Persistence::decodeCertificateChain): Added.
        (WTF::Persistence::Coder<WebCore::CertificateInfo>::encode): Added.
        (WTF::Persistence::Coder<WebCore::CertificateInfo>::decode): Added.
        * platform/network/cf/CertificateInfoCFNet.cpp:
        * platform/network/cocoa/CertificateInfoCocoa.mm:

        * platform/network/curl/CertificateInfo.h:
        (WTF::Persistence::Coder<WebCore::CertificateInfo>::encode): Added.
        (WTF::Persistence::Coder<WebCore::CertificateInfo>::decode): Added.

        * platform/network/soup/CertificateInfo.h:
        (WTF::Persistence::Coder<GRefPtr<GByteArray>>::encode): Added.
        (WTF::Persistence::Coder<GRefPtr<GByteArray>>::decode): Added.
        (WTF::Persistence::certificatesDataListFromCertificateInfo): Added.
        (WTF::Persistence::certificateFromCertificatesDataList): Added.
        (WTF::Persistence::Coder<WebCore::CertificateInfo>::encode): Added.
        (WTF::Persistence::Coder<WebCore::CertificateInfo>::decode): Added.

2018-11-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] InlineFormattingState::addDetachingRule should accumulate rules.
        https://bugs.webkit.org/show_bug.cgi?id=191801

        Reviewed by Antti Koivisto.

        before<span style="position: relative">positioned</span>after
        In the example above the <positioned> inline box has both the BreakAtStart and the BreakAtEnd rules.
        While walking through the inline tree, we add BreakAtStart first and when we figure it's the last child too,
        we add BreakAtEnd as well. BreakAtEnd should not clear the BreakAtStart rule.

        Test: fast/inline/simple-inline-with-out-of-flow-descendant2.html

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::collectInlineContentForSubtree const):
        * layout/inlineformatting/InlineFormattingState.cpp:
        (WebCore::Layout::InlineFormattingState::addDetachingRule):
        * layout/inlineformatting/InlineFormattingState.h:
        (WebCore::Layout::InlineFormattingState::addDetachingRule): Deleted.

2018-11-17  Jonathan Hammer  <jonathan@e3software.com>

        Caret stops blinking after context menu shown
        https://bugs.webkit.org/show_bug.cgi?id=191715

        Reviewed by Ryosuke Niwa.

        Changed EventHandler::sendContextMenuEvent to un-suspend caret blinking so that
        the caret continues to blink even after the context menu is dismissed. The normal
        way of un-suspendeding caret blinking (in EventHandler::handleMouseReleaseEvent) does
        not apply in the case of context menus because handleMouseReleaseEvent is not
        called once the context menu is up.

        Test: fast/events/contextmenu-dismiss-blink-caret.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEvent):
        * testing/Internals.cpp:
        (WebCore::Internals::isCaretBlinkingSuspended):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-11-16  Antoine Quint  <graouts@apple.com>

        [Pointer Events] event.isPrimary doesn't always represent the oldest active touch
        https://bugs.webkit.org/show_bug.cgi?id=191752
        <rdar://problem/46129270>

        Reviewed by Dean Jackson.

        Provide isPrimary to the constructor so its value can be determined at the call site.

        Test: pointerevents/ios/pointer-events-is-primary.html

        * dom/PointerEvent.h:
        * dom/ios/PointerEventIOS.cpp:
        (WebCore::PointerEvent::create):
        (WebCore::PointerEvent::PointerEvent):
        (WebCore::m_isPrimary):

2018-11-16  Alex Christensen  <achristensen@webkit.org>

        Tweak _showSafeBrowsingWarningWithTitle SPI
        https://bugs.webkit.org/show_bug.cgi?id=191799

        Reviewed by Wenson Hsieh.

        It turns out I needed to expose both sentinel values used in safe browsing for my application of this SPI in Mac Safari.
        Allowing the caller to make its own sentinel values is insufficient because the malware confirmation needs to be over the warning.
        The completion handler parameter should just be a bool indicating whether the user has chosen to continue after all warnings.

        Covered by updated API tests.

        * en.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::formControlCancelButtonTitle):
        Make "Cancel"'s description a little more generic.

2018-11-16  Simon Fraser  <simon.fraser@apple.com>

        Optimize composited iframe layer hookup
        https://bugs.webkit.org/show_bug.cgi?id=191778

        Reviewed by Zalan Bujtas.

        The change made in r238229 can be more targeted; we only need to hook up iframe content
        layers when the layer is already composited (otherwise the updateBacking() above would have triggered
        the work), and when it's a RenderWidget layer.
        
        Tested by existing tests.

        * rendering/RenderLayer.cpp:
        (WebCore::outputPaintOrderTreeRecursive):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerStyleChanged):

2018-11-16  Ross Kirsling  <ross.kirsling@sony.com>

        Provide default implementation of Widget
        https://bugs.webkit.org/show_bug.cgi?id=191784

        Reviewed by Michael Catanzaro.

        * SourcesWPE.txt:
        * platform/Widget.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::frameRect const):
        (WebCore::Widget::~Widget):
        (WebCore::Widget::setFrameRect):
        (WebCore::Widget::paint):
        (WebCore::Widget::setFocus):
        (WebCore::Widget::setCursor):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::setIsSelected):
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::Widget): Deleted.
        (WebCore::Widget::frameRect const): Deleted.
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget): Deleted.
        (WebCore::Widget::frameRect const): Deleted.
        * platform/wpe/WidgetWPE.cpp: Removed.

2018-11-16  Chris Dumez  <cdumez@apple.com>

        [macOS] Label "prewarmed" WebContent processes in Activity Monitor
        https://bugs.webkit.org/show_bug.cgi?id=191765
        <rdar://problem/45953463>

        Reviewed by Geoffrey Garen.

        * en.lproj/Localizable.strings:

2018-11-16  Jeremy Jones  <jeremyj@apple.com>

        Enable external playback for video in element fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=190359
        rdar://problem/42560085

        Reviewed by Jer Noble.

        No new tests because we don't have a good way to test external playback.

        Any video that might be auto-pipped from element fullscreen should also enable external playback for video out.
        PiP and external playback are mutually exclusive. Instead of preventing PiP when external playback is active,
        allow PiP, but disable external playback while PiP is active.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setVideoFullscreenStandby):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setVideoFullscreenStandby):
        (WebCore::MediaPlayer::videoFullscreenStandby const):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerVideoFullscreenStandby const):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setVideoFullscreenStandby):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenStandby):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateDisableExternalPlayback):

2018-11-16  Jer Noble  <jer.noble@apple.com>

        Regression(r233865): Causes synchronous IPC in the middle of layout
        https://bugs.webkit.org/show_bug.cgi?id=188307
        <rdar://problem/42807306>

        Reviewed by Eric Carlson.

        Revert the changes added in r233865. Rather than make a syncronous call to the UIProcess to
        query whether the view has been backgrounded while (e.g.) JS has been spinning, perform the
        steps of the requestFullscreen() method on the next run loop, allowing messages from the
        UIProcess about page visibilty to be delivered first.

        * dom/Document.cpp:
        (WebCore::Document::requestFullScreenForElement):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enterFullscreen):
        * html/HTMLMediaElement.h:
        * page/ChromeClient.h:

2018-11-16  Ross Kirsling  <ross.kirsling@sony.com>

        Provide default implementation of Cursor
        https://bugs.webkit.org/show_bug.cgi?id=191772

        Reviewed by Michael Catanzaro.

        * SourcesWPE.txt:
        * platform/Cursor.cpp:
        (WebCore::Cursor::ensurePlatformCursor const):
        * platform/wpe/CursorWPE.cpp: Removed.

2018-11-16  Don Olmstead  <don.olmstead@sony.com>

        EditorWPE should be EditorLibWPE
        https://bugs.webkit.org/show_bug.cgi?id=191774

        Reviewed by Michael Catanzaro.

        The platform specific implementations of Editor are all around the
        platform's Pasteboard. Since the Pasteboard implementation is now based
        around USE(LIBWPE) EditorWPE should be renamed to EditorLibWPE.

        * SourcesWPE.txt:
        * editing/libwpe/EditorLibWPE.cpp: Renamed from Source/WebCore/editing/wpe/EditorWPE.cpp.

2018-11-16  Jeremy Jones  <jeremyj@apple.com>

        Include AirPlay destination name in AirPlay placard.
        https://bugs.webkit.org/show_bug.cgi?id=191574
        rdar://problem/45536144

        Reviewed by Eric Carlson.

        Updated existing tests.

        Include the name of the AirPlay destination in the video element's AirPlay placard.

        * Modules/modern-media-controls/controls/airplay-placard.js:
        (AirplayPlacard):
        * Modules/modern-media-controls/controls/placard.js:
        * Modules/modern-media-controls/media/placard-support.js:
        (PlacardSupport.prototype._updatePlacard):
        (PlacardSupport.prototype._updateAirPlayPlacard):
        (PlacardSupport):
        * en.lproj/modern-media-controls-localized-strings.js:

2018-11-16  Zalan Bujtas  <zalan@apple.com>

        Add DidFirstMeaningfulPaint milestone.
        https://bugs.webkit.org/show_bug.cgi?id=191754

        Reviewed by Simon Fraser.

        This milestone fires sone after the paint triggered by the first visually non-empty layout.

        * page/FrameView.cpp:
        (WebCore::FrameView::fireLayoutRelatedMilestonesIfNeeded):
        (WebCore::FrameView::firePaintRelatedMilestonesIfNeeded):
        * page/LayoutMilestone.h:

2018-11-16  Don Olmstead  <don.olmstead@sony.com>

        Provide default implementations of Image and Icon
        https://bugs.webkit.org/show_bug.cgi?id=191764

        Reviewed by Michael Catanzaro.

        Makes IconWPE and ImageWPE implementations the default.

        * Sources.txt:
        * SourcesWPE.txt:
        * platform/graphics/Icon.cpp: Renamed from Source/WebCore/platform/graphics/wpe/IconWPE.cpp.
        * platform/graphics/Image.cpp:
        (WebCore::BitmapImage::invalidatePlatformData): Placed here for consistency with implementing ports.
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/wpe/ImageWPE.cpp: Removed.

2018-11-16  Brent Fulgham  <bfulgham@apple.com>

        [Win] Reduce the use of WKSI library calls: CFNetwork
        https://bugs.webkit.org/show_bug.cgi?id=191718
        <rdar://problem/46108732>

        Reviewed by Alex Christensen.

        Remove custom WKSI CFNetwork calls, since the SPI is already documented in PAL. Just
        make the same calls on Windows, like we did for iOS and macOS back in 2017.

        Stop including WebKitSystemInterface.h for files that used to rely on it
        for font-related features.
        
        Tested by existing Windows regression tests. There should be no change in behavior.

        * platform/graphics/win/FontCacheWin.cpp:
        * platform/graphics/win/FontCustomPlatformData.cpp:
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        * platform/network/cf/CookieStorageCFNet.cpp:
        * platform/network/cf/CredentialStorageCFNet.cpp:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::createPrivateStorageSession):
        (WebCore::NetworkStorageSession::switchToNewTestingSession):
        (WebCore::NetworkStorageSession::ensureSession):
        * platform/network/cf/ResourceError.h:
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::getSSLPeerCertificateData):
        (WebCore::setSSLPeerCertificateData):
        (WebCore::ResourceError::getSSLPeerCertificateDataBytePtr):
        (WebCore::ResourceError::platformLazyInit):
        (WebCore::ResourceError::cfError const):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::setClientCertificateInSSLProperties):
        (WebCore::ResourceHandle::createCFURLConnection):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:

2018-11-16  Timothy Hatcher  <timothy@apple.com>

        Add html{color:text} to the simpleUserAgentStyleSheet on macOS.
        https://bugs.webkit.org/show_bug.cgi?id=191760

        Reviewed by Antti Koivisto.

        * css/CSSDefaultStyleSheets.cpp: Added html{color:text} to simpleUserAgentStyleSheet inside
        a PLATFORM(MAC) copy of the string.

2018-11-16  Jer Noble  <jer.noble@apple.com>

        An early return from updateSchedulingInfo can leave some variables uninitialized.
        https://bugs.webkit.org/show_bug.cgi?id=191755
        <rdar://problem/39910089>

        Reviewed by Brent Fulgham.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::process):
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::updateSchedulingInfo):
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::process):

2018-11-16  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Ignore caps notifications when tearing down the pipeline
        https://bugs.webkit.org/show_bug.cgi?id=191578

        Reviewed by Xabier Rodriguez-Calvar.

        Changing the demuxer to READY state (which is done only in the main
        thread) triggers the unlinking of its srcpads, which in turns emits a
        caps change notification in the previously linked element since they
        become unnegotiated again.

        We are not interested in caps notifications in these cases, so let's
        just ignore caps notifications emitted from the main thread.

        This fixes an assertion failure in the debug builds.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::AppendPipeline):

2018-11-16  Sihui Liu  <sihui_liu@apple.com>

        Storing blobs in IDB on iOS: "Error preparing blob/file"
        https://bugs.webkit.org/show_bug.cgi?id=188438
        <rdar://problem/43097279>

        Reviewed by Alex Christensen.

        Grant sandbox extension of temp folder to network process, because we suggested network process had access to 
        the folder on iOS device but it didn't. 

        This makes some existing tests about IDB blob pass on iOS device.

        * Modules/indexeddb/server/IDBBackingStore.h:
        * Modules/indexeddb/server/SQLiteIDBTransaction.cpp:
        (WebCore::IDBServer::SQLiteIDBTransaction::moveBlobFilesIfNecessary):
        (WebCore::IDBServer::SQLiteIDBTransaction::deleteBlobFilesIfNecessary):
        (WebCore::IDBServer::SQLiteIDBTransaction::abort):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

2018-11-16  Don Olmstead  <don.olmstead@sony.com>

        Add USE(LIBWPE) to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=191401

        Reviewed by Michael Catanzaro.

        No new tests. No change in behavior.

        Migrates all PLATFORM(WPE) code that calls into wpe_* APIs to
        USE(LIBWPE) instead.

        Renames classes and files to use the suffix LibWPE.

        * PlatformWPE.cmake:
        * SourcesWPE.txt:
        * platform/Pasteboard.h:
        * platform/PasteboardStrategy.h:
        * platform/PlatformKeyboardEvent.h:
        * platform/PlatformPasteboard.h:
        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::createPlatformDisplay):
        * platform/graphics/PlatformDisplay.h:
        * platform/graphics/egl/GLContextEGL.h:
        * platform/graphics/egl/GLContextEGLLibWPE.cpp: Renamed from Source/WebCore/platform/graphics/egl/GLContextEGLWPE.cpp.
        (WebCore::GLContextEGL::createWPEContext):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::ensureGstGLContext):
        * platform/graphics/libwpe/PlatformDisplayLibWPE.cpp: Renamed from Source/WebCore/platform/graphics/wpe/PlatformDisplayWPE.cpp.
        (WebCore::PlatformDisplayLibWPE::create):
        (WebCore::PlatformDisplayLibWPE::PlatformDisplayLibWPE):
        (WebCore::PlatformDisplayLibWPE::~PlatformDisplayLibWPE):
        (WebCore::PlatformDisplayLibWPE::initialize):
        * platform/graphics/libwpe/PlatformDisplayLibWPE.h: Renamed from Source/WebCore/platform/graphics/wpe/PlatformDisplayWPE.h.
        * platform/libwpe/PasteboardLibWPE.cpp: Renamed from Source/WebCore/platform/wpe/PasteboardWPE.cpp.
        * platform/libwpe/PlatformKeyboardEventLibWPE.cpp: Renamed from Source/WebCore/platform/wpe/PlatformKeyboardEventWPE.cpp.
        * platform/libwpe/PlatformPasteboardLibWPE.cpp: Renamed from Source/WebCore/platform/wpe/PlatformPasteboardWPE.cpp.

2018-11-16  Zalan Bujtas  <zalan@apple.com>

        [iOS] 2 subsequent taps are required to trigger certain tasks on the desktop version of YouTube.com (hover vs click).
        https://bugs.webkit.org/show_bug.cgi?id=191712
        <rdar://problem/45612900>

        Reviewed by Simon Fraser.

        In handleSyntheticClick() we use WKContentObservation to figure out whether the tap should be treated as a hover or a click.
        In general, if the mouse-move event triggers a visible content change, we assume we hit a hover-like drop down menu (or something similar)
        and no need to dispatch a click event.
        The idea here is that if the new content (result of the mouse-move event) does not respond to mouse click, it is most likely
        only for tooltip-like reasons and it's ok to proceed with the click event.

        Test: fast/events/touch/ios/click-instead-of-hover-simple.html

        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::CheckForVisibilityChange::~CheckForVisibilityChange):

2018-11-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for out-of-flow positioned boxes
        https://bugs.webkit.org/show_bug.cgi?id=191726

        Reviewed by Antti Koivisto.

        While laying out formatting context roots (inline-block, floats) in an inline formatting context, we need to make sure
        that their out-of-flow descendants get laid out as well.

        Test: fast/inline/simple-inline-with-out-of-flow-descendant.html

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const):
        * layout/layouttree/LayoutTreeBuilder.cpp: This was returning the wrong context root when the container was also a context root.
        (WebCore::Layout::TreeBuilder::createSubTree):

2018-11-16  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Add API to enable/disable device mocks
        https://bugs.webkit.org/show_bug.cgi?id=191699

        This basically us to test MediaStream/WebRTC support without
        requiring cameras or microphones and is quite useful.

        Also fix the GStreamerAudioMock by:
          - Stop setting `leaky-upstream` on the GStreamerCapturer queue,
            this was usefull when we were trying to bring the MediaStream
            sources inside the main pipeline, it is not the case anymore
            (and not doable with latest version of LibWebRTC).
          - Use a 'ticks' wave on the gstreamer audiotestsrc so the test
            stream is similar to what Apple port does.

        Reviewed by Xabier Rodriguez-Calvar.

        The mocks are already tested and the API is really simple.

        * platform/mediastream/gstreamer/GStreamerAudioCapturer.cpp:
        (WebCore::GStreamerAudioCapturer::createSource):
        * platform/mediastream/gstreamer/GStreamerAudioCapturer.h:
        * platform/mediastream/gstreamer/GStreamerCapturer.cpp:
        (WebCore::GStreamerCapturer::addSink):
        * platform/mediastream/gstreamer/GStreamerCapturer.h:

2018-11-16  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][MediaStream] Handle track addition and removal
        https://bugs.webkit.org/show_bug.cgi?id=191599

        Reviewed by Xabier Rodriguez-Calvar.

        Test: fast/mediastream/MediaStream-video-element-remove-track.html

        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (WebCore::WebKitMediaStreamObserver::~WebKitMediaStreamObserver):
        (WebCore::WebKitMediaStreamObserver::WebKitMediaStreamObserver):
        (WebCore::webkitMediaStreamSrcFinalize):
        (WebCore::webkitMediaStreamSrcChangeState):
        (WebCore::webkit_media_stream_src_init):
        (WebCore::webkitMediaStreamSrcSetupSrc):
        (WebCore::webkitMediaStreamSrcAddTrack):
        (WebCore::webkitMediaStreamSrcRemoveTrackByType):
        (WebCore::webkitMediaStreamSrcSetStream):

2018-11-16  Zan Dobersek  <zdobersek@igalia.com>

        ScalableImageDecoder: don't forcefully decode image data when querying frame completeness, duration
        https://bugs.webkit.org/show_bug.cgi?id=191354

        Reviewed by Michael Catanzaro.

        ScalableImageDecoder::frameIsCompleteAtIndex() should only check the
        index validity and, if the index is valid, check for completeness of the
        corresponding frame. ScalableImageDecoder::frameDurationAtIndex() should
        also only retrieve duration for already-complete frames.

        Both methods avoid calling ScalableImageDecoder::frameBufferAtIndex()
        as that method goes on and decodes image data to determine specific
        information. The ImageSource class that's querying this information
        doesn't anticipate this, and doesn't handle the increased memory
        consumption of the decoded data, leaving MemoryCache in the blind about
        the image resource's actual amount of consumed memory. ImageSource can
        instead gracefully handle any incomplete frame by marking the decoding
        status for this frame as only partial.

        * platform/image-decoders/ScalableImageDecoder.cpp:
        (WebCore::ScalableImageDecoder::frameIsCompleteAtIndex const):
        (WebCore::ScalableImageDecoder::frameHasAlphaAtIndex const):
        (WebCore::ScalableImageDecoder::frameDurationAtIndex const):

2018-11-16  Antoine Quint  <graouts@apple.com>

        PointerEvents should not require touch event listeners to be registered
        https://bugs.webkit.org/show_bug.cgi?id=191333
        <rdar://problem/45857523>

        Reviewed by Dean Jackson.

        Tests: pointerevents/ios/pointer-events-dispatch-on-touch.html
               pointerevents/ios/pointer-events-prevent-default.html

        * dom/EventNames.h:
        (WebCore::EventNames::isTouchEventType const):
        (WebCore::EventNames::touchAndPointerEventNames const):
        (WebCore::EventNames::touchEventNames const): Deleted.
        * dom/Node.cpp:
        (WebCore::Node::moveNodeToNewDocument):

2018-11-15  Zalan Bujtas  <zalan@apple.com>

        [iOS] Do not get stuck in indeterminate content observation state.
        https://bugs.webkit.org/show_bug.cgi?id=191719

        Reviewed by Simon Fraser.

        Reset the _WKContentChange flag to WKContentNoChange when the last observing timer is removed and we are in
        the "can't decide yet if it's a hover or click" state.
        This bug prevents us from firing click event when JS installs and removes the same set of timer(s) during mouse-move dispatch.

        Test: fast/events/touch/ios/stuck-with-hover-state.html

        * platform/ios/wak/WKContentObservation.cpp:
        (WebThreadRemoveObservedContentModifier):

2018-11-15  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r238090) Composited iframes that resize from zero don't show
        https://bugs.webkit.org/show_bug.cgi?id=191733
        rdar://problem/46107764

        Reviewed by Zalan Bujtas.
        
        A zero-sized iframe whose contents are composited should not trigger compositing in the
        parent document (see code in requiresCompositingForFrame()), but when the <iframe> element
        was resized without a style change (e.g. because it's width: 100%, height: 100% and the
        parent resizes), there was no code that triggered a compositing update.

        Fix by having RenderLayer::updateLayerPosition() trigger an update when the size changes,
        for a RenderWidget whose contents are composited.

        Test: compositing/iframes/resize-from-zero-size.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):

2018-11-15  Simon Fraser  <simon.fraser@apple.com>

        Overlay with -webkit-overflow-scrolling:touch doesn't become scrollable after added text makes it taller
        https://bugs.webkit.org/show_bug.cgi?id=158342
        rdar://problem/26652811

        Reviewed by Zalan Bujtas.
        
        Patch partly by Frédéric Wang.

        This commit fixes an issue when resizing the content of a -webkit-overflow-scrolling: touch
        overflow node on iOS. Indeed, the RenderLayerBacking's scrolling layer may not be properly
        created and hence the UIProcess receives a null UIScrollView pointer. This triggers an
        assertion in debug mode and prevents the user from scrolling the overflow node in release
        mode. This was partially fixed by the refactoring of bug 90342 but this commit addresses
        the remaining issues by forcing a configuration update after layout in order to ensure that
        RenderLayerBacking's scrolling layer is available. For an overflow element that is not yet
        composited, trigger a post-layout update that is necessary to check if we need to make it
        composited when it gains scrollable overflow.

        Tests: fast/scrolling/ios/change-scrollability-on-content-resize-nested.html
               fast/scrolling/ios/change-scrollability-on-content-resize.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout): Force a configuration update so that
        RenderLayerCompositor::updateBackingAndHierarchy will later instantiate
        RenderLayerBacking::m_scrollingLayer.

2018-11-15  Fujii Hironori  <Hironori.Fujii@sony.com>

        [curl] warning: delete called on non-final 'WebCore::CurlDownload' that has virtual functions but non-virtual destructor [-Wdelete-non-virtual-dtor]
        https://bugs.webkit.org/show_bug.cgi?id=191582

        Reviewed by Alex Christensen.

        No new tests because there's no behaviour change.

        * platform/network/curl/CurlDownload.h: Marked CurlDownload final.

2018-11-15  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r238244.

        Caused High Sierra test runs to fail early with 50 crashes and
        casued 25 API failures.

        Reverted changeset:

        "[css-logical] Implement flow-relative margin, padding and
        border shorthands"
        https://bugs.webkit.org/show_bug.cgi?id=188697
        https://trac.webkit.org/changeset/238244

2018-11-15  Jer Noble  <jer.noble@apple.com>

        AVKit will set videoGravity to a nil string when building against iosmac
        https://bugs.webkit.org/show_bug.cgi?id=191573

        Reviewed by Dean Jackson.

        Workaround AVKit behavior by treating nil videoGravity as the default,
        which is AVLayerVideoGravityResizeAspect.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerLayer setVideoGravity:]):

2018-11-15  Brent Fulgham  <bfulgham@apple.com>

        [Win] Reduce the use of WKSI library calls: Font Handling
        https://bugs.webkit.org/show_bug.cgi?id=191701
        <rdar://problem/46104809>

        Reviewed by Myles C. Maxfield.

        Move the old Windows font handling code out of WKSI to our regular
        repository. We now handle SPI differently, and don't need to keep
        these implementations in a separate library. This should also help
        avoid the somewhat frequent build failures caused when WKSI is not
        updated in sync with WebKit.

        Tested by existing Windows test cases.

        * platform/graphics/FontCascade.h:
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::FontCascade::drawGlyphs):
        (WebCore::FontCascade::setFontSmoothingLevel):
        (WebCore::setCGFontSmoothingStyle):
        (WebCore::FontCascade::setFontSmoothingStyle):
        (WebCore::FontCascade::setFontSmoothingContrast):
        (WebCore::clearTypeContrast):
        (WebCore::FontCascade::systemFontSmoothingChanged):
        (WebCore::FontCascade::setCGContextFontRenderingStyle):
        (WebCore::renderingStyleForFont):
        (WebCore::FontCascade::getGlyphAdvances):
        * platform/graphics/win/GlyphPageTreeNodeCGWin.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::drawDotsForDocumentMarker):
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::Font::platformWidthForGlyph const):
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::adjustMediaSliderThumbSize):

2018-11-15  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Use a real nonce for CTAPHID_INIT
        https://bugs.webkit.org/show_bug.cgi?id=191533
        <rdar://problem/46103502>

        Reviewed by Brent Fulgham.

        New tests are added into existing test files.

        * Modules/webauthn/fido/FidoConstants.h:

2018-11-15  Justin Fan  <justin_fan@apple.com>

        [WebGPU] WebGPUCommandBuffer prototype
        https://bugs.webkit.org/show_bug.cgi?id=191663

        Reviewed by Dean Jackson.

        Begin implementation of WebGPUCommandBuffers as well as GPUQueues (MTLCommandBuffer, MTLCommandQueue).

        Test: webgpu/command-buffers.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/webgpu/GPUCommandBuffer.h: Added. Wrapper class around a MTLCommandBuffer.
        * Modules/webgpu/GPUDevice.cpp:
        (WebCore::GPUDevice::createCommandBuffer): Added.
        (WebCore::GPUDevice::getQueue): Returns RefPtr to the device's singleton queue.
        * Modules/webgpu/GPUDevice.h: Now manages the device's GPUQueue.
        (WebCore::GPUDevice::platformDevice const):
        * Modules/webgpu/GPUQueue.h: Added. Wrapper class around a MTLCommandQueue.
        (WebCore::GPUQueue::platformQueue const):
        * Modules/webgpu/GPURenderPipeline.h: Moved from Source/WebCore/Modules/webgpu/cocoa/GPURenderPipeline.h.
        (WebCore::GPURenderPipeline::platformRenderPipeline const):
        * Modules/webgpu/GPUShaderModule.h:
        (WebCore::GPUShaderModule::platformShaderModule const):
        * Modules/webgpu/GPUSwapChain.h: Moved from Source/WebCore/Modules/webgpu/cocoa/GPUSwapChain.h.
        (WebCore::GPUSwapChain::platformLayer const):
        * Modules/webgpu/WebGPUCommandBuffer.cpp: Added. Web interface for a GPU device's command buffer.
        (WebCore::WebGPUCommandBuffer::create):
        (WebCore::WebGPUCommandBuffer::WebGPUCommandBuffer):
        * Modules/webgpu/WebGPUCommandBuffer.h: Added.
        * Modules/webgpu/WebGPUCommandBuffer.idl: Added.
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createCommandBuffer const): Added.
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDevice.idl:
        * Modules/webgpu/cocoa/GPUCommandBufferMetal.mm: Added. MTLCommandBuffer impl for GPUCommandBuffer.
        (WebCore::GPUCommandBuffer::create): Create a MTLCommandBuffer from the MTLCommandQueue.
        (WebCore::GPUCommandBuffer::GPUCommandBuffer):
        * Modules/webgpu/cocoa/GPUDeviceMetal.mm:
        (WebCore::GPUDevice::GPUDevice):
        * Modules/webgpu/cocoa/GPUQueueMetal.mm: Added. MTLCommandQueue impl for GPUQueue.
        (WebCore::GPUQueue::create):
        (WebCore::GPUQueue::GPUQueue):
        * Modules/webgpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::GPURenderPipeline::GPURenderPipeline):
        * Modules/webgpu/cocoa/GPUShaderModuleMetal.mm:
        (WebCore::GPUShaderModule::create):
        (WebCore::GPUShaderModule::GPUShaderModule):
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2018-11-15  Oriol Brufau  <obrufau@igalia.com>

        [css-logical] Implement flow-relative margin, padding and border shorthands
        https://bugs.webkit.org/show_bug.cgi?id=188697

        Reviewed by Simon Fraser and Antti Koivisto.

        Tests: imported/w3c/web-platform-tests/css/css-logical/logical-box-border-color.html
               imported/w3c/web-platform-tests/css/css-logical/logical-box-border-shorthands.html
               imported/w3c/web-platform-tests/css/css-logical/logical-box-border-style.html
               imported/w3c/web-platform-tests/css/css-logical/logical-box-border-width.html
               imported/w3c/web-platform-tests/css/css-logical/logical-box-margin.html
               imported/w3c/web-platform-tests/css/css-logical/logical-box-padding.html
               webexposed/css-properties-as-js-properties.html
               webexposed/css-properties-behind-flags.html
               webexposed/css-property-listing.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        Allow the new properties to serialize their computed value.

        (WebCore::ComputedStyleExtractor::getCSSPropertyValuesFor2SidesShorthand):
        (WebCore::ComputedStyleExtractor::getCSSPropertyValuesFor4SidesShorthand):
        * css/CSSComputedStyleDeclaration.h:
        Rename getCSSPropertyValuesForSidesShorthand to getCSSPropertyValuesFor4SidesShorthand,
        and add analogous getCSSPropertyValuesFor2SidesShorthand for serializing 2-sided
        shorthands.

        * css/CSSProperties.json:
        Add the new properties behind the CSSLogicalEnabled runtime flag.

        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::supportedPropertyNames const):
        Prevent CSS properties disabled behind a runtime flag from being exposed in
        style declarations.

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue const):
        Allow the new properties to serialize their specified value.

        (WebCore::StyleProperties::get2Values const):
        Add get2Values, analogous to get4Values, for serializing 2-sided shorthands.

        (WebCore::StyleProperties::borderPropertyValue const):
        Allow borderPropertyValue to serialize arbitrary multi-sided border shorthands
        corresponding to width, style and color.

        (WebCore::MutableStyleProperties::setProperty):
        Prevent CSS properties disabled behind a runtime flag from being set a value.

        (WebCore::StyleProperties::asText const):
        Allow the new properties to be serialized in cssText.
        Prevent CSS shorthands disabled behind a runtime flag from appearing in cssText,
        and serialize the longhands instead. Note that there could be another shorthand
        available which is enabled, but a proper solution would require bug 190496.

        * css/StyleProperties.h:
        Update declarations of borderPropertyValue and get2Values.

        * css/makeprop.pl:
        (addProperty):
        Add isEnabledCSSProperty function for checking that a CSS property is not
        disabled behind a runtime flag.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::cssPropertyID):
        Prevent CSS properties disabled behind a runtime flag from being exposed in
        computed styles.

        (WebCore::CSSPropertyParser::addProperty):
        Prevent CSS properties disabled behind a runtime flag from being set a value.

        (WebCore::CSSPropertyParser::consumeBorder):
        Change consumeBorder to provide the caller with the parsed values instead of
        setting properties. Then the caller can decide to which properties the values
        should be set, and whether border-image should be reset or not.

        (WebCore::CSSPropertyParser::consume2ValueShorthand):
        (WebCore::CSSPropertyParser::consume4ValueShorthand):
        Rename consume4Values to consume4ValueShorthand, and add analogous
        consume2ValueShorthand for parsing shorthands with two longhands.

        (WebCore::CSSPropertyParser::parseShorthand):
        Allow the new properties to be parsed.

        * css/parser/CSSPropertyParser.h:
        Update declarations of consumeBorder, consume2ValueShorthand and
        consume4ValueShorthand.

        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        Prevent CSS properties disabled behind a runtime flag from being exposed in
        the CSS inspector tool.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setCSSLogicalEnabled):
        (WebCore::RuntimeEnabledFeatures::cssLogicalEnabled const):
        Add the CSSLogicalEnabled runtime flag.

2018-11-15  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r238220.

        Introduced failing tests to iOS and is slowing down EWS

        Reverted changeset:

        "[css-grid] Consider scrollbars in
        populateGridPositionsForDirection()"
        https://bugs.webkit.org/show_bug.cgi?id=191656
        https://trac.webkit.org/changeset/238220

2018-11-15  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] PublicKeyCredentialCreationOptions::AuthenticatorSelectionCriteria::AuthenticatorAttachment should be optional
        https://bugs.webkit.org/show_bug.cgi?id=191522

        Reviewed by Brent Fulgham.

        Accordign to the WebIDL, AuthenticatorSelectionCriteria::AuthenticatorAttachment should be optional.
        https://www.w3.org/TR/webauthn/#dictdef-authenticatorselectioncriteria

        Covered by existing tests.

        * Modules/webauthn/PublicKeyCredentialCreationOptions.h:
        (WebCore::PublicKeyCredentialCreationOptions::AuthenticatorSelectionCriteria::decode):

2018-11-15  Ross Kirsling  <ross.kirsling@sony.com>

        DragImage should have a complete default implementation
        https://bugs.webkit.org/show_bug.cgi?id=191666

        Reviewed by Dean Jackson.

        Move WPE's stub implementation down into the base implementation file.

        * SourcesWPE.txt:
        * platform/DragImage.cpp:
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImageFilename):
        (WebCore::createDragImageForLink):
        * platform/wpe/DragImageWPE.cpp: Removed.

2018-11-15  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] UserHandle can be null
        https://bugs.webkit.org/show_bug.cgi?id=191521

        Reviewed by Alex Christensen.

        According to the newest spec as of 7 August, 2018: https://www.w3.org/TR/webauthn/#conforming-authenticators-u2f.
        UserHandle can now be null.

        Covered by existing tests.

        * Modules/webauthn/AuthenticatorAssertionResponse.h:
        (WebCore::AuthenticatorAssertionResponse::create):
        (WebCore::AuthenticatorAssertionResponse::userHandle const):
        (WebCore::AuthenticatorAssertionResponse::AuthenticatorAssertionResponse):
        * Modules/webauthn/AuthenticatorAssertionResponse.idl:
        * Modules/webauthn/PublicKeyCredential.cpp:
        (WebCore::PublicKeyCredential::tryCreate):
        * Modules/webauthn/PublicKeyCredentialData.h:
        (WebCore::PublicKeyCredentialData::encode const):
        (WebCore::PublicKeyCredentialData::decode):
        * Modules/webauthn/fido/DeviceResponseConverter.cpp:
        (fido::readCTAPGetAssertionResponse):

2018-11-15  Youenn Fablet  <youenn@apple.com>

        Modernize RTCPeerConnection handling of pendingActivity
        https://bugs.webkit.org/show_bug.cgi?id=191661

        Reviewed by Eric Carlson.

        makePendingActivity is the modern way to handle set/unset of pending activity.
        No change of behavior.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::create):
        (WebCore::RTCPeerConnection::doStop):
        * Modules/mediastream/RTCPeerConnection.h:

2018-11-15  Keith Rollin  <krollin@apple.com>

        Delete old .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=191669
        <rdar://problem/46081994>

        Reviewed by Chris Dumez.

        .xcfilelist files were created and added to the Xcode project files in
        https://trac.webkit.org/changeset/238008/webkit. However, they caused
        build issues and they were removed from the Xcode projects in
        https://trac.webkit.org/changeset/238055/webkit. This check-in removes
        the files from the repository altogether. They'll ultimately be
        replaced with new files with names that indicate whether the
        associated files are inputs to the Run Script phase or are files
        created by the Run Script phase.

        No new tests -- no changed functionality.

        * DerivedSources.xcfilelist: Removed.
        * UnifiedSources.xcfilelist: Removed.

2018-11-15  Youenn Fablet  <youenn@apple.com>

        Update RTCPeerConnection JS built-ins to be closer to specWe
        https://bugs.webkit.org/show_bug.cgi?id=191665

        Reviewed by Eric Carlson.

        Simplify JS built-ins since we no longer need to support callback versions of the API.
        Make sure to have the right number of parameters in the JS built-in functions.
        Make some simplification to the code.
        Covered by existing tests and rebased test.

        * Modules/mediastream/RTCPeerConnection.js:
        (createOffer):
        (createAnswer):
        (setLocalDescription):
        (setRemoteDescription):
        (addIceCandidate):
        * Modules/mediastream/RTCPeerConnectionInternals.js:
        (enqueueOperation):
        (callbacksAndDictionaryOverload): Deleted.

2018-11-15  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION(r238090): Composited iframe contents disappear after switching tabs in Safari
        https://bugs.webkit.org/show_bug.cgi?id=191673
        rdar://problem/46083440

        Reviewed by Antti Koivisto.

        Switching tabs in Safari triggers the "setIsInWindow" code path, that detaches the layer
        tree for every Frame. They get re-attached on tab show, and for subframes this involves
        the triggering of a fake style recalc in the parent document via scheduleInvalidateStyleAndLayerComposition().
        
        The style diff that's sent to RenderLayerCompositor::layerStyleChanged() as a result of that
        fake style recalc is RecompositeLayer, but the code was failing to trigger the necessary
        layer configuration update that gets iframe layers parented.
        
        This stop-gap patch triggers layer config updates on every RecompositeLayer diff. A future
        patch will optimize this, and add a layout test.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerStyleChanged):

2018-11-15  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Skip non-inflow boxes while splitting the inline runs.
        https://bugs.webkit.org/show_bug.cgi?id=191690

        Reviewed by Antti Koivisto.

        Skip all non-inflow boxes (floats, out-of-flow positioned elements). They don't participate in the inline run context.

        * layout/Verification.cpp:
        (WebCore::Layout::LayoutState::verifyAndOutputMismatchingLayoutTree const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::splitInlineRunIfNeeded const):

2018-11-15  Zalan Bujtas  <zalan@apple.com>

        [LFC] FormattingContext base class should not declare computeStaticPosition.
        https://bugs.webkit.org/show_bug.cgi?id=191683

        Reviewed by Antti Koivisto.

        Apparently only BlockFormattingContext uses it.

        * layout/FormattingContext.h:
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeStaticPosition const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:

2018-11-14  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for in-flow positioned inline boxes.
        https://bugs.webkit.org/show_bug.cgi?id=191672

        Reviewed by Antti Koivisto.

        We might offset the in-flow positioned runs differently once runs are moved over to the display tree.

        Test: fast/inline/simple-inline-inflow-positioned.html

        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingComplexLineInformationIfNeeded):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::splitInlineRunsIfNeeded const):
        (WebCore::Layout::InlineFormattingContext::postProcessInlineRuns const):
        (WebCore::Layout::InlineFormattingContext::placeInFlowPositionedChildren const):
        (WebCore::Layout::InlineFormattingContext::collectInlineContentForSubtree const):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineRun.h:
        (WebCore::Layout::InlineRun::moveVertically):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::outputInlineRuns):

2018-11-15  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Add support for sending silence or silencing an incoming track
        https://bugs.webkit.org/show_bug.cgi?id=191631

        Reviewed by Xabier Rodriguez-Calvar.

        This will be tested once webkit.org/b/186933 is implemented.

        * platform/mediastream/gstreamer/RealtimeIncomingAudioSourceLibWebRTC.cpp:
        (WebCore::RealtimeIncomingAudioSourceLibWebRTC::OnData):
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp:
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::pullAudioData):

2018-11-15  Antti Koivisto  <antti@apple.com>

        REGRESSION(r238178): fast/forms/access-key-mutated.html and fast/forms/access-key-case-insensitive.html are timing out
        https://bugs.webkit.org/show_bug.cgi?id=191642

        Reviewed by Zalan Bujtas.

        Invalidate access key map even when thorttling style recalcs.

        * dom/Document.cpp:
        (WebCore::Document::scheduleStyleRecalc):

2018-11-15  Antti Koivisto  <antti@apple.com>

        Remove fonts from CSSFontFaceSet safely
        https://bugs.webkit.org/show_bug.cgi?id=191676

        Reviewed by Zalan Bujtas.

        Test: fast/text/font-face-set-remove-safely.html

        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::remove):

2018-11-15  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Consider scrollbars in populateGridPositionsForDirection()
        https://bugs.webkit.org/show_bug.cgi?id=191656

        Reviewed by Javier Fernandez.

        We never care about scrollbars in RenderGrid::populateGridPositionsForDirection(),
        that's fine if the scrollbars are at the end (e.g. on the right in horizontal writing mode and LTR direction)
        but it causes problems when they're at the beginning (e.g. on the left in horizontal writing mode and RTL direction).

        The patch modifies the method so it takes into account scrollbar size
        in order to compute the position of the columns/rows depending on the direction and the writing mode.

        Tests: imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-001.html
               imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001.html
               imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::populateGridPositionsForDirection):

2018-11-14  Keith Rollin  <krollin@apple.com>

        Move scripts for Derived and Unified Sources to external files
        https://bugs.webkit.org/show_bug.cgi?id=191670
        <rdar://problem/46082278>

        Reviewed by Keith Miller.

        Move the scripts in the Generate Derived Sources and Generate Unified
        Sources Run Script phases from the Xcode projects to external shell
        script files. Then invoke those scripts from the Run Script phases.
        This refactoring is being performed to support later work that will
        invoke these scripts in other contexts.

        The scripts were maintained as-is when making the move. I did a little
        reformatting and added 'set -e' to the top of each file, but that's
        it.

        No new tests -- no changed functionality.

        * Scripts/generate-derived-sources.sh: Added.
        * Scripts/generate-unified-sources.sh: Added.
        * WebCore.xcodeproj/project.pbxproj:

2018-11-14  Keith Rollin  <krollin@apple.com>

        Fix #end vs. #endif typo.
        https://bugs.webkit.org/show_bug.cgi?id=191668
        <rdar://problem/46081704>

        Reviewed by Alexey Proskuryakov.

        Source/WebCore/SourcesCocoa.txt had a #end that should have been a
        #endif. Fix this, an add a check to generate-unified-source-bundles.rb
        to detect similar typos.

        No new tests -- no changed functionality.

        * SourcesCocoa.txt:

2018-11-14  Keith Rollin  <krollin@apple.com>

        Remove VideoFullscreenLayerManager.mm from WebCore/SourcesCocoa.txt
        https://bugs.webkit.org/show_bug.cgi?id=191667
        <rdar://problem/46081286>

        Reviewed by Eric Carlson.

        VideoFullscreenLayerManager.mm no longer exists.

        No new tests -- No changed functionality.

        * SourcesCocoa.txt:

2018-11-14  Timothy Hatcher  <timothy@apple.com>

        Enabled dark mode CSS support by default.
        https://bugs.webkit.org/show_bug.cgi?id=191609
        rdar://problem/46046861

        Reviewed by Megan Gardner.

        * page/RuntimeEnabledFeatures.h: Set m_isDarkModeCSSEnabled to true.

2018-11-14  Timothy Hatcher  <timothy@apple.com>

        Default the view background color and text color to different values when in dark mode.
        https://bugs.webkit.org/show_bug.cgi?id=191607
        rdar://problem/46045854

        Reviewed by Dean Jackson.

        Test: css-dark-mode/default-colors.html

        * css/html.css:
        (html): Set color: text on macOS.
        * dom/Document.cpp:
        (WebCore::Document::processSupportedColorSchemes): Call recalculateBaseBackgroundColor().
        * editing/EditingStyle.cpp:
        (WebCore::caretColorFromStyle): Added.
        (WebCore::EditingStyle::prepareToApplyAt): Use equalIgnoringSemanticColor. Check for
        caret-color directly since removeEquivalentProperties fails with semantic colors.
        (WebCore::extractPropertiesNotIn): Use equalIgnoringSemanticColor. Check for caret-color
        directly since removeEquivalentProperties fails with semantic colors.
        * page/Frame.cpp:
        (WebCore::Frame::createView): Drop backgroundColor.
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::recalculateBaseBackgroundColor): Added.
        (WebCore::FrameView::updateBackgroundRecursively): Drop backgroundColor argument.
        Calculate the backgroundColor based on the transparent argument only.
        * page/FrameView.h:
        * platform/graphics/Color.h:
        (WebCore::equalIgnoringSemanticColor): Added for EditingStyle.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange): Call recalculateBaseBackgroundColor().
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::shouldDumpPropertyForLayer const): Use isWhiteColor()
        since it ignores the semantic color flag.
        * testing/Internals.cpp:
        (WebCore::Internals::setViewIsTransparent): Drop backgroundColor.
        (WebCore::Internals::viewBaseBackgroundColor): Added.
        * testing/Internals.h:
        * testing/Internals.idl: Added viewBaseBackgroundColor.

2018-11-14  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Code quality concerns raised for 191291: [WebGPU] Experimental prototype for WebGPURenderPipeline and WebGPUSwapChain
        https://bugs.webkit.org/show_bug.cgi?id=191383

        Reviewed by Dean Jackson.

        Covered by existing WebGPU tests introduced in original patch.

        * Modules/webgpu/GPUDevice.h:
        * Modules/webgpu/GPUPipelineStageDescriptor.h:
        * Modules/webgpu/GPURenderPipelineDescriptor.h: Now a base struct with a guaranteed vertex stage member.
        (): Refactored into enum class.
        (WebCore::GPURenderPipelineDescriptor::GPURenderPipelineDescriptor): Removed in favor of init-list construction.
        (WebCore::GPURenderPipelineDescriptor::primitiveTopology): Now a proper enum class member.
        * Modules/webgpu/GPUShaderModule.h:
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createRenderPipeline const):
        * Modules/webgpu/WebGPUShaderModule.h:
        (WebCore::WebGPUShaderModule::module const):
        * Modules/webgpu/WebGPUShaderStage.h: Replaced enum with constants to better reflect IDL.
        * Modules/webgpu/cocoa/GPURenderPipeline.h:
        * Modules/webgpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::setFunctionsForPipelineDescriptor):
        (WebCore::GPURenderPipeline::create):
        * Modules/webgpu/cocoa/GPUSwapChain.h:
        * WebCore.xcodeproj/project.pbxproj: Removed GPUPipelineDescriptorBase.

2018-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Pass Inspector::FrontendChannel as a reference connect/disconnect methods
        https://bugs.webkit.org/show_bug.cgi?id=191612

        Reviewed by Matt Baker.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::show):
        * inspector/InspectorController.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::connect):
        (WebCore::PageDebuggable::disconnect):
        * page/PageDebuggable.h:
        * testing/Internals.cpp:
        (WebCore::InspectorStubFrontend::InspectorStubFrontend):
        (WebCore::InspectorStubFrontend::closeWindow):
        * workers/service/context/ServiceWorkerDebuggable.cpp:
        (WebCore::ServiceWorkerDebuggable::connect):
        (WebCore::ServiceWorkerDebuggable::disconnect):
        * workers/service/context/ServiceWorkerDebuggable.h:
        * workers/service/context/ServiceWorkerInspectorProxy.cpp:
        (WebCore::ServiceWorkerInspectorProxy::connectToWorker):
        (WebCore::ServiceWorkerInspectorProxy::disconnectFromWorker):
        * workers/service/context/ServiceWorkerInspectorProxy.h:

2018-11-14  Timothy Hatcher  <timothy@apple.com>

        Update prefers-color-scheme media query matching based on GitHub issue #3278.
        https://bugs.webkit.org/show_bug.cgi?id=191654
        rdar://problem/46074307

        Reviewed by Simon Fraser.

        Test: css-dark-mode/prefers-color-scheme.html

        * css/MediaQueryEvaluator.cpp:
        (WebCore::prefersColorSchemeEvaluate): Return true when there is no value. Return false
        for `no-preference` since there is no macOS option for no user preference.
        * css/MediaQueryExpression.cpp:
        (WebCore::isFeatureValidWithoutValue): Added prefers-color-scheme.

2018-11-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: send a call stack with each action instead of an array of call frames
        https://bugs.webkit.org/show_bug.cgi?id=191628

        Reviewed by Dean Jackson.

        Updated existing test: inspector/model/recording.html

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::indexForData):
        (WebCore::InspectorCanvas::buildInitialState):
        (WebCore::InspectorCanvas::buildAction):
        Drive-by: prevent de-duplicated objects from being destroyed while recording.

2018-11-14  Stephan Szabo  <stephan.szabo@sony.com>

        [Win] Compile Service Worker support
        https://bugs.webkit.org/show_bug.cgi?id=191409

        Reviewed by Youenn Fablet.

        Fix compilation errors when ENABLE(SERVICE_WORKER)
        on Windows with clang-cl. Clang on dllexport
        platforms does not support specifying the
        dllexport on both a class and members of the class
        and unistd.h isn't provided but also appeared to
        not be used.

        No new tests, should be covered by existing tests.

        * workers/service/ServiceWorkerProvider.h:
        * workers/service/context/SWContextManager.cpp:

2018-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Keep Web Inspector window alive across process swaps (PSON) (Remote Inspector)
        https://bugs.webkit.org/show_bug.cgi?id=191494
        <rdar://problem/45469854>

        Reviewed by Devin Rousso.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::allowRemoteInspectionToPageDirectly const):
        Provide a hook so that a client may wish to allow direct remote inspection of the Page.
        This is used by WebKitLegacy only.

        * page/Page.cpp:
        (Page::Page):
        Only enable the PageDebuggable if the client wishes remote inspection of the Page directly.
        This is used by WebKitLegacy only.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        * inspector/InspectorController.h:
        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::connect):
        (WebCore::PageDebuggable::disconnect):
        * page/PageDebuggable.h:
        When a frontend connects, always enable the developer extras for the Page.
        This is pretty much only for the remote path, which allows inspection if developer
        extras were not already enabled (iOS). This simplifies the logic, and toggling
        developer extras after it was already enabled is not really important.

2018-11-14  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION (WEBPROCESS_WINDOWSERVER_BLOCKING): requestAnimationFrame Stops Completing
        https://bugs.webkit.org/show_bug.cgi?id=190884

        Reviewed by Dean Jackson.

        Only notify display refresh monitors with matching display ID.

        Test: fast/animation/request-animation-frame-in-two-pages.html

        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::displayWasUpdated):
        * platform/graphics/DisplayRefreshMonitorManager.h:

2018-11-14  Youenn Fablet  <youenn@apple.com>

        Convert libwebrtc error types to DOM exceptions
        https://bugs.webkit.org/show_bug.cgi?id=191590

        Reviewed by Alex Christensen.

        Make use of overloaded callback method that provides an error type.
        This type is then used to create a DOM exception with the correct type.
        Covered by existing tests.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::doSetRemoteDescription):
        (WebCore::LibWebRTCMediaEndpoint::createSessionDescriptionFailed):
        (WebCore::LibWebRTCMediaEndpoint::setLocalSessionDescriptionFailed):
        (WebCore::LibWebRTCMediaEndpoint::setRemoteSessionDescriptionFailed):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCObservers.h:
        (WebCore::toExceptionCode):

2018-11-14  Youenn Fablet  <youenn@apple.com>

        Allow to remove MediaStreamPrivate observers when iterating over observers
        https://bugs.webkit.org/show_bug.cgi?id=187256

        Reviewed by Eric Carlson.

        Migrate the observer list from a Vector to a HashSet.
        This is more robust to multiple observing and keeping of order of observers is not required.
        Copy the set of observers to a vector before iterating over it.
        This allows to remove an observer while iterating, which is now used in UserMediaRequest.

        Covered by existing tests.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::mediaStreamIsReady):
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::addObserver):
        (WebCore::MediaStreamPrivate::removeObserver):
        (WebCore::MediaStreamPrivate::forEachObserver const):
        (WebCore::MediaStreamPrivate::updateActiveState):
        (WebCore::MediaStreamPrivate::addTrack):
        (WebCore::MediaStreamPrivate::removeTrack):
        (WebCore::MediaStreamPrivate::characteristicsChanged):
        * platform/mediastream/MediaStreamPrivate.h:

2018-11-14  Youenn Fablet  <youenn@apple.com>

        Calling removeTrack on different RTCPeerConnection should throw InvalidAccessError
        https://bugs.webkit.org/show_bug.cgi?id=191603

        Reviewed by Chris Dumez.

        Make sure to check that the sender peer connection backend is matching.
        Covered by rebased WPT test.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::removeTrack):
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::isCreatedBy const):
        * Modules/mediastream/RTCRtpSender.h:

2018-11-14  Fujii Hironori  <Hironori.Fujii@sony.com>

        [curl] Unify CookieJarCurlDatabase and the abstract class CookieJarCurl
        https://bugs.webkit.org/show_bug.cgi?id=191620

        Reviewed by Alex Christensen.

        Remove a abstract class CookieJarCurl which is not needed anymore.
        And, rename CookieJarCurlDatabase to CookieJarCurl.

        No new tests because there's no behaviour change in WebCore.

        * platform/Curl.cmake: Replaced CookieJarCurlDatabase.cpp with CookieJarCurl.cpp.
        * platform/network/curl/CookieJarCurl.cpp: Renamed from Source/WebCore/platform/network/curl/CookieJarCurlDatabase.cpp.
        * platform/network/curl/CookieJarCurl.h: Merged CookieJarCurl.h and CookieJarCurlDatabase.h.
        * platform/network/curl/CookieJarCurlDatabase.h: Removed.
        * platform/network/curl/NetworkStorageSessionCurl.cpp:
        (WebCore::NetworkStorageSession::NetworkStorageSession): Replaced CookieJarCurlDatabase with CookieJarCurl.

2018-11-14  Christopher Reid  <chris.reid@sony.com>

        [WPE] Remove glib usage in PlatformKeyboardEventWPE.cpp
        https://bugs.webkit.org/show_bug.cgi?id=191606

        Reviewed by Michael Catanzaro.

        No behavior change.

        Use StringBuilder::append(UChar32) as a generic way to convert a uint32_t code point to WTFString.

        * platform/wpe/PlatformKeyboardEventWPE.cpp:
        (WebCore::PlatformKeyboardEvent::keyValueForWPEKeyCode):
        (WebCore::PlatformKeyboardEvent::singleCharacterString):

2018-11-13  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Construct dedicated runs when the inline element requires it (part 2)
        https://bugs.webkit.org/show_bug.cgi?id=191623

        Reviewed by Antti Koivisto.

        This patch expands the breaking behaviour to support separate start/end breaks.

        <span>parent </span><span style="padding: 10px;">start<span> middle </span>end</span><span> parent</span>

        input to line breaking -> <parent start middle end parent>
        output of line breaking (considering infinite constraint) -> <parent start middle end parent>
        due to padding, final runs -> <parent><start middle end><parent>

        "parent" -> n/a
        "start" -> BreakAtStart
        " middle " -> n/a
        "end" -> BreakAtEnd
        "parent" -> n/a

        Another example:
        <span>parent </span><span style="padding-right: 10px;">start<span> middle </span>end</span><span> parent</span>

        line breaking -> <parent start middle end parent>
        due to padding-right, final runs -> <parent start middle end><parent>

        "parent" -> n/a
        "start" -> n/a
        " middle " -> n/a
        "end" -> BreakAtEnd
        "parent" -> n/a

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::splitInlineRunIfNeeded const):
        (WebCore::Layout::InlineFormattingContext::collectInlineContent const): Move to a recursive algorithm (which is fine, inline contents don't tend to be too deep)
        (WebCore::Layout::InlineFormattingContext::contentRequiresSeparateRun const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingState.cpp:
        (WebCore::Layout::InlineFormattingState::detachingRules const):
        * layout/inlineformatting/InlineFormattingState.h:
        (WebCore::Layout::InlineFormattingState::lastInlineItem const):
        (WebCore::Layout::InlineFormattingState::addDetachingRule):

2018-11-14  Youenn Fablet  <youenn@apple.com>

        Add support for RTCRtpCodecParameters.sdpFmtpLine
        https://bugs.webkit.org/show_bug.cgi?id=191591

        Reviewed by Eric Carlson.

        Covered by rebased test.

        * Modules/mediastream/RTCRtpCodecParameters.h:
        * Modules/mediastream/RTCRtpCodecParameters.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
        (WebCore::toRTCCodecParameters):

2018-11-14  Youenn Fablet  <youenn@apple.com>

        Add support for transport and peerConnection stats
        https://bugs.webkit.org/show_bug.cgi?id=191592

        Reviewed by Alex Christensen.

        Covered by rebased tests.

        * Modules/mediastream/RTCStatsReport.h:
        (WebCore::RTCStatsReport::TransportStats::TransportStats):
        (WebCore::RTCStatsReport::PeerConnectionStats::PeerConnectionStats):
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCStatsCollector.cpp:
        (WebCore::fillRTCTransportStats):
        (WebCore::fillRTCPeerConnectionStats):
        (WebCore::LibWebRTCStatsCollector::OnStatsDelivered):

2018-11-14  Ali Juma  <ajuma@chromium.org>

        Transform of composited layer not updated when layer also needs repaint
        https://bugs.webkit.org/show_bug.cgi?id=191598

        Reviewed by Simon Fraser.

        Trigger a compositing geometry update whenever a RenderLayer's transform changes,
        even when other parts of its style have changed in a way that produces a
        StyleDifference greater than RecompositeLayer.

        Test: compositing/geometry/transform-and-repaint-updates-geometry.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerStyleChanged):

2018-11-13  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Support CTAP HID authenticators on macOS
        https://bugs.webkit.org/show_bug.cgi?id=188623
        <rdar://problem/43353777>

        Reviewed by Brent Fulgham and Chris Dumez.

        This patch removes AuthenticatorCoordinatorClient::~AuthenticatorCoordinatorClient to ignore
        any incompleted CompletionHandlers as calling them in destructors could cause unexpected cyclic
        dependency. Also, it adds a hack to temporarily deal with nullable userhandle.

        Tests: http/wpt/webauthn/ctap-hid-failure.https.html
               http/wpt/webauthn/ctap-hid-success.https.html
               http/wpt/webauthn/public-key-credential-create-failure-hid-silent.https.html
               http/wpt/webauthn/public-key-credential-create-failure-hid.https.html
               http/wpt/webauthn/public-key-credential-create-success-hid.https.html
               http/wpt/webauthn/public-key-credential-get-failure-hid-silent.https.html
               http/wpt/webauthn/public-key-credential-get-failure-hid.https.html
               http/wpt/webauthn/public-key-credential-get-success-hid.https.html

        * Modules/webauthn/AuthenticatorCoordinatorClient.cpp:
        (WebCore::AuthenticatorCoordinatorClient::~AuthenticatorCoordinatorClient): Deleted.
        * Modules/webauthn/AuthenticatorCoordinatorClient.h:
        * Modules/webauthn/PublicKeyCredentialCreationOptions.h:
        * Modules/webauthn/fido/DeviceResponseConverter.cpp:
        (fido::readCTAPGetAssertionResponse):
        * Modules/webauthn/fido/FidoConstants.h:

2018-11-13  Ross Kirsling  <ross.kirsling@sony.com>

        [WebRTC] Provide default implementation of LibWebRTCProvider
        https://bugs.webkit.org/show_bug.cgi?id=191611

        Reviewed by Michael Catanzaro.

        Refactor LibWebRTCProvider such that platform-specific implementations need not worry about specifying defaults.

        * PlatformWin.cmake:
        * platform/GStreamer.cmake:
        * platform/SourcesGLib.txt:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:
        * platform/mediastream/libwebrtc/LibWebRTCProviderGStreamer.cpp: Renamed from Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProviderGlib.cpp.
        * platform/mediastream/libwebrtc/LibWebRTCProviderGStreamer.h: Renamed from Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProviderGlib.h.
        * platform/mediastream/libwebrtc/LibWebRTCProviderWin.cpp: Removed.

2018-11-13  Timothy Hatcher  <timothy@apple.com>

        Use a light scrollbar for transparent web views in dark mode.
        https://bugs.webkit.org/show_bug.cgi?id=191559
        rdar://problem/46000489

        Reviewed by Dean Jackson.

        Test: css-dark-mode/supported-color-schemes-scrollbar.html

        * css/CSSProperties.json: Marked supported-color-schemes as a custom Value.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueSupportedColorSchemes):
        * editing/cocoa/WebContentReaderCocoa.mm: Use FrameView's useDarkAppearance().
        (WebCore::createFragment):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::paint): Use FrameView's useDarkAppearance().
        * page/FrameView.cpp:
        (WebCore::FrameView::recalculateScrollbarOverlayStyle): Use a light scrollbar for
        transparent web views in dark mode.
        (WebCore::FrameView::rendererForSupportedColorSchemes const): Added.
        Return the body for document element renderer.
        (WebCore::FrameView::useDarkAppearance const): Use rendererForSupportedColorSchemes.
        (WebCore::FrameView::styleColorOptions const): Added. Ditto.
        * page/FrameView.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::rareInheritedDataChangeRequiresRepaint): Drive-by fix. Added supportedColorSchemes.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setHasExplicitlySetSupportedColorSchemes): Added.
        (WebCore::RenderStyle::hasExplicitlySetSupportedColorSchemes const): Added.
        (WebCore::RenderStyle::NonInheritedFlags::operator== const): Added supportedColorSchemes.
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw): Use FrameView's useDarkAppearance().
        * testing/Internals.cpp:
        (WebCore::Internals::setViewIsTransparent): Added.
        (WebCore::Internals::scrollbarOverlayStyle const): Added.
        * testing/Internals.h:
        * testing/Internals.idl: Added setViewIsTransparent and scrollbarOverlayStyle.

2018-11-13  Ross Kirsling  <ross.kirsling@sony.com>

        [AppleWin] Unreviewed build fix after r238108.

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

2018-11-13  Youenn Fablet  <youenn@apple.com>

        RTCPeerConnection.getTransceivers is not always exposing all transceivers
        https://bugs.webkit.org/show_bug.cgi?id=191589

        Reviewed by Eric Carlson.

        Implement the collect transceiver algorithm using libwebrtc backend.
        Call this algorithm everytime transceivers are retrieved from JS.
        For Plan B, make this a no-op as this is not supported.
        Introduce senders/receivers/transceivers getters where we just look at already created transceivers.

        Covered by existing and rebased tests.

        * Modules/mediastream/PeerConnectionBackend.h:
        (WebCore::PeerConnectionBackend::collectTransceivers):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::getSenders const):
        (WebCore::RTCPeerConnection::getReceivers const):
        (WebCore::RTCPeerConnection::getTransceivers const):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::collectTransceivers):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::addTrack):
        (WebCore::LibWebRTCPeerConnectionBackend::existingTransceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::collectTransceivers):
        (WebCore::LibWebRTCPeerConnectionBackend::applyRotationForOutgoingVideoSources):
        (WebCore::LibWebRTCPeerConnectionBackend::shouldOfferAllowToReceive const):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:

2018-11-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Do not show selection UI for editable elements with opacity near zero
        https://bugs.webkit.org/show_bug.cgi?id=191442
        <rdar://problem/45958625>

        Reviewed by Simon Fraser.

        Tests: editing/selection/ios/do-not-zoom-to-focused-hidden-contenteditable.html
               editing/selection/ios/hide-selection-after-hiding-contenteditable.html
               editing/selection/ios/hide-selection-in-contenteditable-nested-transparency.html
               editing/selection/ios/hide-selection-in-hidden-contenteditable-frame.html
               editing/selection/ios/hide-selection-in-hidden-contenteditable.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isTransparentRespectingParentFrames const):

        Add a helper function to determine whether a RenderObject is contained within a transparent layer, taking parent
        frames into account. A layer is considered transparent if its opacity is less than a small threshold (i.e. 0.01).
        Opacity on ancestor elements is applied multiplicatively.

        * rendering/RenderObject.h:

2018-11-13  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Observer AVCaptureDevice "suspended" property
        https://bugs.webkit.org/show_bug.cgi?id=191587
        <rdar://problem/46030598>

        Reviewed by Youenn Fablet.

        No new tests, AVCapture can only be tested manually.

        * platform/mediastream/mac/AVCaptureDeviceManager.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::captureDevicesInternal): Don't notify of devices "changes"
        the first time the device list is scanned.
        (WebCore::deviceIsAvailable): Don't check for "isInUseByAnotherApplication", it doesn't
        change device availability.
        (WebCore::AVCaptureDeviceManager::beginObservingDevices): New, observe "suspended" on all 
        devices and add them to the cached list.
        (WebCore::AVCaptureDeviceManager::stopObservingDevices): New, opposite of above.
        (WebCore::AVCaptureDeviceManager::refreshCaptureDevices): Watch for changes in the list of
        devices.
        (WebCore::AVCaptureDeviceManager::~AVCaptureDeviceManager): Stop observing all cached devices.
        (WebCore::AVCaptureDeviceManager::registerForDeviceNotifications):
        (-[WebCoreAVCaptureDeviceManagerObserver disconnect]):
        (-[WebCoreAVCaptureDeviceManagerObserver deviceConnectedDidChange:]):
        (-[WebCoreAVCaptureDeviceManagerObserver observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::AVCaptureDeviceManager::refreshAVCaptureDevicesOfType): Deleted.
        (WebCore::AVCaptureDeviceManager::deviceConnected): Deleted.
        (WebCore::AVCaptureDeviceManager::deviceDisconnected): Deleted.
        (-[WebCoreAVCaptureDeviceManagerObserver deviceDisconnected:]): Deleted.
        (-[WebCoreAVCaptureDeviceManagerObserver deviceConnected:]): Deleted.

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource): Stop observing "running" (not "rate")
        and "suspended".
        (WebCore::AVVideoCaptureSource::setupSession): Observe "running" (not "rate"), and "suspended".
        (WebCore::AVVideoCaptureSource::captureDeviceSuspendedDidChange):
        (-[WebCoreAVVideoCaptureSourceObserver observeValueForKeyPath:ofObject:change:context:]):

2018-11-13  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r238122): fetching the CertificateInfo triggers an ASSERT in workers
        https://bugs.webkit.org/show_bug.cgi?id=191597

        Reviewed by Joseph Pecoraro.

        When WebInspector is open, the `CertificateInfo` for every `ResourceResponse` is now fetched,
        meaning that we may try to fetch in situations previously unexpected.

        * platform/network/cocoa/ResourceResponseCocoa.mm:
        (WebCore::ResourceResponse::platformCertificateInfo const):

2018-11-13  Timothy Hatcher  <timothy@apple.com>

        Treat supported-color-schemes as the second highest priority property.
        https://bugs.webkit.org/show_bug.cgi?id=191556
        rdar://problem/46000076

        Reviewed by Dean Jackson.

        Test: css-dark-mode/supported-color-schemes-priority.html

        * css/CSSProperties.json: Make supported-color-schemes high-priority and add a comment.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyMatchedProperties): Manually handle supported-color-schemes
        after -webkit-ruby-position, before other properties, so it can affect resolved colors.

2018-11-13  Charlie Turner  <cturner@igalia.com>

        [EME][GStreamer] Make CDMInstance's available in decryptors, and factor out some EME utility classes.
        https://bugs.webkit.org/show_bug.cgi?id=191316

        Reviewed by Xabier Rodriguez-Calvar.

        Another preparation in patch getting ready to move the decryption
        logic behind the CDMInstance and out of the GStreamer decryptors
        themselves. The first step taken here is to arrange for the
        instances to always be available in the decryptors when they need
        to decrypt content.

        In doing so, there were a number of hairy bits of code that could
        use some abstraction, so the opportunity was taken to do that as
        well.

        Covered by tests in media/encrypted-media and
        imported/w3c/web-platform-tests/encrypted-media.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Remove
        drm-key-needed since it was not being used anywhere.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::handleSyncMessage):
        Factor out the parsing of decryption system information from
        GStreamer, since it was not clear what that code was doing unless
        you squinted pretty hard. Also remove the duplicated
        initialization-data-encountered posting.
        (WebCore::MediaPlayerPrivateGStreamerBase::initializationDataEncountered):
        Refactored to make it a more general method and usable in more
        situations. It now has an optional to stop it from eliding init
        datas for a different key system. This is required the first time
        we post them, since if a CDM instance has already been set, and if
        the stream init datas are for different systems, we ended up never
        posting an encrypted event.
        (WebCore::MediaPlayerPrivateGStreamerBase::attemptToDecryptWithLocalInstance):
        Actually send a CDMInstance now when in regular playback mode.
        (WebCore::MediaPlayerPrivateGStreamerBase::dispatchDecryptionKey):
        Remove m_needToSendCredentials, it was not being used.
        (WebCore::MediaPlayerPrivateGStreamerBase::handleProtectionEvent):
        Refactored to use the new initializationDataEncountered.
        (WebCore::MediaPlayerPrivateGStreamerBase::reportWaitingForKey):
        Log the waiting state, since it was currently not clear what that
        logging message was even telling you!
        (WebCore::extractEventsAndSystemsFromMessage): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h:
        (WebCore::InitData::InitData): New class that encapsulates both
        single instantiation and streaming instantiation.
        (WebCore::InitData::append): Used for the streaming mode, when you
        are concatenating init datas together.
        (WebCore::InitData::payload const):
        (WebCore::InitData::systemId const):
        (WebCore::InitData::payloadContainerType const):
        (WebCore::InitData::isFromDifferentContainer):
        (WebCore::ProtectionSystemEvents::ProtectionSystemEvents):
        (WebCore::ProtectionSystemEvents::events const):
        (WebCore::ProtectionSystemEvents::availableSystems const):
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (webkitMediaCommonEncryptionDecryptTransformInPlace): If you post
        waiting-for-key after requesting a CDM instance, it will flap back
        to not waiting for a key almost immediately, didn't make sense
        positing after requesting an instance. Also post key-received when
        we receive the key.
        (webkitMediaCommonEncryptionDecryptSinkEventHandler): It has now
        been arranged that a CDMInstance will always be present in an OOB
        message, so parse it out here.
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::attemptToDecryptWithInstance):
        As above, make sure when posting the OOB that a CDMInstance is present.

2018-11-13  Charlie Turner  <cturner@igalia.com>

        Various compiler warnings/errors fixes.
        https://bugs.webkit.org/show_bug.cgi?id=191583

        Reviewed by Frédéric Wang.

        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::clearObjectStore):
        ASSERT is only compiled in DEBUG mode, so guarding with
        !LOG_DISABLED is wrong.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        showPaintOrderTree is only compiled in ENABLE(TREE_DEBUGGING)
        mode, so guarding with !LOG_DISABLED was wrong.
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        Ditto, this time with member .depth.
        (WebCore::RenderLayerCompositor::traverseUnchangedSubtree): Ditto.
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::styleChanged): Add another unused
        parameter.

2018-11-12  Antoine Quint  <graouts@apple.com>

        [Web Animations] Don't schedule animation frames or update style while an accelerated animation is running
        https://bugs.webkit.org/show_bug.cgi?id=191542
        <rdar://problem/45356027>

        Reviewed by Simon Fraser.

        Test: animations/no-style-recalc-during-accelerated-animation.html

        In order to be more power-efficient, we stop scheduling calls to updateAnimationsAndSendEvents() when running only accelerated
        animations. To do that, we prevent scheduling further animation resolution if we're in the process of updating animations, and
        when we are done, call the new DocumentTimeline::scheduleNextTick() method that will check whether we have only accelerated
        animations running, and in that case check which of those animations needs an update the soonest and starts a timer scheduled
        for that time when we'll schedule animation resolution.

        By default, animations compute the time until their natural completion but in the case of CSS Animations, we want to make sure
        we also update animations in-flight to dispatch "animationiteration" events.

        * animation/AnimationEffect.h: Make the simpleIterationProgress() public so it can be called by WebAnimation::timeToNextTick().
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::DocumentTimeline): Create the m_tickScheduleTimer and set it up to call scheduleAnimationResolutionIfNeeded().
        (WebCore::DocumentTimeline::suspendAnimations): If we don't already have a cached current time, cache the current time.
        (WebCore::DocumentTimeline::resumeAnimations): Reset the cached current time to ensure we'll get a fresh one when updating animations next.
        (WebCore::DocumentTimeline::liveCurrentTime const): Factor the code to compute the current time out of currentTime() so that we can
        cache the current time in suspendAnimations() without also automatically clearing the current time.
        (WebCore::DocumentTimeline::currentTime): Use liveCurrentTime() and cacheCurrentTime() since much of the code from this function has been
        factored out into those. Additionally, we were failing to clear the current time if called inside an animation frame, which we now do correctly
        by virtue of using cacheCurrentTime(). This fixes some flakiness.
        (WebCore::DocumentTimeline::cacheCurrentTime): Factor the code to cache the current time out of currentTime(). 
        (WebCore::DocumentTimeline::maybeClearCachedCurrentTime): No need to clear the current time if we get suspended.
        (WebCore::DocumentTimeline::scheduleAnimationResolutionIfNeeded): Prevent scheduling an animation update if we're in the middle of one already,
        scheduleNextTick() will be called after animations are updated to see if we should schedule an animation update instead.
        (WebCore::DocumentTimeline::unscheduleAnimationResolution): Cancel the m_tickScheduleTimer if we need to unschedule animation resolution.
        (WebCore::DocumentTimeline::animationResolutionTimerFired): Factor the call to applyPendingAcceleratedAnimations() out of updateAnimationsAndSendEvents()
        and call scheduleNextTick().
        (WebCore::DocumentTimeline::updateAnimationsAndSendEvents): Set the new m_isUpdatingAnimations member variable to true while this function is running.
        (WebCore::DocumentTimeline::scheduleNextTick): Schedule an animation update immediately if we have any relevant animation that is not accelerated.
        Otherwise, iterate through all animations to figure out the earliest moment at which we need to update animations.
        (WebCore::DocumentTimeline::updateListOfElementsWithRunningAcceleratedAnimationsForElement): Use the new WebAnimation::isRunningAccelerated() function.
        * animation/DocumentTimeline.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::isRunningAccelerated const): Since we end up checking if an animation is running with an accelerated effect, we introduce a new
        function to get that information directly through the WebAnimation object without bothering about its effect.
        (WebCore::WebAnimation::resolve): We should only call updateFinishedState() here since timingDidChange() would also notify the timeline about a potential
        change in relevance, which is not necessary and which would schedule an animation frame even for animations that are accelerated.
        (WebCore::WebAnimation::timeToNextTick const): Compute the time until our animation completion or, in the case of CSS animations, the next iteration.
        * animation/WebAnimation.h:

2018-11-13  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Incorrect tile coverage when resizing a layer out of the visible area
        https://bugs.webkit.org/show_bug.cgi?id=191545

        Reviewed by Žan Doberšek.

        Keep track of layer size changes even if they happen when the layer is not in the visible
        area, so we can update edge tiles when the layer gets visible.

        * platform/graphics/texmap/coordinated/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::createTiles):
        * platform/graphics/texmap/coordinated/TiledBackingStore.h:

2018-11-12  Rob Buis  <rbuis@igalia.com>

        Content-Type parameter values should allow empty quoted strings
        https://bugs.webkit.org/show_bug.cgi?id=191388

        Reviewed by Dean Jackson.

        According to RFC 2045 and https://mimesniff.spec.whatwg.org/#parsing-a-mime-type empty
        quoted strings are acceptable for Content-Type parameter values. They
        are accepted by Firefox and Chrome implementations as well.

        Test: web-platform-tests/xhr/overridemimetype-blob.html

        * platform/network/ParsedContentType.cpp:
        (WebCore::parseToken):
        (WebCore::parseQuotedString):
        (WebCore::parseContentType):
        * platform/network/ParsedContentType.h:

2018-11-12  Christopher Reid  <chris.reid@sony.com>

        [Curl] Reject entire cookie if the domain fails a tailmatch.
        https://bugs.webkit.org/show_bug.cgi?id=191406

        Reviewed by Youenn Fablet.

        Currently we don't put domain attribute of cookie when it fails a tailmatch. As Firefox
        and Chrome do, we are going to reject the entire cookie if the domain fails a tailmatch instead.
        Also cleanup Cookie database implementation to make them testable better.

        Tests: TestWebKitAPI/Tests/WebCore/curl/Cookies.cpp

        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::canAcceptCookie): Added.
        (WebCore::CookieJarDB::setCookie):
        * platform/network/curl/CookieUtil.cpp:
        (WebCore::CookieUtil::parseCookieAttributes):
        (WebCore::CookieUtil::parseCookieHeader):
        * platform/network/curl/CookieUtil.h:

2018-11-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: show secure certificate details per-request
        https://bugs.webkit.org/show_bug.cgi?id=191447
        <rdar://problem/30019476>

        Reviewed by Joseph Pecoraro.

        Test: http/tests/inspector/network/resource-response-security.html

        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::shouldIncludeCertificateInfo const):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::shouldIncludeCertificateInfo const): Added.
        Always save certificate information when WebInspector is open.

        * platform/network/CertificateInfoBase.h: Added.
        (WebCore::CertificateInfoBase::containsNonRootSHA1SignedCertificate const):
        (WebCore::CertificateInfoBase::summaryInfo const):
        (WebCore::CertificateInfoBase::isEmpty const):
        * platform/network/cf/CertificateInfo.h:
        (WebCore::CertificateInfo::summaryInfo const): Added.
        * platform/network/cf/CertificateInfoCFNet.cpp: Renamed from Source/WebCore/platform/network/mac/CertificateInfoMac.mm.
        (WebCore::CertificateInfo::containsNonRootSHA1SignedCertificate):
        (WebCore::CertificateInfo::summaryInfo const): Added.
        * platform/network/curl/CertificateInfo.h:
        (WebCore::CertificateInfo::summaryInfo const): Added.
        (WebCore::CertificateInfo::isEmpty const): Added.
        * platform/network/soup/CertificateInfo.h:
        (WebCore::CertificateInfo::summaryInfo const): Added.
        (WebCore::CertificateInfo::isEmpty const): Added.
        Create base class for `CertificateInfo` so that `InspectorNetworkAgent` doesn't need to have
        platform-specific code in its implementation.

        * platform/network/cocoa/CertificateInfoCocoa.mm: Renamed from Source/WebCore/platform/network/mac/CertificateInfoMac.mm.
        * platform/network/curl/CertificateInfoCFNet.cpp: Renamed from Source/WebCore/platform/network/curl/CertificateInfo.cpp.
        * platform/network/soup/CertificateInfoSoup.cpp: Renamed from Source/WebCore/platform/network/soup/CertificateInfo.cpp.

        * inspector/NetworkResourcesData.h:
        (WebCore::NetworkResourcesData::ResourceData::certificateInfo const): Added.
        (WebCore::NetworkResourcesData::ResourceData::setCertificateInfo): Added.
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::responseReceived):

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildObjectForResourceResponse):

        * PlatformAppleWin.cmake:
        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/Curl.cmake:
        * platform/SourcesSoup.txt:

2018-11-12  Zalan Bujtas  <zalan@apple.com>

        Do not collapse the soon-to-be-parent anon block when we shuffle around the marker item renderer.
        https://bugs.webkit.org/show_bug.cgi?id=191554
        <rdar://problem/45825265>

        Reviewed by Antti Koivisto.

        While moving the marker item renderer to its correct subtree, we accidentally remove the soon-to-be parent anonymous block.
        Moving a renderer is a 2 step process:
        1. Detach the renderer from its current parent
        2. Attach it to its new parent.
        During step #1, we check if there is a chance to collapse anonymous blocks. In this case the soon-to-be-parent is a sibling anonymous block which, after detaching the marker sibling
        is not needed anymore (except we use it as the new parent).

        Test: fast/inline/marker-list-item-move-should-not-crash.html

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::detach):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::detach):
        * rendering/updating/RenderTreeBuilderBlock.h:
        * rendering/updating/RenderTreeBuilderList.cpp:
        (WebCore::RenderTreeBuilder::List::updateItemMarker):

2018-11-12  Javier Fernandez  <jfernandez@igalia.com>

        [css-grid] Refactoring to make more explicit the orthogonal items' pre-layout logic
        https://bugs.webkit.org/show_bug.cgi?id=191358

        Reviewed by Manuel Rego Casasnovas.

        These changes are just a refactoring to ease the integration of the new Baseline Alignment
        logic in a follow up patch.

        We need to properly estimate the grid area size of orthogonal items so that we can perform
        an accurate pre-layout. This is important because orthogonal items will synthesize their baseline
        if they participate in any baseline alignment context.

        No new tests, since no behavior change has been introduced in this patch.

        * rendering/Grid.cpp:
        (WebCore::Grid::setNeedsItemsPlacement):
        * rendering/Grid.h:
        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::estimatedGridAreaBreadthForChild const):
        (WebCore::GridTrackSizingAlgorithm::gridAreaBreadthForChild const):
        (WebCore::GridTrackSizingAlgorithm::isRelativeGridLengthAsAuto const):
        (WebCore::GridTrackSizingAlgorithm::isRelativeSizedTrackAsAuto const):
        (WebCore::GridTrackSizingAlgorithm::gridTrackSize const):
        (WebCore::IndefiniteSizeStrategy::findUsedFlexFraction const):
        (WebCore::GridTrackSizingAlgorithm::run):
        (WebCore::GridTrackSizingAlgorithm::reset):
        * rendering/GridTrackSizingAlgorithm.h:
        (WebCore::GridTrackSizingAlgorithmStrategy::gridTrackSize const):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::repeatTracksSizingIfNeeded):
        (WebCore::RenderGrid::layoutBlock):
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths const):
        (WebCore::RenderGrid::computeTrackSizesForIndefiniteSize const):
        (WebCore::RenderGrid::placeItemsOnGrid const):
        (WebCore::RenderGrid::performGridItemsPreLayout const):
        (WebCore::overrideSizeChanged):
        (WebCore::hasRelativeBlockAxisSize):
        (WebCore::RenderGrid::updateGridAreaLogicalSize const):
        (WebCore::RenderGrid::layoutGridItems):
        * rendering/RenderGrid.h:

2018-11-12  Sihui Liu  <sihui_liu@apple.com>

        imported/w3c/web-platform-tests/IndexedDB/keygenerator-explicit.html crashing on iOS device
        https://bugs.webkit.org/show_bug.cgi?id=191500

        Reviewed by Dean Jackson.

        When double value is bigger than maximum unsigned int, converting double to unsigned int has
        different behaviors on macOS and iOS. On macOS, the result would be 0 while on iOS it would be
        maximum unsigned int.

        Covered by existing test.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::generateKeyNumber):
        (WebCore::IDBServer::SQLiteIDBBackingStore::maybeUpdateKeyGeneratorNumber):

2018-11-12  Basuke Suzuki  <basuke.suzuki@sony.com>

        [Curl] Add API Test for Curl cookie backend.
        https://bugs.webkit.org/show_bug.cgi?id=191493

        Reviewed by Youenn Fablet.

        Refactoring for cookie backend interface.

        Tests: TestWebKitAPI/Tests/WebCore/curl/Cookies.cpp

        * platform/FileSystem.h:
        * platform/network/curl/CookieJarCurlDatabase.cpp:
        (WebCore::cookiesForSession):
        (WebCore::CookieJarCurlDatabase::setCookiesFromDOM const):
        (WebCore::CookieJarCurlDatabase::setCookiesFromHTTPResponse const):
        (WebCore::CookieJarCurlDatabase::getRawCookies const):
        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::openDatabase):
        (WebCore::CookieJarDB::checkSQLiteReturnCode):
        (WebCore::CookieJarDB::isEnabled const):
        (WebCore::CookieJarDB::searchCookies):
        (WebCore::CookieJarDB::setCookie):
        (WebCore::CookieJarDB::deleteCookie):
        (WebCore::CookieJarDB::deleteCookieInternal):
        (WebCore::CookieJarDB::deleteCookies):
        (WebCore::CookieJarDB::deleteAllCookies):
        (WebCore::CookieJarDB::executeSimpleSql):
        (WebCore::CookieJarDB::isEnabled): Deleted.
        * platform/network/curl/CookieJarDB.h:
        * platform/network/curl/CookieUtil.cpp:
        (WebCore::CookieUtil::parseCookieHeader):
        * platform/network/curl/CookieUtil.h:
        * platform/win/FileSystemWin.cpp:
        (WebCore::FileSystem::generateTemporaryPath):
        (WebCore::FileSystem::openTemporaryFile):
        (WebCore::FileSystem::createTemporaryDirectory):
        (WebCore::FileSystem::deleteNonEmptyDirectory):

2018-11-12  Tim Horton  <timothy_horton@apple.com>

        Make it possible to edit images inline
        https://bugs.webkit.org/show_bug.cgi?id=191352
        <rdar://problem/30107985>

        Reviewed by Dean Jackson.

        Tests: editing/images/basic-editable-image.html
               editing/images/reparent-editable-image-maintains-strokes.html

        Add the beginnings of a mechanism to replace images with a special attribute
        with a native drawing view in the UI process.

        * page/Settings.yaml:
        Add a setting to control whether images become natively editable when they
        have the x-apple-editable-image attribute.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::editableImageViewID const):
        Lazily generate an EmbeddedViewID and persist it on the <img> element.

        * html/HTMLImageElement.h:
        Rearrange the service controls methods to sit before the members.
        Add m_editableImageViewID and editableImageViewID().

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::nextEmbeddedViewID):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setContentsToEmbeddedView):
        Add a new ContentsLayerPurpose, EmbeddedView, which is only supported
        on Cocoa platforms and when using RemoteLayerTree.
        Add ContentsLayerEmbeddedViewType, which currently only has the EditableImage type.
        Add setContentsToEmbeddedView, which takes a ContentsLayerEmbeddedViewType
        and an EmbeddedViewID to uniquely identify and communicate about the
        embedded view (which may move between layers, since it is tied to an element).

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createPlatformCALayerForEmbeddedView):
        (WebCore::GraphicsLayerCA::setContentsToEmbeddedView):
        When setting GraphicsLayer's contents to an embedded view, we use
        a special PlatformCALayer factory that takes the EmbeddedViewID and type.
        GraphicsLayerCARemote will override this and make a correctly-initialized
        PlatformCALayerRemote that keeps track of the EmbeddedViewID.

        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::operator<<):
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::PlatformCALayerCocoa):
        (WebCore::PlatformCALayerCocoa::embeddedViewID const):
        Add stubs and logging for EmbeddedViewID on PlatformCALayer.
        These will be overridden by PlatformCALayerRemote to do more interesting things.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::isEditableImage const):
        Add a getter that return true if the setting is enabled and
        x-apple-editable-image is empty or true.

        (WebCore::RenderImage::requiresLayer const):
        RenderImage requires a layer either if RenderReplaced does, or we are an
        editable image.

        * rendering/RenderImage.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldBeNormalFlowOnly const):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):
        Push the EmbeddedViewID and type down to GraphicsLayer for editable images.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingLayer const):
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore const):
        (WebCore::RenderLayerCompositor::reasonsForCompositing const):
        (WebCore::RenderLayerCompositor::requiresCompositingForEditableImage const):
        * rendering/RenderLayerCompositor.h:
        Make editable images require compositing implicitly.

2018-11-12  Don Olmstead  <don.olmstead@sony.com>

        Shipped PNGs include bad profiles: iCCP: known incorrect sRGB profile
        https://bugs.webkit.org/show_bug.cgi?id=189230
        <rdar://problem/44050379>

        Reviewed by Joseph Pecoraro.

        Runs all png images through zopflipng. This results in a smaller file
        size and takes care of this issue as a byproduct.

        * Modules/modern-media-controls/images/iOS/airplay-placard@1x.png:
        * Modules/modern-media-controls/images/iOS/airplay-placard@2x.png:
        * Modules/modern-media-controls/images/iOS/airplay-placard@3x.png:
        * Modules/modern-media-controls/images/iOS/invalid-placard@1x.png:
        * Modules/modern-media-controls/images/iOS/invalid-placard@2x.png:
        * Modules/modern-media-controls/images/iOS/invalid-placard@3x.png:
        * Modules/modern-media-controls/images/iOS/pip-placard@1x.png:
        * Modules/modern-media-controls/images/iOS/pip-placard@2x.png:
        * Modules/modern-media-controls/images/iOS/pip-placard@3x.png:
        * Modules/modern-media-controls/images/macOS/airplay-placard@1x.png:
        * Modules/modern-media-controls/images/macOS/airplay-placard@2x.png:
        * Modules/modern-media-controls/images/macOS/invalid-placard@1x.png:
        * Modules/modern-media-controls/images/macOS/invalid-placard@2x.png:
        * Modules/modern-media-controls/images/macOS/pip-placard@1x.png:
        * Modules/modern-media-controls/images/macOS/pip-placard@2x.png:
        * Resources/AttachmentPlaceholder.png:
        * Resources/AttachmentPlaceholder@2x.png:
        * Resources/ListButtonArrow.png:
        * Resources/ListButtonArrow@2x.png:
        * Resources/missingImage.png:
        * Resources/missingImage@2x.png:
        * Resources/missingImage@3x.png:
        * Resources/moveCursor.png:
        * Resources/northEastSouthWestResizeCursor.png:
        * Resources/northSouthResizeCursor.png:
        * Resources/northWestSouthEastResizeCursor.png:
        * Resources/nullPlugin.png:
        * Resources/nullPlugin@2x.png:
        * Resources/panIcon.png:
        * Resources/textAreaResizeCorner.png:
        * Resources/textAreaResizeCorner@2x.png:
        * Resources/urlIcon.png:

2018-11-12  Youenn Fablet  <youenn@apple.com>

        RealtimeOutgoing A/V sources should observe their sources only if having a sink
        https://bugs.webkit.org/show_bug.cgi?id=191490

        Reviewed by Eric Carlson.

        Observe the source that generates media based on the sinks:
        - Do not observe at creation time
        - For first sink, start observing
        - When no more sink, stop observing
        Apply this principle for both outgoing audio and video sources.
        Add locks for the sinks to ensure thread-safety.
        Make sinks HashSet which is more robust.

        Do some refactoring to better isolate generic outgoing sources from Cocoa/GTK implementations.

        Covered by existing tests and updated webrtc/remove-track.html.

        * platform/mediastream/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::~RealtimeOutgoingAudioSource):
        (WebCore::RealtimeOutgoingAudioSource::stop):
        (WebCore::RealtimeOutgoingAudioSource::AddSink):
        (WebCore::RealtimeOutgoingAudioSource::RemoveSink):
        (WebCore::RealtimeOutgoingAudioSource::sendAudioFrames):
        * platform/mediastream/RealtimeOutgoingAudioSource.h:
        * platform/mediastream/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::RealtimeOutgoingVideoSource):
        (WebCore::RealtimeOutgoingVideoSource::~RealtimeOutgoingVideoSource):
        (WebCore::RealtimeOutgoingVideoSource::observeSource):
        (WebCore::RealtimeOutgoingVideoSource::setSource):
        (WebCore::RealtimeOutgoingVideoSource::stop):
        (WebCore::RealtimeOutgoingVideoSource::AddOrUpdateSink):
        (WebCore::RealtimeOutgoingVideoSource::RemoveSink):
        * platform/mediastream/RealtimeOutgoingVideoSource.h:
        (WebCore::RealtimeOutgoingVideoSource::isSilenced const):
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp:
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::pullAudioData):
        * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp:
        (WebCore::RealtimeOutgoingAudioSourceCocoa::RealtimeOutgoingAudioSourceCocoa):
        (WebCore::RealtimeOutgoingAudioSourceCocoa::audioSamplesAvailable):
        (WebCore::RealtimeOutgoingAudioSourceCocoa::pullAudioData):
        * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.h:
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp:
        (WebCore::RealtimeOutgoingVideoSourceCocoa::sampleBufferUpdated):

2018-11-12  Youenn Fablet  <youenn@apple.com>

        Support setting stream ids when adding a transceiver
        https://bugs.webkit.org/show_bug.cgi?id=191307

        Reviewed by Eric Carlson.

        Add support for streams in RTCTransceiverInit.
        Add plumbing down to libwebrtc.
        Covered by rebased tests.

        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
        (WebCore::fromRtpTransceiverInit):

2018-11-12  Antti Koivisto  <antti@apple.com>

        Support dynamic pseudo-classes on elements with display: contents
        https://bugs.webkit.org/show_bug.cgi?id=181640
        <rdar://problem/36605415>

        Reviewed by Dean Jackson.

        The code for :hover and :active style invalidation assumes that only elements with renderer need invalidation.

        This patch fixes '.display-content-element:hover span' case but not '.display-content-element:hover' case but
        includes tests for both. The latter is not super useful anyway (as it only affects rendering with inherited
        text properties).

        Test: fast/css/display-contents-hover-active.html

        * dom/Document.cpp:
        (WebCore::Document::updateHoverActiveState):

            Traverse up in composed tree instead of render tree when invalidating. This has the same order as render tree
            but also includes display:content elements. This also allows removing the special display:none case.

        * dom/Element.cpp:
        (WebCore::Element::setActive):
        (WebCore::Element::setHovered):

            Also look into display:contents style for invalidation checks.

        (WebCore::Element::renderOrDisplayContentsStyle const):

            Make this helper an Element member.

        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::parentElementInComposedTree const):

            Support starting from a PseudoElement. This is consistent with ComposedTreeAncestorIterator.

        * rendering/updating/RenderTreePosition.cpp:
        (WebCore::RenderTreePosition::nextSiblingRenderer const):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveElement):
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):
        (WebCore::Style::shouldResolveElement):
        (WebCore::Style::TreeResolver::resolveComposedTree):
        (WebCore::Style::renderOrDisplayContentsStyle): Deleted.

            Use the Element::renderOrDisplayContentsStyle() instead.

2018-11-12  Antoine Quint  <graouts@apple.com>

        [Web Animations] Turn Web Animations experimental
        https://bugs.webkit.org/show_bug.cgi?id=191543

        Reviewed by Dean Jackson.

        * page/RuntimeEnabledFeatures.h:

2018-11-12  Simon Fraser  <simon.fraser@apple.com>

        feFlood with alpha color doesn't work correctly
        https://bugs.webkit.org/show_bug.cgi?id=163666

        Reviewed by Zalan Bujtas.
        
        FEFlood::platformApplySoftware() erroneously used colorWithOverrideAlpha()
        rather than multiplying the flood color with the flood opacity as other browsers do.

        Test: svg/filters/feFlood-with-alpha-color.html

        * platform/graphics/Color.cpp:
        (WebCore::Color::colorWithAlpha const): I tried using colorWithAlphaMultipliedBy() elsewhere,
        and it triggered a behavior change, so add a comment.
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::platformApplySoftware):
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::stopColorIncludingOpacity const):

2018-11-12  Eric Carlson  <eric.carlson@apple.com>

        Require <iframe allow="display"> for an iframe to use getDisplayMedia
        https://bugs.webkit.org/show_bug.cgi?id=191505
        <rdar://problem/45968811>

        Reviewed by Jer Noble.

        Test: http/tests/media/media-stream/get-display-media-iframe-allow-attribute.html

        * Modules/mediastream/MediaDevicesRequest.cpp:
        (WebCore::MediaDevicesRequest::start):
        * Modules/mediastream/UserMediaController.cpp:
        (WebCore::isAllowedToUse):
        (WebCore::UserMediaController::canCallGetUserMedia):
        (WebCore::UserMediaController::logGetUserMediaDenial):
        * Modules/mediastream/UserMediaController.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::start):

2018-11-12  Simon Fraser  <simon.fraser@apple.com>

        Make compositing updates incremental
        https://bugs.webkit.org/show_bug.cgi?id=90342

        Reviewed by Antti Koivisto.

        Previously, updating compositing layers required two full RenderLayer tree traversals,
        and all the work was done for every RenderLayer on each composting update. This could be expensive
        on pages with lots of RenderLayers.

        These changes make compositing updates more incremental. Compositing updates still require
        two tree traversals. The first determines which RenderLayers need to be composited (of those which
        weren't already made composited at style-change time), because of reasons that can only be determined
        post-layout, and indirect reasons including overlap. The second traversal updates the configuration, geometry
        and GraphicsLayer tree for the composited layers. Dependencies on both descendant and ancestor state make
        it hard to fold these two traversals together.

        In order to minimize the work done during these traversals, dirty bits are stored on RenderLayers,
        and propagated to ancestor layers in paint order. There are two sets of bits: those related to the first
        "compositing requirements" traversal, and those related to the second "update backing and hierarchy" traversal.
        When a RenderLayer gets a dirty bit set, bits are propagated to ancestors to indicate that children need
        to be visited.

        Sadly entire subtrees can't be skipped during the "compositing requirements" traversal because we still have
        to accumulate overlap rects, but RenderLayerCompositor::traverseUnchangedSubtree() is used to minimize
        work in that case. Subtrees can be skipped in the "update backing and hierarchy" traversal. Entire traversals can
        be skipped if no change has triggered the need for that traversal.
        
        These changes fix a correctness issue where transform changes now trigger overlap re-evaluation, which causes
        more layer geometry updates than before. This regressed the MotionMark "Focus" test, when geometry updates
        triggered layer resizes as the filter blur radius changed, which then triggered repaints. This is fixed by
        excluding composited filters from the composited bounds (but still taking them into account for overlap).

        Care is taken to avoid triggering traversals in non-composited documents (tested by no-updates-in-non-composited-iframe.html).

        Code to set the dirty bits is added in various places that change properties that compositing depends on.
        
        These changes also subsume the patch in 176196; we now never consult properties that rely on layout from the
        style change code path, and the only call stack for geometry updates is from the "update backing and hierarchy"
        traversal, which is always a pre-order traversal.

        Tests: compositing/geometry/stacking-context-change-layer-reparent.html
               compositing/layer-creation/change-to-overlap.html
               compositing/updates/no-updates-in-non-composited-iframe.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::markContextChanged): Need to differentiate between a canvas becoming composited
        for the first time, and its pixels changing with a new 'CanvasPixelsChanged' value.
        * page/FrameView.cpp:
        (WebCore::FrameView::setViewportConstrainedObjectsNeedLayout):
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateBackdropFilters): If we just made a layer for backdrops, we need to update sublayers.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleWillChange):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::shouldBeStackingContext const):
        (WebCore::RenderLayer::stackingContext const):
        (WebCore::RenderLayer::dirtyZOrderLists):
        (WebCore::RenderLayer::dirtyNormalFlowList):
        (WebCore::RenderLayer::updateNormalFlowList):
        (WebCore::RenderLayer::rebuildZOrderLists):
        (WebCore::RenderLayer::setAncestorsHaveCompositingDirtyFlag):
        (WebCore::RenderLayer::contentChanged):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updateTransform):
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::enclosingCompositingLayer const):
        (WebCore::RenderLayer::enclosingCompositingLayerForRepaint const):
        (WebCore::RenderLayer::clippingRootForPainting const):
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::updateCompositingLayersAfterScroll):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::calculateClipRects const):
        (WebCore::outputPaintOrderTreeLegend):
        (WebCore::outputPaintOrderTreeRecursive):
        (WebCore::compositingContainer): Deleted.
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::clearZOrderLists):
        (WebCore::RenderLayer::paintOrderParent const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        (WebCore::RenderLayerBacking::updateAfterWidgetResize):
        (WebCore::RenderLayerBacking::updateAfterLayout):
        (WebCore::RenderLayerBacking::updateConfigurationAfterStyleChange):
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::setRequiresBackgroundLayer):
        (WebCore::RenderLayerBacking::updateMaskingLayer):
        (WebCore::RenderLayerBacking::paintsContent const):
        (WebCore::RenderLayerBacking::contentChanged):
        (WebCore::RenderLayerBacking::setContentsNeedDisplay):
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::animationFinished):
        (WebCore::RenderLayerBacking::startTransition):
        (WebCore::RenderLayerBacking::transitionFinished):
        (WebCore::RenderLayerBacking::setCompositedBounds):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::CompositingState::CompositingState):
        (WebCore::RenderLayerCompositor::enableCompositingMode):
        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags):
        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlagsAfterLayout):
        (WebCore::RenderLayerCompositor::willRecalcStyle):
        (WebCore::RenderLayerCompositor::didRecalcStyleWithNoPendingLayout):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::traverseUnchangedSubtree):
        (WebCore::RenderLayerCompositor::updateBackingAndHierarchy):
        (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers):
        (WebCore::RenderLayerCompositor::layerBecameNonComposited):
        (WebCore::RenderLayerCompositor::logLayerInfo):
        (WebCore::clippingChanged):
        (WebCore::styleAffectsLayerGeometry):
        (WebCore::RenderLayerCompositor::layerStyleChanged):
        (WebCore::RenderLayerCompositor::needsCompositingUpdateForStyleChangeOnNonCompositedLayer const):
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::updateLayerCompositingState):
        (WebCore::RenderLayerCompositor::layerWasAdded):
        (WebCore::RenderLayerCompositor::layerWillBeRemoved):
        (WebCore::RenderLayerCompositor::enclosingNonStackingClippingLayer const):
        (WebCore::RenderLayerCompositor::computeExtent const):
        (WebCore::RenderLayerCompositor::addToOverlapMap):
        (WebCore::RenderLayerCompositor::addToOverlapMapRecursive):
        (WebCore::RenderLayerCompositor::rootLayerConfigurationChanged):
        (WebCore::RenderLayerCompositor::parentFrameContentLayers):
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        (WebCore::RenderLayerCompositor::needsToBeComposited const):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer const):
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore const):
        (WebCore::RenderLayerCompositor::reasonsForCompositing const):
        (WebCore::RenderLayerCompositor::clippedByAncestor const):
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation const):
        (WebCore::RenderLayerCompositor::requiresCompositingForTransform const):
        (WebCore::RenderLayerCompositor::requiresCompositingForVideo const):
        (WebCore::RenderLayerCompositor::requiresCompositingForFilters const):
        (WebCore::RenderLayerCompositor::requiresCompositingForWillChange const):
        (WebCore::RenderLayerCompositor::requiresCompositingForPlugin const):
        (WebCore::RenderLayerCompositor::requiresCompositingForFrame const):
        (WebCore::RenderLayerCompositor::requiresCompositingForScrollableFrame const):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition const):
        (WebCore::RenderLayerCompositor::requiresCompositingForOverflowScrolling const):
        (WebCore::RenderLayerCompositor::styleChangeMayAffectIndirectCompositingReasons):
        (WebCore::RenderLayerCompositor::fixedLayerIntersectsViewport const):
        (WebCore::RenderLayerCompositor::useCoordinatedScrollingForLayer const):
        (WebCore::RenderLayerCompositor::rootOrBodyStyleChanged):
        (WebCore::RenderLayerCompositor::rootBackgroundColorOrTransparencyChanged):
        (WebCore::operator<<):
        (WebCore::RenderLayerCompositor::setCompositingLayersNeedRebuild): Deleted.
        (WebCore::checkIfDescendantClippingContextNeedsUpdate): Deleted.
        (WebCore::isScrollableOverflow): Deleted.
        (WebCore::styleHasTouchScrolling): Deleted.
        (WebCore::styleChangeRequiresLayerRebuild): Deleted.
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): Deleted.
        (WebCore::RenderLayerCompositor::rootFixedBackgroundsChanged): Deleted.
        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry): Deleted.
        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry): Deleted.
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):

2018-11-12  Rob Buis  <rbuis@igalia.com>

        CSSCalcOperation constructor wastes 6KB of Vector capacity on cnn.com
        https://bugs.webkit.org/show_bug.cgi?id=190839

        Reviewed by Frédéric Wang.

        The CSSCalcOperation ctor that takes a leftSide and rightSide parameter
        wastes memory since it will always have size 2 but claims the
        default Vector size. So make sure to reserve an initial capacity of 2.

        * css/CSSCalculationValue.cpp:

2018-11-12  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        WTFMove(xxx) is used in arguments while other arguments touch xxx
        https://bugs.webkit.org/show_bug.cgi?id=191544

        Reviewed by Alex Christensen.

        The order of the evaluation of C++ arguments is undefined. If we use WTFMove(xxx),
        xxx should not be touched in the other arguments. This patch fixes such uses in
        IDB code.

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::deleteIndex):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::scheduleOperation):
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::registerObjectStore):
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::registerIndex):

2018-11-12  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Construct dedicated runs when the inline element requires it.
        https://bugs.webkit.org/show_bug.cgi?id=191509

        Reviewed by Antti Koivisto.

        In certain cases, a run can overlap multiple inline elements like this:

        <span>normal text content</span><span style="position: relative; left: 10px;">but this one needs a dedicated run</span><span>end of text</span>

        The content above generates one long run <normal text contentbut this one needs dedicated runend of text> <- input to line breaking.
        However, since the middle run is positioned, it needs to be moved independently from the rest of the content, hence it needs a dedicated inline run.

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        (WebCore::Layout::contentRequiresSeparateRun):
        (WebCore::Layout::InlineFormattingContext::splitInlineRunIfNeeded const):
        (WebCore::Layout::InlineFormattingContext::postProcessInlineRuns const):
        (WebCore::Layout::InlineFormattingContext::closeLine const):
        (WebCore::Layout::InlineFormattingContext::appendContentToLine const):
        (WebCore::Layout::InlineFormattingContext::layoutInlineContent const):
        (WebCore::Layout::InlineFormattingContext::instrinsicWidthConstraints const):
        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::inlineFormattingState const):
        * layout/inlineformatting/InlineLineBreaker.cpp:
        (WebCore::Layout::InlineLineBreaker::nextRun): mid-word breaking is not implemented yet.
        * layout/inlineformatting/InlineRun.h:
        (WebCore::Layout::InlineRun::overlapsMultipleInlineItems const):
        * layout/inlineformatting/InlineRunProvider.cpp:
        (WebCore::Layout::InlineRunProvider::processInlineTextItem):
        * layout/inlineformatting/InlineRunProvider.h:
        (WebCore::Layout::InlineRunProvider::Run::TextContext::expand):
        (WebCore::Layout::InlineRunProvider::Run::textContext):
        (WebCore::Layout::InlineRunProvider::Run::TextContext::setStart): Deleted.
        (WebCore::Layout::InlineRunProvider::Run::TextContext::setLength): Deleted.

2018-11-12  Jer Noble  <jer.noble@apple.com>

        [MSE] Frame re-ordering can cause iframes to never be enqueued
        https://bugs.webkit.org/show_bug.cgi?id=191485

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-dropped-iframe.html

        Some frame re-ordering techniques result in files where the first frame has a
        decode timestamp < 0, but a presentation timestamp >= 0. When appending these
        samples to existing content, we can fail to enqueue the first frame because its
        DTS overlaps an existing sample, but the presentation timestamp does not.
        Rather than try to only enqueue samples whose decode timestamps are > than the
        greatest decode end timestamp (minus some fudge factor), allow all frames to be
        added to the decode queue if they are strictly ordered greater than the last
        enqueued frame.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::TrackBuffer::TrackBuffer):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        (WebCore::SourceBuffer::provideMediaData):
        (WebCore::SourceBuffer::reenqueueMediaForTime):

2018-11-12  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        IDBTransaction does not use "RefPtr<IDBTransaction> self"
        https://bugs.webkit.org/show_bug.cgi?id=190436

        Reviewed by Alex Christensen.

        It seems that `RefPtr<IDBTransaction> self;` is not effective since it does not capture anything.
        Use `protectedThis = makeRef(*this)` instead.

        No behavior change.

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::IDBTransaction):

2018-11-12  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Introduce AbortableTaskQueue
        https://bugs.webkit.org/show_bug.cgi?id=190902

        Reviewed by Xabier Rodriguez-Calvar.

        A new synchronization primitive is introduced: AbortableTaskQueue,
        which allows to send work to the main thread from a background thread
        with the option to perform two-phase cancellation (startAborting() and
        finishAborting()).

        This new primitive has been used to overhaul GstBus messaging in
        AppendPipeline. A lot of code made redundant has been deleted in the
        process and lots of internal functions were now able to be made
        private. As part of the refactor all glib signals in AppendPipeline
        now use lambdas. All usages of WTF::isMainThread() in AppendPipeline
        have been replaced by isMainThread() for consistency with the rest of
        WebKit.

        Two-phase cancellation is still not used in AppendPipeline as of this
        patch, but it will be used in a future patch that makes use of
        GStreamer flushes to implement correct MSE abort semantics. There are
        unit tests to ensure it works correctly, even if it's still not used.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/AbortableTaskQueue.h: Added.
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::dumpAppendState):
        (WebCore::AppendPipeline::AppendPipeline):
        (WebCore::AppendPipeline::~AppendPipeline):
        (WebCore::AppendPipeline::appsrcEndOfAppendCheckerProbe):
        (WebCore::AppendPipeline::handleAppsinkNewSampleFromAnyThread):
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsinkFromAnyThread):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        (WebCore::AppendPipeline::sourceBufferPrivate):
        (WebCore::AppendPipeline::appsinkCaps):
        (WebCore::AppendPipeline::track):
        (WebCore::AppendPipeline::demuxerSrcPadCaps):
        (WebCore::AppendPipeline::playerPrivate):

2018-11-12  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][EME] waitingforkey event should consider decryptors' waiting status
        https://bugs.webkit.org/show_bug.cgi?id=191459

        Reviewed by Carlos Garcia Campos.

        The new cross platform architecture to report waitingforkey and
        recover from it requires a more accurate knowledge of what is
        going on with the decryptors because events are reported only once
        (per key exchange run) and crossplatform only continues if we are
        actually ready to continue, meaning that no decryptors are
        waiting.

        * platform/graphics/gstreamer/GUniquePtrGStreamer.h: Added
        GstIterator deleter.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::setWaitingForKey): Bail
        out if we are requested to not wait anymore but there are still
        waiting decryptors.
        (WebCore::MediaPlayerPrivateGStreamerBase::waitingForKey const):
        Query the pipeline, just a query after pipeline is built and
        manual inspection during build. The query is optimal but sometimes
        we can get this request when the pipeline is under construction so
        queries do not arrive at the decryptors and we have to deliver it
        by ourselves.
        (WebCore::MediaPlayerPrivateGStreamerBase::reportWaitingForKey:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        (WebCore::MediaPlayerPrivateGStreamerBase::reportWaitingForKey:
        Deleted because it is now inlined.
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        (webKitMediaClearKeyDecryptorDecrypt): Fixed small compiler warning.
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (webkit_media_common_encryption_decrypt_class_init): Override
        query method.
        (webkitMediaCommonEncryptionDecryptTransformInPlace): When the
        decryptor is going to block to wait, report before. When the
        decryptor receives the key, report it got it.
        (webkitMediaCommonEncryptionDecryptSinkEventHandler): Do not
        handle waitingforkey here.
        (webkitMediaCommonEncryptionDecryptorQueryHandler): Report if the
        decryptor is waiting.

2018-11-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Silence ATK_XY_PARENT warnings
        https://bugs.webkit.org/show_bug.cgi?id=191504

        Reviewed by Carlos Garcia Campos.

        * accessibility/atk/WebKitAccessibleInterfaceComponent.cpp:
        (atkToContents):
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (textExtents):
        * accessibility/atk/WebKitAccessibleUtil.cpp:
        (contentsRelativeToAtkCoordinateType):

2018-11-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement a new edit command to change the enclosing list type
        https://bugs.webkit.org/show_bug.cgi?id=191487
        <rdar://problem/45955922>

        Reviewed by Ryosuke Niwa.

        Add support for a new edit command that changes the type of the enclosing list element around the selection from
        unordered to ordered list and vice versa. This new edit command is exposed only to internal WebKit2 clients, via
        SPI on WKWebView (`-_changeListType:`).

        This is currently intended for use in Mail compose, but may also be adopted by legacy Notes in the future. As
        such, the behavior of this editing command mostly matches shipping behavior in Mail compose (which is currently
        implemented entirely by Mail). See below for more details.

        Test:   editing/execCommand/change-list-type.html
                WKWebViewEditActions.ChangeListType

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/ChangeListTypeCommand.cpp: Added.
        (WebCore::listConversionTypeForSelection):
        (WebCore::ChangeListTypeCommand::listConversionType):

        Helper that returns a potential list conversion command that may be executed at the given document's selection,
        if any exists. We also use existing logic from Mail here to determine which list to change, by walking up the
        DOM from the lowest common ancestor container of the current selection until we hit the first list element.

        (WebCore::ChangeListTypeCommand::createNewList):

        Helper method to create a new list element to replace the given list, and then clone element data from the given
        list to the new list. This addresses an existing bug in Mail, wherein changing list type for an enclosing list
        which contains inline style properties drops the inline styles, because existing logic in Mail that implements
        this editing command only copies the `class` attribute of the old list to the new list.

        (WebCore::ChangeListTypeCommand::doApply):

        Apply the edit command by running the following steps:
        -   Find the enclosing list element, if any (see above).
        -   Create a new list element of the opposite type as the enclosing list, and clone over element data from the
            list element being replaced.
        -   Insert the new list next to the original list.
        -   Move all children of the original list to the new list.
        -   Remove the original list.
        -   Set the selection to the end of the new list.

        * editing/ChangeListTypeCommand.h: Added.
        * editing/EditAction.h:

        Add a pair of new edit actions for conversion from unordered list to ordered list and vice versa.

        * editing/Editor.cpp:
        (WebCore::Editor::changeSelectionListType):

        Implement this by creating and applying a new ChangeListTypeCommand.

        (WebCore::Editor::canChangeSelectionListType): Deleted.

        Remove this for now, since there's no need for it until full support for edit command validation is implemented.

        * editing/Editor.h:
        * testing/Internals.cpp:
        (WebCore::Internals::changeSelectionListType):
        * testing/Internals.h:
        * testing/Internals.idl:

        Add internal hooks to change list type from layout tests.

2018-11-11  Daniel Bates  <dabates@apple.com>

        [iOS] Draw caps lock indicator in password fields
        https://bugs.webkit.org/show_bug.cgi?id=190565
        <rdar://problem/45262343>

        Reviewed by Dean Jackson.

        Draw the caps lock indicator in a focused password field on iOS. This makes the behavior of password
        fields on iOS more closely match the behavior of password fields on Mac.

        The majority of this patch is implementing PlatformKeyboardEvent::currentCapsLockState() for iOS.
        In Legacy WebKit, the implementation boils down to calling call -[::WebEvent modifierFlags]. In
        Modern WebKit the UIProcess is responsible for -[::WebEvent modifierFlags] and passing it the
        WebProcess to store such that invocations of PlatformKeyboardEvent::currentCapsLockState() consult
        the store in the WebProcess. A smaller part of this patch is having both the legacy and modern
        web views listen for keyboard availability changes so as to update the the caps lock state when
        a hardware keyboard is detached or attached.

        * WebCore.xcodeproj/project.pbxproj:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::capsLockStateMayHaveChanged const): Extracted from EventHandler::internalKeyEvent()
        so that it can shared between WebCore, Modern WebKit, and Legacy WebKit code.
        (WebCore::EventHandler::internalKeyEvent): Modified to call capsLockStateMayHaveChanged().
        * page/EventHandler.h:
        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::PlatformKeyboardEvent::currentCapsLockState): Moved from KeyEventMac.mm.
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Moved from KeyEventMac.mm.
        * platform/ios/KeyEventIOS.mm:
        (WebCore::PlatformKeyboardEvent::currentStateOfModifierKeys): Fetch the current modifier state.
        (WebCore::PlatformKeyboardEvent::currentCapsLockState): Deleted; we now use the Cocoa implementation.
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Deleted; we now use the Cocoa implementation.
        * platform/ios/WebEvent.h:
        * platform/ios/WebEvent.mm:
        (+[WebEvent modifierFlags]): Added.
        * platform/mac/KeyEventMac.mm:
        (WebCore::PlatformKeyboardEvent::currentCapsLockState): Deleted; moved to KeyEventCocoa.mm to be shared
        by both Mac and iOS.
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Deleted; moved to KeyEventCocoa.mm to be shared
        by both Mac and iOS.
        * rendering/RenderThemeCocoa.h:
        * rendering/RenderThemeCocoa.mm:
        (WebCore::RenderThemeCocoa::shouldHaveCapsLockIndicator const): Moved from RenderThemeMac.mm.
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::shouldHaveCapsLockIndicator const): Deleted.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::shouldHaveCapsLockIndicator const): Deleted; moved to RenderThemeCocoa.mm to be
        shared by both Mac and iOS.

2018-11-11  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] In-flow positioned logic is really formatting context dependent.
        https://bugs.webkit.org/show_bug.cgi?id=191512

        Reviewed by Simon Fraser.

        Move block formatting context specific code from FormattingContext to BlockFormattingContext.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::placeInFlowPositionedChildren const): Deleted.
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::inFlowPositionedPositionOffset):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::placeInFlowPositionedChildren const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowPositionedPosition const): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowPositionedPosition): Deleted.
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeInFlowPositionedPosition const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:

2018-11-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Address post-review comments after r237955
        https://bugs.webkit.org/show_bug.cgi?id=191496

        Reviewed by Darin Adler.

        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::paintTextDecoration):
        * style/InlineTextBoxStyle.cpp:
        (WebCore::computeUnderlineOffset):
        * style/InlineTextBoxStyle.h:

2018-11-11  Benjamin Poulain  <benjamin@webkit.org>

        Fix a fixme: rename wtfObjcMsgSend to wtfObjCMsgSend
        https://bugs.webkit.org/show_bug.cgi?id=191492

        Reviewed by Alex Christensen.

        Rename file.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        * page/mac/EventHandlerMac.mm:
        * platform/mac/URLMac.mm:
        * platform/mac/WebCoreNSURLExtras.mm:
        * platform/mac/WebCoreObjCExtras.mm:
        * rendering/RenderThemeMac.mm:

2018-11-10  Benjamin Poulain  <benjamin@webkit.org>

        Fix a fixme: rename wtfObjcMsgSend to wtfObjCMsgSend
        https://bugs.webkit.org/show_bug.cgi?id=191492

        Reviewed by Alex Christensen.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        * page/mac/EventHandlerMac.mm:
        * platform/mac/URLMac.mm:
        * platform/mac/WebCoreNSURLExtras.mm:
        * platform/mac/WebCoreObjCExtras.mm:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor const):

2018-11-10  Megan Gardner  <megan_gardner@apple.com>

        Fix build for 32bit Mac
        https://bugs.webkit.org/show_bug.cgi?id=191511

        Unreviewed Build Fix.

        Build fix, not tests needed.

        Make the apporiate delecrations for 32-bit mac support.

        * editing/mac/DictionaryLookup.mm:

2018-11-10  Simon Fraser  <simon.fraser@apple.com>

        Remove support for -webkit-svg-shadow
        https://bugs.webkit.org/show_bug.cgi?id=187429
        <rdar://problem/41920735>

        Reviewed by Dean Jackson.
        
        -webkit-svg-shadow was a non-standard hack for online iWork, and they no longer use it,
        so remove it. No other browser supports it, and chromestatus say it's used on less than
        0.000001% of pages.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSProperties.json:
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::svgPropertyValue):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialWebkitSvgShadow): Deleted.
        (WebCore::StyleBuilderCustom::applyInheritWebkitSvgShadow): Deleted.
        (WebCore::StyleBuilderCustom::applyValueWebkitSvgShadow): Deleted.
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::didAttachChild):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout):
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::RenderSVGModelObject):
        * rendering/svg/RenderSVGModelObject.h:
        (WebCore::RenderSVGModelObject::repaintRectInLocalCoordinatesExcludingSVGShadow const): Deleted.
        (WebCore::RenderSVGModelObject::hasSVGShadow const): Deleted.
        (WebCore::RenderSVGModelObject::setHasSVGShadow): Deleted.
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::RenderSVGRoot):
        (WebCore::RenderSVGRoot::updateCachedBoundaries):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::updateRepaintBoundingBox):
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::clippedOverflowRectForRepaint):
        (WebCore::SVGRenderSupport::layoutChildren):
        (WebCore::SVGRenderSupport::styleChanged):
        (WebCore::SVGRenderSupport::repaintRectForRendererInLocalCoordinatesExcludingSVGShadow): Deleted.
        (WebCore::SVGRenderSupport::rendererHasSVGShadow): Deleted.
        (WebCore::SVGRenderSupport::setRendererHasSVGShadow): Deleted.
        (WebCore::SVGRenderSupport::intersectRepaintRectWithShadows): Deleted.
        (WebCore::SVGRenderSupport::childAdded): Deleted.
        * rendering/svg/SVGRenderSupport.h:

2018-11-10  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238065.

        Breaks internal builds.

        Reverted changeset:

        "Make it possible to edit images inline"
        https://bugs.webkit.org/show_bug.cgi?id=191352
        https://trac.webkit.org/changeset/238065

2018-11-10  Tim Horton  <timothy_horton@apple.com>

        Make it possible to edit images inline
        https://bugs.webkit.org/show_bug.cgi?id=191352
        <rdar://problem/30107985>

        Reviewed by Dean Jackson.

        Tests: editing/images/basic-editable-image.html
               editing/images/reparent-editable-image-maintains-strokes.html

        Add the beginnings of a mechanism to replace images with a special attribute
        with a native drawing view in the UI process.

        * page/Settings.yaml:
        Add a setting to control whether images become natively editable when they
        have the x-apple-editable-image attribute.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::editableImageViewID const):
        Lazily generate an EmbeddedViewID and persist it on the <img> element.

        * html/HTMLImageElement.h:
        Rearrange the service controls methods to sit before the members.
        Add m_editableImageViewID and editableImageViewID().

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::nextEmbeddedViewID):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setContentsToEmbeddedView):
        Add a new ContentsLayerPurpose, EmbeddedView, which is only supported
        on Cocoa platforms and when using RemoteLayerTree.
        Add ContentsLayerEmbeddedViewType, which currently only has the EditableImage type.
        Add setContentsToEmbeddedView, which takes a ContentsLayerEmbeddedViewType
        and an EmbeddedViewID to uniquely identify and communicate about the
        embedded view (which may move between layers, since it is tied to an element).

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createPlatformCALayerForEmbeddedView):
        (WebCore::GraphicsLayerCA::setContentsToEmbeddedView):
        When setting GraphicsLayer's contents to an embedded view, we use
        a special PlatformCALayer factory that takes the EmbeddedViewID and type.
        GraphicsLayerCARemote will override this and make a correctly-initialized
        PlatformCALayerRemote that keeps track of the EmbeddedViewID.

        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::operator<<):
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::PlatformCALayerCocoa):
        (WebCore::PlatformCALayerCocoa::embeddedViewID const):
        Add stubs and logging for EmbeddedViewID on PlatformCALayer.
        These will be overridden by PlatformCALayerRemote to do more interesting things.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::isEditableImage const):
        Add a getter that return true if the setting is enabled and
        x-apple-editable-image is empty or true.

        (WebCore::RenderImage::requiresLayer const):
        RenderImage requires a layer either if RenderReplaced does, or we are an
        editable image.

        * rendering/RenderImage.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldBeNormalFlowOnly const):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):
        Push the EmbeddedViewID and type down to GraphicsLayer for editable images.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingLayer const):
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore const):
        (WebCore::RenderLayerCompositor::reasonsForCompositing const):
        (WebCore::RenderLayerCompositor::requiresCompositingForEditableImage const):
        * rendering/RenderLayerCompositor.h:
        Make editable images require compositing implicitly.

2018-11-09  Zalan Bujtas  <zalan@apple.com>

        [iOS] Issue initial paint soon after the visuallyNonEmpty milestone is fired.
        https://bugs.webkit.org/show_bug.cgi?id=191078
        <rdar://problem/45736178>

        Reviewed by Antti Koivisto.

        1. Improve visuallyNonEmpty milestone confidence level.
            Ignore whitespace and non visible text content.
            Parsing the main document should not necessarily fire the milestone. Check if there's any pending scripts/css/font loading.
            Check if the html/body is actually visible.

        2. Issue initial paint soon after the milestone fires.
            Use a 0ms timer to flush the initial paint.
            Throttle additional flushes for 500ms and 1.5s (original behaviour).

        3. Suspend optional style recalcs and layouts while painting is being throttled.
           When parsing yields we initiate a 0ms style recalc/layout timer.
           These optional layouts produce content that we have no intention to paint. 

        * dom/Document.cpp:
        (WebCore::Document::scheduleStyleRecalc):
        (WebCore::Document::shouldScheduleLayout):
        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::resetLayoutMilestones):
        (WebCore::FrameView::qualifiesAsVisuallyNonEmpty const):
        (WebCore::FrameView::updateSignificantRenderedTextMilestoneIfNeeded):
        (WebCore::FrameView::updateIsVisuallyNonEmpty):
        * page/FrameView.h:
        (WebCore::FrameView::incrementVisuallyNonEmptyCharacterCount): Ignore whitespace characters. Some pages start with plenty of whitespace only content.
        * platform/graphics/FontCascade.h:
        * rendering/RenderText.cpp: Check whether the text is actually visible at this point.
        (WebCore::RenderText::RenderText):

2018-11-09  John Wilander  <wilander@apple.com>

        Add ability to configure document.cookie lifetime cap through user defaults
        https://bugs.webkit.org/show_bug.cgi?id=191480
        <rdar://problem/45240871>

        Reviewed by Chris Dumez.

        No new tests. Existing test makes sure we don't regress.

        This change makes the capped lifetime in seconds configurable through
        user defaults.

        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::setAgeCapForClientSideCookies):
        (WebCore::NetworkStorageSession::setShouldCapLifetimeForClientSideCookies): Deleted.
            Renamed setAgeCapForClientSideCookies().
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::filterCookies):
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):

2018-11-09  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238047.

        Introduced layout test failures on iOS simulator.

        Reverted changeset:

        "[iOS] Draw caps lock indicator in password fields"
        https://bugs.webkit.org/show_bug.cgi?id=190565
        https://trac.webkit.org/changeset/238047

2018-11-09  Tim Horton  <timothy_horton@apple.com>

        Normal-flow-only flex items don't correctly respect z-index
        https://bugs.webkit.org/show_bug.cgi?id=191486

        Reviewed by Simon Fraser.

        Test: css3/flexbox/z-index-with-normal-flow-only.html

        * rendering/RenderLayer.cpp:
        (WebCore::canCreateStackingContext):
        r125693 did not ensure that flex items which would otherwise be
        normal-flow-only would be put into the z-order tree when necessary.
        Fix by respecting the same trigger we use to make layers for flex items;
        namely, not having auto z-index.

2018-11-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Implement SPI on WKWebView to increase and decrease list levels
        https://bugs.webkit.org/show_bug.cgi?id=191471
        <rdar://problem/45952472>

        Reviewed by Tim Horton.

        Add new method stubs for changing the list type for the current selection (to be implemented in a future patch).

        * editing/Editor.cpp:
        (WebCore::Editor::canChangeSelectionListType):
        (WebCore::Editor::changeSelectionListType):
        * editing/Editor.h:

2018-11-09  Keith Rollin  <krollin@apple.com>

        Unreviewed build fix after https://bugs.webkit.org/show_bug.cgi?id=191324

        Remove the use of .xcfilelists until their side-effects are better
        understood.

        * WebCore.xcodeproj/project.pbxproj:

2018-11-09  Jer Noble  <jer.noble@apple.com>

        SourceBuffer throws an error when appending a second init segment after changeType().
        https://bugs.webkit.org/show_bug.cgi?id=191474

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-changetype-second-init.html

        When encountering an initialization segment after changeType(), add the parsed codec types
        to the list of allowed codecs.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::validateInitializationSegment):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::supportsType):
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::canSwitchToType):
        * platform/mock/mediasource/MockSourceBufferPrivate.h:

2018-11-09  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] AVVideoCaptureSource reports incorrect size when frames are scaled
        https://bugs.webkit.org/show_bug.cgi?id=191479
        <rdar://problem/45952201>

        Reviewed by Jer Noble.

        No new tests, tested manually.

        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::standardVideoSizes): Drive-by fix: add a few more standard
        video frame sizes, correct a typo.
        (WebCore::RealtimeVideoSource::bestSupportedSizeAndFrameRate): Drive-by fix: don't consider
        rescaled sized when we already have an exact or aspect ratio match because it won't be used.

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        (WebCore::AVVideoCaptureSource::width const): Deleted.
        (WebCore::AVVideoCaptureSource::height const): Deleted.
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setSizeAndFrameRateWithPreset): Delete m_requestedSize.
        (WebCore::AVVideoCaptureSource::shutdownCaptureSession): Delete m_width and m_height.
        (WebCore::AVVideoCaptureSource::processNewFrame): Don't call setSize with captured size,
        the frame may be resized before deliver.

2018-11-09  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed MSVC build fix after r238039 (and r238046).

        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        * bindings/js/JSWorkerGlobalScopeBase.h:

2018-11-09  Basuke Suzuki  <basuke.suzuki@sony.com>

        [Curl][WebKit] Implement Proxy configuration API.
        https://bugs.webkit.org/show_bug.cgi?id=189053

        Reviewed by Youenn Fablet.

        Added API to set proxy from the app.

        No new tests because there's no behaviour change in WebCore.

        * platform/network/NetworkStorageSession.h:
        * platform/network/curl/CurlContext.h:
        (WebCore::CurlContext::setProxySettings):
        * platform/network/curl/CurlProxySettings.h:
        * platform/network/curl/NetworkStorageSessionCurl.cpp:
        (WebCore::NetworkStorageSession::setProxySettings const):

2018-11-09  Antti Koivisto  <antti@apple.com>

        Use OptionSet for layout milestones
        https://bugs.webkit.org/show_bug.cgi?id=191470

        Reviewed by Dean Jackson.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didReachLayoutMilestone):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::addPaintPendingMilestones):
        (WebCore::FrameView::fireLayoutRelatedMilestonesIfNeeded):
        (WebCore::FrameView::firePaintRelatedMilestonesIfNeeded):
        * page/FrameView.h:
        * page/LayoutMilestone.h: Copied from Source/WebCore/page/LayoutMilestones.h.

        Renamed to appease WK2 IPC code generation.

        * page/LayoutMilestones.h: Removed.
        * page/Page.cpp:
        (WebCore::Page::addLayoutMilestones):
        (WebCore::Page::removeLayoutMilestones):
        (WebCore::Page::isCountingRelevantRepaintedObjects const):
        * page/Page.h:
        (WebCore::Page::requestedLayoutMilestones const):

2018-11-09  Daniel Bates  <dabates@apple.com>

        [iOS] Draw caps lock indicator in password fields
        https://bugs.webkit.org/show_bug.cgi?id=190565
        <rdar://problem/45262343>

        Reviewed by Dean Jackson.

        Draw the caps lock indicator in a focused password field on iOS. This makes the behavior of password
        fields on iOS more closely match the behavior of password fields on Mac. For now, we only draw the
        indicator when caps locks is enabled via the hardware keyboard. We will look to support the software
        keyboard in a subsequent commit (see <https://bugs.webkit.org/show_bug.cgi?id=191475>).

        The majority of this patch is implementing PlatformKeyboardEvent::currentCapsLockState() for iOS.
        In Legacy WebKit, the implementation boils down to calling call -[::WebEvent modifierFlags]. In
        Modern WebKit the UIProcess is responsible for -[::WebEvent modifierFlags] and passing it the
        WebProcess to store such that invocations of PlatformKeyboardEvent::currentCapsLockState() consult
        the store in the WebProcess. A smaller part of this patch is having both the legacy and modern
        web views listen for keyboard availability changes so as to update the the caps lock state when
        a hardware keyboard is detached or attached.

        * WebCore.xcodeproj/project.pbxproj:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::capsLockStateMayHaveChanged const): Extracted from EventHandler::internalKeyEvent()
        so that it can shared between WebCore, Modern WebKit, and Legacy WebKit code.
        (WebCore::EventHandler::internalKeyEvent): Modified to call capsLockStateMayHaveChanged().
        * page/EventHandler.h:
        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::PlatformKeyboardEvent::currentCapsLockState): Moved from KeyEventMac.mm.
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Moved from KeyEventMac.mm.
        * platform/ios/KeyEventIOS.mm:
        (WebCore::PlatformKeyboardEvent::currentStateOfModifierKeys): Fetch the current modifier state.
        (WebCore::PlatformKeyboardEvent::currentCapsLockState): Deleted; we now use the Cocoa implementation.
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Deleted; we now use the Cocoa implementation.
        * platform/ios/WebEvent.h:
        * platform/ios/WebEvent.mm:
        (+[WebEvent modifierFlags]): Added.
        * platform/mac/KeyEventMac.mm:
        (WebCore::PlatformKeyboardEvent::currentCapsLockState): Deleted; moved to KeyEventCocoa.mm to be shared
        by both Mac and iOS.
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Deleted; moved to KeyEventCocoa.mm to be shared
        by both Mac and iOS.
        * rendering/RenderThemeCocoa.h:
        * rendering/RenderThemeCocoa.mm:
        (WebCore::RenderThemeCocoa::shouldHaveCapsLockIndicator const): Moved from RenderThemeMac.mm.
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::shouldHaveCapsLockIndicator const): Deleted.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::shouldHaveCapsLockIndicator const): Deleted; moved to RenderThemeCocoa.mm to be
        shared by both Mac and iOS.

2018-11-09  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix WinCairo build after r238039.

        * bindings/js/JSWorkerGlobalScopeBase.h:

2018-11-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        Extensions3DOpenGLES.h:  warning: 'blitFramebuffer' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
        https://bugs.webkit.org/show_bug.cgi?id=191451

        Reviewed by Dean Jackson.

        No new tests because there is no behavior change.

        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        (WebCore::Extensions3DOpenGLES::setEXTContextLostCallback): Deleted unused method.
        * platform/graphics/opengl/Extensions3DOpenGLES.h: Marked 'override'.

2018-11-09  Andy Estes  <aestes@apple.com>

        [Payment Request] canMakePayment() should not consider serialized payment method data
        https://bugs.webkit.org/show_bug.cgi?id=191432

        Reviewed by Dean Jackson.

        In https://github.com/w3c/payment-request/pull/806, we're changing the specification of
        canMakePayment() to not consider serialized payment method data when deciding if a payment
        method is supported. For Apple Pay, this means we resolve to true for
        "https://apple.com/apple-pay", even if an ApplePayRequest is omitted or is missing required
        fields.

        Added test cases to
        http/tests/paymentrequest/payment-request-canmakepayment-method.https.html and
        http/tests/paymentrequest/payment-request-show-method.https.html.

        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::canMakePayment):

2018-11-09  Andy Estes  <aestes@apple.com>

        [Payment Request] PaymentResponse.details should be updated when the user accepts a retried payment
        https://bugs.webkit.org/show_bug.cgi?id=191440

        Reviewed by Dean Jackson.

        PaymentResponse.details was being initialized in the PaymentResponse constructor and never
        updated when the user accepts a retried payment. We need to update it.

        Added a test case to http/tests/paymentrequest/payment-response-retry-method.https.html.

        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::accept):
        * Modules/paymentrequest/PaymentResponse.cpp:
        (WebCore::PaymentResponse::PaymentResponse):
        (WebCore::PaymentResponse::setDetailsFunction):
        * Modules/paymentrequest/PaymentResponse.h:

2018-11-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        MediaPlayerPrivateMediaFoundation.h: warning: 'GetService' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
        https://bugs.webkit.org/show_bug.cgi?id=191453

        Reviewed by Per Arne Vollan.

        No new tests because there is no behavior change.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h: Marked with 'override' and removed 'virtual'.

2018-11-09  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix internal build on macOS.

        'Export' is defined in several headers.

        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMGlobalObject.h:
        * bridge/jsc/BridgeJSC.cpp:
        * bridge/jsc/BridgeJSC.h:

2018-11-09  Chris Dumez  <cdumez@apple.com>

        HTML form validation bubble disappears
        https://bugs.webkit.org/show_bug.cgi?id=191418

        Reviewed by Simon Fraser.

        If we validate a form and find an invalid form control, we'll scroll it into view and show
        the validation bubble. However, scrolling the element into view may be an asynchronous
        operation, in which case it would discard the validation bubble prematurely because scrolling
        hides the validation bubble. To address the issue, we now show the validation message
        asynchronously after focusing the element (and potentially scrolling it into view).

        Test: fast/forms/scroll-into-view-and-show-validation-message.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::focusAndShowValidationMessage):

2018-11-09  Brent Fulgham  <bfulgham@apple.com>

        [Windows][DirectX] Be more rigors about BeginFigure/EndFigure and Close operations. 
        https://bugs.webkit.org/show_bug.cgi?id=191452
        <rdar://problem/45933964>

        Reviewed by Zalan Bujtas.

        Do a better job of balancing the BeginFigure/EndFigure calls in
        the PathDirect2D implementation. Failure to do so puts the Geometry sink
        into an error state that prevents it from producing drawing output.
      

        * platform/graphics/Path.h:
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::drawPath): Flush is needed here.
        (WebCore::GraphicsContext::fillPath): Ditto.
        (WebCore::GraphicsContext::strokePath): Ditto.
        * platform/graphics/win/PathDirect2D.cpp:
        (WebCore::Path::drawDidComplete):
        (WebCore::Path::closeAnyOpenGeometries):
        (WebCore::Path::transform):
        (WebCore::Path::openFigureAtCurrentPointIfNecessary):
        (WebCore::Path::moveTo):
        (WebCore::Path::closeSubpath):

2018-11-09  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Fix failing imported/w3c/web-platform-tests/media-source/mediasource-changetype-play.html test
        https://bugs.webkit.org/show_bug.cgi?id=191396

        Reviewed by Eric Carlson.

        When changeType() is called, exempt video and text tracks (in addition to just audio tracks)
        from "same codec" requirements.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::validateInitializationSegment):

2018-11-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r236365): [GTK] Many form-related tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=189993

        Reviewed by Michael Catanzaro.

        Only the first form data element is added to the message body due to a return added by mistake in r236365.

        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupMessageBody const): Remove return.

2018-11-09  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move some code from InlineFormattingContext::Line to InlineFormattingContext/Geometry
        https://bugs.webkit.org/show_bug.cgi?id=191445

        Reviewed by Antti Koivisto.

        The idea here is that Line should not have to deal with all the post processig tasks like the runs final aligments.
        (The line class would eventually turn into a collection of random things).

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::closeLine const):
        (WebCore::Layout::InlineFormattingContext::appendContentToLine const):
        (WebCore::Layout::InlineFormattingContext::layoutInlineContent const):
        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::Line::contentLogicalLeft const):
        (WebCore::Layout::InlineFormattingContext::Line::lastRunType const):
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::adjustedLineLogicalLeft):
        (WebCore::Layout::InlineFormattingContext::Geometry::justifyRuns):
        (WebCore::Layout::InlineFormattingContext::Geometry::computeExpansionOpportunities):
        * layout/inlineformatting/Line.cpp:
        (WebCore::Layout::InlineFormattingContext::Line::Line):
        (WebCore::Layout::InlineFormattingContext::Line::init):
        (WebCore::Layout::InlineFormattingContext::Line::contentLogicalRight const):
        (WebCore::Layout::InlineFormattingContext::Line::appendContent):
        (WebCore::Layout::InlineFormattingContext::Line::close):
        (WebCore::Layout::adjustedLineLogicalLeft): Deleted.
        (WebCore::Layout::InlineFormattingContext::Line::contentLogicalRight): Deleted.
        (WebCore::Layout::InlineFormattingContext::Line::computeExpansionOpportunities): Deleted.
        (WebCore::Layout::InlineFormattingContext::Line::justifyRuns): Deleted.

2018-11-09  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GStreamer build warning fix

        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::newSampleCallback): Timesamp()
        returns a uint32_t, fix format string accordingly.

2018-11-08  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add an SPI to allow WebView clients to add additional supported image formats
        https://bugs.webkit.org/show_bug.cgi?id=190454

        Reviewed by Simon Fraser.

        Add an SPI to allow additional supported image formats in WebView. These
        additional formats can be set in the WKWebViewConfiguration as an NSArray
        of NStrings. Each string represents an image source type aka UTI.

        The ImageSourceType in the functions' names will be replaced by ImageType.
        ImageType in this context is the image UTI (Uniform Type Identifier).

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::supportedImageMIMETypes):
        (WebCore::MIMETypeRegistry::additionalSupportedImageMIMETypes):
        (WebCore::supportedImageMIMETypesForEncoding):
        (WebCore::MIMETypeRegistry::isSupportedImageMIMEType):
        * platform/MIMETypeRegistry.h:
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoderCG::filenameExtension const):
        (WebCore::ImageDecoderCG::encodedDataStatus const):
        * platform/graphics/cg/ImageSourceCG.h:
        * platform/graphics/cg/ImageSourceCGMac.mm:
        (WebCore::MIMETypeForImageType):
        (WebCore::preferredExtensionForImageType):
        (WebCore::MIMETypeForImageSourceType): Deleted.
        (WebCore::preferredExtensionForImageSourceType): Deleted.
        * platform/graphics/cg/ImageSourceCGWin.cpp:
        (WebCore::MIMETypeForImageType):
        (WebCore::preferredExtensionForImageType):
        (WebCore::MIMETypeForImageSourceType): Deleted.
        (WebCore::preferredExtensionForImageSourceType): Deleted.
        * platform/graphics/cg/UTIRegistry.cpp:
        (WebCore::defaultSupportedImageTypes):
        (WebCore::additionalSupportedImageTypes):
        (WebCore::setAdditionalSupportedImageTypes):
        (WebCore::isSupportedImageType):
        (WebCore::supportedDefaultImageSourceTypes): Deleted.
        (WebCore::isSupportImageSourceType): Deleted.
        * platform/graphics/cg/UTIRegistry.h:

2018-11-08  Megan Gardner  <megan_gardner@apple.com>

        Adopt Reveal Framework to replace Lookup
        https://bugs.webkit.org/show_bug.cgi?id=191097

        Reviewed by Tim Horton.

        Reveal is not currently testable.

        The Reveal framework does the same job as Lookup and DataDectors.
        In this patch we switch from using Lookup to determine what text
        to select and define to using Reveal and RVItems. Since this
        code needs to work on older systems, and Reveal is newer, we also need
        to keep around the old code for old systems so that they can also
        continue to work. Eventually we will remove this code and also likly switch
        to passing RVItems across from the web process rather than making them
        on each side.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/mac/DictionaryLookup.h:
        * editing/mac/DictionaryLookup.mm:

        Create a delegate to respond to Reveal and help draw the string or highlight.

        (-[WebRevealHighlight initWithHighlightRect:useDefaultHighlight:attributedString:]):
        (-[WebRevealHighlight setClearTextIndicator:]):
        (-[WebRevealHighlight revealContext:rectsForItem:]):
        (-[WebRevealHighlight revealContext:drawRectsForItem:]):
        (-[WebRevealHighlight revealContext:shouldUseDefaultHighlightForItem:]):
        (-[WebRevealHighlight revealContext:stopHighlightingItem:]):
        (WebCore::showPopupOrCreateAnimationController):

        Unify the code paths and utalize the Reveal framework to create and/or display the popovers.

        (WebCore::DictionaryLookup::showPopup):
        (WebCore::DictionaryLookup::animationControllerForPopup):

        Pipe the new callback through.

        (WebCore::tokenRange): Deleted.

        Only used with Lookup

        (WebCore::selectionContainsPosition): Deleted.

        Only used with Lookup.

        * editing/mac/DictionaryLookupLegacy.mm: Copied from Source/WebCore/editing/mac/DictionaryLookup.mm.

        Keep a copy of the previous implementation of DictionaryLookup, because Reveal not available on older
        system.

        (WebCore::tokenRange):
        (WebCore::selectionContainsPosition):
        (WebCore::expandSelectionByCharacters):
        (WebCore::showPopupOrCreateAnimationController):
        (WebCore::DictionaryLookup::showPopup):
        (WebCore::DictionaryLookup::hidePopup):
        (WebCore::DictionaryLookup::animationControllerForPopup):

2018-11-08  Keith Rollin  <krollin@apple.com>

        Create .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=191324
        <rdar://problem/45852819>

        Reviewed by Alex Christensen.

        As part of preparing for enabling XCBuild, create and use .xcfilelist
        files. These files are using during Run Script build phases in an
        Xcode project. If a Run Script build phase produces new files that are
        used later as inputs to subsequent build phases, XCBuild needs to know
        about these files. These files can be either specified in an "output
        files" section of the Run Script phase editor, or in .xcfilelist files
        that are associated with the Run Script build phase.

        This patch takes the second approach. It consists of three sets of changes:

        - Modify the DerivedSources.make files to have a
          'print_all_generated_files" target that produces a list of the files
          they create.

        - Create a shell script that produces .xcfilelist files from the
          output of the previous step, as well as for the files created in the
          Generate Unified Sources build steps.

        - Add the new .xcfilelist files to the associated projects.

        Note that, with these changes, the Xcode workspace and projects can no
        longer be fully loaded into Xcode 9. Xcode will attempt to load the
        projects that have .xcfilelist files associated with them, but will
        fail and display a placeholder for those projects instead. It's
        expected that all developers are using Xcode 10 by now and that not
        being able to load into Xcode 9 is not a practical issue. Keep in mind
        that this is strictly an IDE issue, and that the projects can still be
        built with `xcodebuild`.

        Also note that the shell script that creates the .xcfilelist files can
        also be used to verify that the set of files that's currently checked
        in is up-to-date. This checking can be used as part of a check-in hook
        or part of check-webkit-style to sooner catch cases where the
        .xcfilelist files need to be regenerated.

        No new tests -- no changed functionality.

        * DerivedSources.make:
        * DerivedSources.xcfilelist: Added.
        * UnifiedSources.xcfilelist: Added.
        * WebCore.xcodeproj/project.pbxproj:

2018-11-08  Don Olmstead  <don.olmstead@sony.com>

        Provide generic implementation of SSLKeyGenerator functions
        https://bugs.webkit.org/show_bug.cgi?id=191428

        Reviewed by Michael Catanzaro.

        No new tests. No change in behavior.

        Both SSLKeyGeneratorGLib and SSLKeyGeneratorIOS were stub
        implementations. Since <keygen> is deprecated it looks unlikely that
        an implementation is actually needed, however an implementation is
        needed until support is reomved.

        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/SSLKeyGenerator.cpp: Added.
        (WebCore::getSupportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):
        * platform/SourcesGLib.txt:
        * platform/glib/SSLKeyGeneratorGLib.cpp: Removed.
        * platform/ios/SSLKeyGeneratorIOS.cpp: Removed.

2018-11-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Unprefix text-decoration CSS3 properties
        https://bugs.webkit.org/show_bug.cgi?id=127193

        Reviewed by Dean Jackson.

        The properties are stable, and there is interop.

        Test: fast/css3-text/css3-text-decoration/unprefix.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSProperties.json:
        * css/StyleResolver.cpp:
        (WebCore::shouldApplyPropertyInParseOrder):
        (WebCore::isValidVisitedLinkProperty):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::isColorPropertyID):
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::detectContentInRange):
        * rendering/TextDecorationPainter.cpp:
        (WebCore::decorationColor):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::colorIncludingFallback const):
        (WebCore::RenderStyle::visitedDependentColor const):

2018-11-08  Timothy Hatcher  <timothy@apple.com>

        Add experimental support for a `supported-color-schemes` CSS property.
        https://bugs.webkit.org/show_bug.cgi?id=191319
        rdar://problem/45852261

        Reviewed by Dean Jackson.

        Tests: css-dark-mode/parse-supported-color-schemes.html
               css-dark-mode/supported-color-schemes-css.html

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::updateSupportedColorSchemes):
        (WebCore::StyleBuilderConverter::convertSupportedColorSchemes):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::colorFromPrimitiveValue const):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeSupportedColorSchemes):
        (WebCore::CSSPropertyParser::parseSingleValue):
        * dom/Document.cpp:
        (WebCore::Document::resetLinkColor):
        (WebCore::Document::resetVisitedLinkColor):
        (WebCore::Document::resetActiveLinkColor):
        (WebCore::Document::processSupportedColorSchemes):
        (WebCore::Document::useDarkAppearance const):
        (WebCore::Document::styleColorOptions const):
        * dom/Document.h:
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::createFragment):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawFocusIfNeededInternal):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::paint):
        * page/FrameView.cpp:
        (WebCore::FrameView::useDarkAppearance const):
        (WebCore::FrameView::paintScrollCorner):
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageForLink):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxDecorations):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintPlatformDocumentMarker):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxFillLayers):
        (WebCore::RenderBox::paintBackground):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::selectionColor const):
        (WebCore::RenderElement::selectionBackgroundColor const):
        (WebCore::RenderElement::paintFocusRing):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintAreaElementFocusRing):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::paintContents):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::useDarkAppearance const):
        (WebCore::RenderObject::styleColorOptions const):
        * rendering/RenderObject.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::usingDarkAppearance const): Deleted.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::documentViewFor const):
        (WebCore::RenderThemeMac::adjustMenuListStyle const):
        (WebCore::RenderThemeMac::paintCellAndSetFocusedElementNeedsRepaintIfNecessary):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::usingDarkAppearance const): Deleted.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::supportedColorSchemes const):
        (WebCore::RenderStyle::setSupportedColorSchemes):
        (WebCore::RenderStyle::initialSupportedColorSchemes):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleSupportedColorSchemes.h: Added.
        (WebCore::StyleSupportedColorSchemes::StyleSupportedColorSchemes):
        (WebCore::StyleSupportedColorSchemes::operator== const):
        (WebCore::StyleSupportedColorSchemes::operator!= const):
        (WebCore::StyleSupportedColorSchemes::isAuto const):
        (WebCore::StyleSupportedColorSchemes::isOnly const):
        (WebCore::StyleSupportedColorSchemes::colorSchemes const):
        (WebCore::StyleSupportedColorSchemes::add):
        (WebCore::StyleSupportedColorSchemes::contains const):
        (WebCore::StyleSupportedColorSchemes::setAllowsTransformations):
        (WebCore::StyleSupportedColorSchemes::allowsTransformations const):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw):

2018-11-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Restrict domains at the target level instead of only at the window level
        https://bugs.webkit.org/show_bug.cgi?id=191344

        Reviewed by Devin Rousso.

        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        Remove Inspector domain from workers. It was unused anyways.

2018-11-08  Dean Jackson  <dino@apple.com>

        Add a String literal that returns a String
        https://bugs.webkit.org/show_bug.cgi?id=191425
        <rdar://problem/45914556>

        Reviewed by Sam Weinig.

        Use _str where possible.

        API Test in WPT.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::computeReferrer):
        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::loggingString):
        * Modules/webdatabase/OriginLock.cpp:
        (WebCore::OriginLock::lockFileNameForPath):
        * css/CSSBasicShapes.cpp:
        (WebCore::updateCornerRadiusWidthAndHeight):
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getParameter):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getParameter):
        * loader/LinkHeader.cpp:
        (WebCore::parseParameterValue):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::preloadIfNeeded):
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::platform):
        * platform/DateComponents.cpp:
        (WebCore::DateComponents::toString const):
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::keyIdentifierForKeyEvent):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::suffix const):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::setText):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::userInterfaceDirectionPolicy):
        (WebCore::InternalSettings::systemLayoutDirection):
        * testing/Internals.cpp:
        (WebCore::Internals::shadowRootType const):
        (WebCore::Internals::getCurrentCursorInfo):

2018-11-08  Jonathan Hammer  <jonathan@e3software.com>

        Plain text drag in contenteditable is always DragOperationCopy, never DragOperationMove
        https://bugs.webkit.org/show_bug.cgi?id=191228
        <rdar://problem/45786830>

        Reviewed by Wenson Hsieh.

        DragController::beginDrag should not call cleanupAfterSystemDrag because
        the drag is still in progress even after the call to m_client.beginDrag()
        returns. This is in contrast to DragController::doSystemDrag, where the
        call to cleanupAfterSystemDrag is appropriate because the drag has
        concluded by the time m_client.startDrag() returns.

        Test: fast/events/drag-and-drop-move-not-copy.html

        * page/DragController.cpp:
        (WebCore::DragController::beginDrag):

2018-11-08  Zalan Bujtas  <zalan@apple.com>

        [BFC][IFC] InlineFormattingContext::Line::alignRuns() should take care of all the alignments.
        https://bugs.webkit.org/show_bug.cgi?id=191414

        Reviewed by Antti Koivisto.

        * layout/inlineformatting/Line.cpp:
        (WebCore::Layout::InlineFormattingContext::Line::close):

2018-11-08  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import CTAP device request/response converters from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=190784
        <rdar://problem/45460333>

        Reviewed by Brent Fulgham.

        This patch imports Chromium's CTAP device request/response converters:
        https://fidoalliance.org/specs/fido-v2.0-ps-20170927/fido-client-to-authenticator-protocol-v2.0-ps-20170927.html#message-encoding
        1. It directly imports the following files and suit them to WebKit's coding style:
        https://cs.chromium.org/chromium/src/device/fido/device_response_converter.cc?l=20&rcl=098dfd90850ffa84c27a884ab75edd2d99c4ec45
        https://cs.chromium.org/chromium/src/device/fido/device_response_converter.h?rcl=098dfd90850ffa84c27a884ab75edd2d99c4ec45
        https://cs.chromium.org/chromium/src/device/fido/authenticator_get_info_response.cc?rcl=098dfd90850ffa84c27a884ab75edd2d99c4ec45
        https://cs.chromium.org/chromium/src/device/fido/authenticator_get_info_response.h?rcl=098dfd90850ffa84c27a884ab75edd2d99c4ec45
        https://cs.chromium.org/chromium/src/device/fido/authenticator_supported_options.cc?rcl=098dfd90850ffa84c27a884ab75edd2d99c4ec45
        https://cs.chromium.org/chromium/src/device/fido/authenticator_supported_options.h?rcl=098dfd90850ffa84c27a884ab75edd2d99c4ec45
        https://cs.chromium.org/chromium/src/device/fido/ctap_request_unittest.cc?rcl=098dfd90850ffa84c27a884ab75edd2d99c4ec45
        https://cs.chromium.org/chromium/src/device/fido/ctap_response_unittest.cc?rcl=098dfd90850ffa84c27a884ab75edd2d99c4ec45
        https://cs.chromium.org/chromium/src/device/fido/fido_test_data.h?l=1&rcl=098dfd90850ffa84c27a884ab75edd2d99c4ec45
        2. It gathers the following methods into DeviceRequestConverter:
        CtapGetAssertionRequest::EncodeAsCBOR()
        CtapMakeCredentialRequest::EncodeAsCBOR()
        PublicKeyCredentialDescriptor::ConvertToCBOR()
        PublicKeyCredentialParams::ConvertToCBOR()
        PublicKeyCredentialRpEntity::ConvertToCBOR()
        PublicKeyCredentialUserEntity::ConvertToCBOR()
        3. It also apply a patch from Chromium to CBORValue:
        https://chromium.googlesource.com/chromium/src/+/7b6fbff35cd8e4d508f08e1cd93b4aa0a0dc402c%5E%21/

        Besides importing things from Chromium, it also implements UserVerificationRequirement for both
        PublicKeyCredentialCreationOptions and PublicKeyCredentialRequestOptions such that both options
        can specify more dimensions of a desired authenticator.

        Covered by API tests.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/webauthn/PublicKeyCredentialCreationOptions.h:
        (WebCore::PublicKeyCredentialCreationOptions::AuthenticatorSelectionCriteria::encode const):
        (WebCore::PublicKeyCredentialCreationOptions::AuthenticatorSelectionCriteria::decode):
        * Modules/webauthn/PublicKeyCredentialCreationOptions.idl:
        * Modules/webauthn/PublicKeyCredentialRequestOptions.h:
        (WebCore::PublicKeyCredentialRequestOptions::encode const):
        (WebCore::PublicKeyCredentialRequestOptions::decode):
        * Modules/webauthn/PublicKeyCredentialRequestOptions.idl:
        * Modules/webauthn/UserVerificationRequirement.h: Copied from Source/WebCore/Modules/webauthn/PublicKeyCredentialRequestOptions.idl.
        * Modules/webauthn/UserVerificationRequirement.idl: Copied from Source/WebCore/Modules/webauthn/PublicKeyCredentialRequestOptions.idl.
        * Modules/webauthn/cbor/CBORValue.cpp:
        (cbor::CBORValue::CBORValue):
        (cbor::CBORValue::getBool const):
        * Modules/webauthn/cbor/CBORValue.h:
        * Modules/webauthn/fido/AuthenticatorGetInfoResponse.cpp: Added.
        (fido::toArrayValue):
        (fido::AuthenticatorGetInfoResponse::AuthenticatorGetInfoResponse):
        (fido::AuthenticatorGetInfoResponse::setMaxMsgSize):
        (fido::AuthenticatorGetInfoResponse::setPinProtocols):
        (fido::AuthenticatorGetInfoResponse::setExtensions):
        (fido::AuthenticatorGetInfoResponse::setOptions):
        (fido::encodeAsCBOR):
        * Modules/webauthn/fido/AuthenticatorGetInfoResponse.h: Added.
        * Modules/webauthn/fido/AuthenticatorSupportedOptions.cpp: Added.
        (fido::AuthenticatorSupportedOptions::setSupportsResidentKey):
        (fido::AuthenticatorSupportedOptions::setUserVerificationAvailability):
        (fido::AuthenticatorSupportedOptions::setUserPresenceRequired):
        (fido::AuthenticatorSupportedOptions::setClientPinAvailability):
        (fido::AuthenticatorSupportedOptions::setIsPlatformDevice):
        (fido::convertToCBOR):
        * Modules/webauthn/fido/AuthenticatorSupportedOptions.h: Added.
        * Modules/webauthn/fido/DeviceRequestConverter.cpp: Added.
        (fido::convertRpEntityToCBOR):
        (fido::convertUserEntityToCBOR):
        (fido::convertParametersToCBOR):
        (fido::convertDescriptorToCBOR):
        (fido::encodeMakeCredenitalRequestAsCBOR):
        (fido::encodeGetAssertionRequestAsCBOR):
        (fido::encodeEmptyAuthenticatorRequest):
        * Modules/webauthn/fido/DeviceRequestConverter.h: Copied from Source/WebCore/Modules/webauthn/fido/FidoConstants.h.
        * Modules/webauthn/fido/DeviceResponseConverter.cpp: Added.
        (fido::convertStringToProtocolVersion):
        (fido::getResponseCode):
        (fido::getCredentialId):
        (fido::readCTAPMakeCredentialResponse):
        (fido::readCTAPGetAssertionResponse):
        (fido::readCTAPGetInfoResponse):
        * Modules/webauthn/fido/DeviceResponseConverter.h: Copied from Source/WebCore/Modules/webauthn/fido/FidoConstants.cpp.
        * Modules/webauthn/fido/FidoConstants.cpp:
        (fido::isCtapDeviceResponseCode):
        (fido::publicKeyCredentialTypeToString):
        * Modules/webauthn/fido/FidoConstants.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2018-11-07  Justin Michaud  <justin_michaud@apple.com>

        CSS Painting API should pass size, arguments and input properties to paint callback
        https://bugs.webkit.org/show_bug.cgi?id=191309

        Reviewed by Chris Dumez.

        Call paint() callback with input properties and arguments. This patch adds a stub for 
        the CSS Typed OM StylePropertyMapReadOnly, and passes all the arguments as strings without 
        any syntax checking to the paint callback.

        Test: fast/css-custom-paint/properties.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSStyleValueCustom.cpp: Copied from Source/WebCore/css/CSSPaintCallback.h.
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        * bindings/js/WebCoreBuiltinNames.h:
        * css/CSSPaintCallback.h:
        * css/CSSPaintCallback.idl:
        * css/CSSPaintImageValue.cpp:
        (WebCore::CSSPaintImageValue::image):
        * css/CSSPaintImageValue.h:
        * css/CSSPaintSize.h: Copied from Source/WebCore/css/CSSPaintCallback.h.
        (WebCore::CSSPaintSize::create):
        (WebCore::CSSPaintSize::width const):
        (WebCore::CSSPaintSize::height const):
        (WebCore::CSSPaintSize::CSSPaintSize):
        * css/CSSPaintSize.idl: Copied from Source/WebCore/css/CSSPaintCallback.idl.
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeCustomPaint):
        * css/typedom/CSSNumericValue.h: Copied from Source/WebCore/css/CSSPaintCallback.h.
        * css/typedom/CSSNumericValue.idl: Copied from Source/WebCore/css/CSSPaintCallback.idl.
        * css/typedom/CSSStyleValue.h: Copied from Source/WebCore/css/CSSPaintCallback.h.
        (WebCore::CSSStyleValue::isUnitValue):
        (WebCore::CSSStyleValue::isUnparsedValue):
        * css/typedom/CSSStyleValue.idl: Copied from Source/WebCore/css/CSSPaintCallback.idl.
        * css/typedom/CSSUnitValue.h: Copied from Source/WebCore/css/CSSPaintCallback.h.
        * css/typedom/CSSUnitValue.idl: Copied from Source/WebCore/css/CSSPaintCallback.idl.
        * css/typedom/CSSUnparsedValue.h: Copied from Source/WebCore/css/CSSPaintCallback.h.
        * css/typedom/CSSUnparsedValue.idl: Copied from Source/WebCore/css/CSSPaintCallback.idl.
        * css/typedom/StylePropertyMapReadOnly.h: Copied from Source/WebCore/css/CSSPaintCallback.h.
        (WebCore::StylePropertyMapReadOnly::create):
        (WebCore::StylePropertyMapReadOnly::get):
        (WebCore::StylePropertyMapReadOnly::StylePropertyMapReadOnly):
        * css/typedom/StylePropertyMapReadOnly.idl: Copied from Source/WebCore/css/CSSPaintCallback.idl.
        * platform/graphics/CustomPaintImage.cpp:
        (WebCore::CustomPaintImage::CustomPaintImage):
        (WebCore::CustomPaintImage::doCustomPaint):
        * platform/graphics/CustomPaintImage.h:

2018-11-07  Brent Fulgham  <bfulgham@apple.com>

        Provide better Font fallbacks for DirectX backend
        https://bugs.webkit.org/show_bug.cgi?id=191412
        <rdar://problem/45899207>

        Reviewed by Zalan Bujtas.

        Registration of custom fonts through GDI are not always visible
        through the DirectWrite/GDI bridging layer. If a font is not located,
        locate the closest matching avialable font rather than failing.

        * platform/graphics/FontPlatformData.h:
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Use new font
        fallback logic.
        * platform/graphics/win/FontPlatformDataDirect2D.cpp:
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::platformIsEqual const):
        (WebCore::FontPlatformData::createFallbackFont): Added.

2018-11-07  Zalan Bujtas  <zalan@apple.com>

        Click and touch event listeners on the body don't work
        https://bugs.webkit.org/show_bug.cgi?id=191392
        <rdar://problem/5844416>

        Reviewed by Simon Fraser.

        Remove the old quirk of ignoring onclick handlers on the body and beyond.

        Test: fast/events/click-handler-on-body-simple.html

        * page/ios/FrameIOS.mm:
        (WebCore::Frame::nodeRespondingToClickEvents):

2018-11-07  Brent Fulgham  <bfulgham@apple.com>

        [Windows][DirectX] Update canvas code to pass more tests
        https://bugs.webkit.org/show_bug.cgi?id=191337
        <rdar://problem/45878801>

        Reviewed by Dean Jackson.

        Update the Direct2D code paths to comply with our canvas tests, improving the
        the test results scores to 579/770.

        PathDirect2D was updated with an implementation of 'addArcTo' based on work by
        Dirk Schulze <vbs85@gmx.de> (see https://hg.mozilla.org/mozilla-central/rev/b116b49459f8).

        Tests: canvas/philip/tests

        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::createCompatibleBuffer): Direct2D needs access to the graphics
        context to create the buffer.
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/Path.h:
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::drawPattern): Flush needed.
        (WebCore::GraphicsContext::drawRect): Ditto.
        (WebCore::GraphicsContextPlatformPrivate::setMiterLimit): Correct for Direct2D definition of miter limit.
        (WebCore::GraphicsContextPlatformPrivate::strokeStyleProperties const): Added helper function.
        (WebCore::GraphicsContextPlatformPrivate::recomputeStrokeStyle): Update for new helper.
        (WebCore::GraphicsContext::drawLine): Ditto.
        (WebCore::drawWithShadowHelper): Ditto.
        (WebCore::GraphicsContext::fillRect): Add flush.
        (WebCore::GraphicsContext::platformFillRoundedRect): Update for helper.
        (WebCore::GraphicsContext::clipPath): Add flush.
        (WebCore::GraphicsContext::strokeRect): Ditto.
        (WebCore::GraphicsContext::drawLineForText): Update for upstream changes.
        (WebCore::GraphicsContext::drawLinesForText): Ditto.
        * platform/graphics/win/GraphicsContextPlatformPrivateDirect2D.h:
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        (WebCore::createCroppedImageIfNecessary): Add missing implementations.
        (WebCore::createBitmapImageAfterScalingIfNeeded): Ditto.
        (WebCore::ImageBuffer::copyImage const): Ditto.
        (WebCore::ImageBuffer::sinkIntoImage): Ditto.
        (WebCore::ImageBuffer::fastCopyImageMode): Ditto.
        (WebCore::ImageBuffer::sinkIntoNativeImage): Ditto.
        (WebCore::ImageBuffer::copyNativeImage const): Ditto.
        * platform/graphics/win/PathDirect2D.cpp:
        (WebCore::Path::operator=):
        (WebCore::Path::drawDidComplete): This should never have been const.
        It manipulates the path!
        (WebCore::Path::transform): Properly transform existing geometries.
        (WebCore::Path::openFigureAtCurrentPointIfNecessary): Added.
        (WebCore::Path::moveTo):
        (WebCore::Path::addLineTo): Make sure figure starts at a valid point.
        (WebCore::Path::addQuadCurveTo): Ditto.
        (WebCore::Path::addBezierCurveTo): Ditto.
        (WebCore::Path::addArcTo): Add implementation.
        (WebCore::Path::closeSubpath):
        (WebCore::drawArcSection):
        (WebCore::Path::addArc): Update to build large arcs out of small arc segments. If the
        arc is effectively a complete circle, use the ellipse drawing routines.
        (WebCore::Path::addRect): Make sure we start at a valid starting point.
        (WebCore::Path::addEllipse): Correct for definition of D2D ellipse.
        (WebCore::Path::drawDidComplete const): Deleted.
        * platform/graphics/win/SimpleFontDataDirect2D.cpp:
        (WebCore::Font::platformWidthForGlyph const):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::createImageBuffer):
        * rendering/svg/SVGRenderingContext.h:

2018-11-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add an editing command for creating and inserting child lists
        https://bugs.webkit.org/show_bug.cgi?id=191335
        <rdar://problem/45814050>

        Reviewed by Ryosuke Niwa.

        Currently, insertOrderedList and insertUnorderedList only toggle or change list state (i.e. if the selection is
        in an ordered or unordered list, reinserting the same list type removes the current list, and inserting a
        different list type changes the enclosing list).

        However, for certain internal clients (e.g. Mail), if the start of the selection is enclosed by a list item, we
        instead create a new list item and insert it after the enclosing list item, and then create a new list within
        that list item. Currently, this logic is implemented in Mail for legacy-WebKit-based Mail compose. This patch
        brings this logic into WebKit in the form of a new editing command.

        Tests: editing/execCommand/insert-nested-lists-in-table.html
               editing/execCommand/insert-nested-lists-with-pre.html
               editing/execCommand/insert-nested-lists.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::insertOrderedList):
        (WebCore::Editor::insertUnorderedList):
        * editing/EditorCommand.cpp:
        (WebCore::executeInsertOrderedList):
        (WebCore::executeInsertUnorderedList):
        (WebCore::executeInsertNestedUnorderedList):
        (WebCore::executeInsertNestedOrderedList):
        (WebCore::createCommandMap):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply):
        (WebCore::InsertListCommand::editingAction const):
        * editing/InsertListCommand.h:

        Change a couple of `enum`s into `enum class`es.

        * editing/InsertNestedListCommand.cpp: Added.
        (WebCore::InsertNestedListCommand::insertUnorderedList):
        (WebCore::InsertNestedListCommand::insertOrderedList):
        (WebCore::InsertNestedListCommand::doApply):
        * editing/InsertNestedListCommand.h: Added.

        Add a new edit command to insert a new list (as a child of any containing list). If the start of the selection
        is in a list item, we create a new list item, move the selection into the list item, and increment its list
        level; otherwise, simply fall back to inserting a list.

        * editing/ModifySelectionListLevel.cpp:
        (WebCore::IncreaseSelectionListLevelCommand::doApply):
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevel):
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevelOrdered):
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevelUnordered):
        * editing/ModifySelectionListLevel.h:

        Expose this constructor, allowing other edit commands to change selection list level as a composite edit
        command. Also, change an `enum` into an `enum class`.

        (WebCore::IncreaseSelectionListLevelCommand::create):

2018-11-07  Chris Dumez  <cdumez@apple.com>

        ASSERT(renderer()) under HTMLTextAreaElement::updateValue()
        https://bugs.webkit.org/show_bug.cgi?id=191391
        <rdar://problem/34219633>

        Reviewed by Geoffrey Garen.

        Update HTMLTextFormControlElement::didEditInnerTextValue() to not call subtreeHasChanged()
        if the element has no renderer, similarly to what is already done in 
        HTMLTextFormControlElement::setRangeText() and HTMLInputElement::setEditingValue().

        Test: editing/inserting/inset-html-textarea-without-renderer.html

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::didEditInnerTextValue):

2018-11-07  Youenn Fablet  <youenn@apple.com>

        Allow setting RTCRtpTransceiver.direction
        https://bugs.webkit.org/show_bug.cgi?id=191346

        Reviewed by Eric Carlson.

        Remove readonly from the direction attribute.
        Keep setDirection for now as it is in use, with an intent to remove it.
        Driven-by fix as in some cases, the rtc source track might be changed
        and current implementation is not expecting that.
        In such a case, stop observing the old track (which should no longer call us)
        before observing the new one.

        Covered by rebased tests.

        * Modules/mediastream/RTCRtpTransceiver.idl:
        * platform/mediastream/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::setSourceTrack):
        * platform/mediastream/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::setSourceTrack):

2018-11-07  Sihui Liu  <sihui_liu@apple.com>

        RELEASE_ASSERT(!m_hardClosedForUserDelete) fails in WebCore::IDBServer::UniqueIDBDatabase::invokeOperationAndTransactionTimer
        https://bugs.webkit.org/show_bug.cgi?id=191326
        <rdar://problem/45769269>

        Reviewed by Geoffrey Garen.

        UniqueIDBDatabase should ignore incoming requests or operations when it is already marked as
        hardClosedForUserDelete.

        Test: IndexedDB.IndexedDBUserDelete.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformActivateTransactionInBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::immediateCloseForUserDelete):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::establishTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::deleteTransaction):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::commit):

2018-11-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Positioned text underline can look like a strike-through
        https://bugs.webkit.org/show_bug.cgi?id=191341

        Reviewed by Simon Fraser.

        We should just clamp the value so it can't go above the baseline.

        We shouldn't do this at parse time because it's totally reasonable for text-underline-position: under to want
        a negative text-underline-offset. Instead, we just do it at used value time.

        Test: fast/css3-text/css3-text-decoration/text-underline-negative.html

        * style/InlineTextBoxStyle.cpp:
        (WebCore::computeUnderlineOffset):

2018-11-07  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix iOS build with recent SDKs.

        * platform/network/cocoa/ResourceResponseCocoa.mm:
        (WebCore::ResourceResponse::platformCertificateInfo const):

2018-11-07  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix iOS build with recent SDKs.

        * platform/network/cocoa/ResourceResponseCocoa.mm:
        (WebCore::ResourceResponse::platformCertificateInfo const):

2018-11-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Dotted underlines that skip descenders are invisible
        https://bugs.webkit.org/show_bug.cgi?id=191403

        Reviewed by Simon Fraser.

        Turns out our underline bounding boxes had negative width. When drawing the full
        underline that was fine because it was handled by the 2D graphics engine, but when
        we try to split up the box into dots, our "for" loop was taking 0 iterations (because
        the end was before the start).

        Test: fast/css3-text/css3-text-decoration/text-underline-style.html

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::drawLineForText):

2018-11-07  Andy Estes  <aestes@apple.com>

        Crash in WebCore::PaymentRequest::canMakePayment when Apple Pay payment method data is missing
        https://bugs.webkit.org/show_bug.cgi?id=191331

        Reviewed by Alexey Proskuryakov.

        Apple Pay requires merchants specify an ApplePayRequest (which contains several required
        fields) as payment method data when constructing a new PaymentRequest. If the
        ApplePayRequest is missing required fields, or is missing entirely, canMakePayment() should
        resolve to false.

        We would properly resolve to false when an ApplePayRequest was specified with missing
        required fields, but we would crash when the ApplePayRequest was missing entirely.

        This patch fixes the crash by checking for an empty JSValue before trying to convert it to
        an ApplePayRequest struct. Because we stringify ApplePayRequests in the PaymentRequest
        constructor then parse them again in canMakePayments, an undefined or null payment method
        data stringifies to a null String, which then parses to an empty JSValue.

        Added test case to http/tests/paymentrequest/payment-request-canmakepayment-method.https.html.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::convertData):
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::canMakePayment):

2018-11-07  Simon Fraser  <simon.fraser@apple.com>

        Revert 237849: it breaks MotionMark
        https://bugs.webkit.org/show_bug.cgi?id=191398

        Reviewed by Simon Fraser.

        This change broke painting while the test is running.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedStatus):

2018-11-07  Don Olmstead  <don.olmstead@sony.com>

        Simplify macros in platform
        https://bugs.webkit.org/show_bug.cgi?id=191378

        Reviewed by Michael Catanzaro.

        No new tests. No change in behavior.

        Modifies a few cases where a platform macro could be simplified.

        * page/EventHandler.cpp:
        * platform/network/DNS.h:
        * platform/network/NetworkStateNotifier.h:

2018-11-07  Simon Fraser  <simon.fraser@apple.com>

        Some WK1 repaint tests are flakey
        https://bugs.webkit.org/show_bug.cgi?id=190627

        Reviewed by Zalan Bujtas.

        Repaint tracking in GraphicsLayerCA was sensitive to whether there were already dirty
        rects on the layer, since tracking happened after checks against existing dirty rects.
        This caused some WK1 repaint tests to be flakey, since there's no guarantee that
        no repaints happen between the last layer flush and a test calling startTrackingRepaints().

        Fix by moving the repaint tracking to before the checks against existing dirty rects.
        This is more similar to how repaint tracking on FrameView works.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setNeedsDisplayInRect):

2018-11-07  Dean Jackson  <dino@apple.com>

        [iOS] WebGL leaks exact GPU type
        https://bugs.webkit.org/show_bug.cgi?id=191393

        Reviewed by Tim Horton.

        The fully exposed renderer info shouldn't be necessary
        on iOS, where the GPUs and drivers are consistent
        enough that people shouldn't need to write code specifically
        for them. Reduce the ability to fingerprint by simply
        returning "Apple GPU".

        The other option would have been to disable the extension,
        but I think it might still be useful to know you're on
        an iOS device.

        Test: fast/canvas/webgl/hide-some-renderer-info.html

        * html/canvas/WebGL2RenderingContext.cpp: Return "Apple GPU"
        on iOS.
        (WebCore::WebGL2RenderingContext::getParameter):
        * html/canvas/WebGLRenderingContext.cpp: Ditto.
        (WebCore::WebGLRenderingContext::getParameter):

2018-11-07  Daniel Bates  <dabates@apple.com>

        Override +[UIKeyboard isInHardwareKeyboardMode] in WebKitTestRunner and DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=190141

        Reviewed by Darin Adler.

        Remove the runtime application check for WebKitTestRunner as we no longer need this
        now that WebKitTestRunner and DumpRenderTree override +[UIKeyboard isInHardwareKeyboardMode].

        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isWebKitTestRunner): Deleted.

2018-11-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix "Javascript" => "JavaScript" enum in protocol generated objects
        https://bugs.webkit.org/show_bug.cgi?id=191340

        Reviewed by Devin Rousso.

        * inspector/agents/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::collectSample):
        Use new enum name.

2018-11-07  Dan Bernstein  <mitz@apple.com>

        Add a pseudoclass that matches img elements that are backed by an attachment
        https://bugs.webkit.org/show_bug.cgi?id=191286
        <rdar://problem/45823554>

        Reviewed by Dean Jackson.

        Test: fast/css/has-attachment.html

        Added a :has-attachment pseudoclass, enabled only when the attachment element is enabled at
        runtime, that matches elements (currently only img elements qualify) that have an attachment
        element in their shadow DOM.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText const): Handle the new PseudoClassHasAttachment value.
        * css/CSSSelector.h: Added a new value to the PseudoClassType enum.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const): Check the new PseudoClassHasAttachment value
          using the new hasAttachment test function.

        * css/SelectorCheckerTestFunctions.h:
        (WebCore::hasAttachment): Added. Tests if the element is an img element that has an
          attachment.

        * css/SelectorPseudoClassAndCompatibilityElementMap.in: Added has-attachment.

        * css/parser/CSSParserContext.cpp:
        (WebCore::CSSParserContext::CSSParserContext): Initialize new attachmentEnabled member based
          on RuntimeEnabledFeatures.
        (WebCore::operator==): Compare new attachmentEnabled member.
        * css/parser/CSSParserContext.h:
        (WebCore::CSSParserContextHash::hash): Include new attachmentEnabled member.

        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo): Reject :has-attachment if the attachment
          element is not enabled.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType): Handle PseudoClassHasAttachment.

2018-11-07  Don Olmstead  <don.olmstead@sony.com>

        Make generic MainThreadSharedTimer implementation
        https://bugs.webkit.org/show_bug.cgi?id=191327

        Reviewed by Michael Catanzaro.

        No new tests. No change in behavior.

        Moves generic implementation for MainThreadSharedTimerGlib.cpp into
        MainThreadSharedTimer.cpp.

        * platform/MainThreadSharedTimer.cpp:
        (WebCore::MainThreadSharedTimer::MainThreadSharedTimer):
        (WebCore::MainThreadSharedTimer::setFireInterval):
        (WebCore::MainThreadSharedTimer::stop):
        (WebCore::MainThreadSharedTimer::invalidate):
        * platform/MainThreadSharedTimer.h:
        * platform/SourcesGLib.txt:
        * platform/glib/MainThreadSharedTimerGLib.cpp: Removed.

2018-11-07  Ali Juma  <ajuma@chromium.org>

        IntersectionObserverEntry doesn't keep JS wrappers of rects alive
        https://bugs.webkit.org/show_bug.cgi?id=191330

        Reviewed by Chris Dumez.

        Retain wrappers of each rect in an IntersectionObserverEntry as long as the entry's wrapper
        is alive, by adding these wrappers as opaque roots.

        Test: intersection-observer/intersection-observer-entry-keeps-js-wrappers-of-rects-alive.html

        * bindings/js/JSIntersectionObserverEntryCustom.cpp:
        (WebCore::JSIntersectionObserverEntry::visitAdditionalChildren):
        * dom/DOMRectReadOnly.idl:
        * page/IntersectionObserverEntry.h:
        (WebCore::IntersectionObserverEntry::rootBounds const): Make this return a raw pointer instead of a RefPtr so that it
        can be called in JSIntersectionObserverEntry::visitAdditionalChildren, which can be called from non-main threads.
        (WebCore::IntersectionObserverEntry::boundingClientRect const): Ditto.
        (WebCore::IntersectionObserverEntry::intersectionRect const): Ditto.

2018-11-07  Simon Fraser  <simon.fraser@apple.com>

        TileController::tileSize() should not have side effects
        https://bugs.webkit.org/show_bug.cgi?id=191349

        Reviewed by Zalan Bujtas.

        Calling TileController::tileSize() would recompute a new tile size and set m_tileSizeLocked,
        which caused test failures if logging was enabled when running tests.

        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::tileSize const):
        (WebCore::TileController::computeTileSize):
        * platform/graphics/ca/TileController.h:
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::revalidateTiles):

2018-11-07  Charlie Turner  <cturner@igalia.com>

        [EME][GStreamer] Ensure key id buffers are present and simplify lifetime management of ClearKey class.
        https://bugs.webkit.org/show_bug.cgi?id=191157

        Reviewed by Xabier Rodriguez-Calvar.

        This is in preparation for moving the clearkey decryptor behind a
        new decrypt API in CDMInstance, which will be sent into the
        pipeline to handle key management and decryption. This is for a
        later patch.

        Covered by existing clear key tests in media/encrypted-media.

        * platform/graphics/gstreamer/GStreamerCommon.h:
        (WebCore::GstMappedBuffer::data const): Add a const data accessor,
        since we are now providing operator=='s on const objects of this
        class that need const access to the data pointer.
        (WebCore::GstMappedBuffer::operator==): Add a swap of the new
        equality operator so you don't have to remember to have the
        GstBuffer on the RHS of the equality all the time.
        (WebCore::operator==): Define an equality operator between Gst
        buffers and WebCore's mapped buffers. Gst creates a ref and a
        separate read view under the covers in the memcmp call, so we do
        not need to map the buffer ourselves.
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        (webkit_media_clear_key_decrypt_class_init): Remove setup/release
        bindings.
        (webkit_media_clear_key_decrypt_init): Initialize gcrypt cipher
        here once instead of for every buffer to be decrypted.
        (webKitMediaClearKeyDecryptorFinalize): And destroy the cipher
        context when the decryptor is destroyed.
        (webKitMediaClearKeyDecryptorFindAndSetKey): Factor out the key
        retrieval and context setting in this method, call it for each
        sample.
        (webKitMediaClearKeyDecryptorDecrypt): Base key id buffer into
        this function, and remove cipher creation / destroy methods.
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (webkit_media_common_encryption_decrypt_class_init): Remove
        setup/release bindings.
        (webkitMediaCommonEncryptionDecryptTransformInPlace): Ensure a key
        id is present and pass it to the decrypt class method.
        (webKitMediaCommonEncryptionDecryptDefaultSetupCipher): Deleted.
        (webKitMediaCommonEncryptionDecryptDefaultReleaseCipher): Deleted.
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.h:

2018-11-07  Frederic Wang  <fwang@igalia.com>

        [Cairo] Move state change operations from GraphicsContextCairo to CairoOperations
        https://bugs.webkit.org/show_bug.cgi?id=179610

        Unreviewed build fix.

        * platform/graphics/cairo/GraphicsContextCairo.cpp: Add missing include.

2018-11-06  Joseph Pecoraro  <pecoraro@apple.com>

        ServiceWorker Inspector: Uncaught Exception: null is not an object (evaluating 'resource.target.addResource')
        https://bugs.webkit.org/show_bug.cgi?id=191339

        Reviewed by Matt Baker.

        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::fetchScriptWithContext):
        Use the Service Worker's identifier, not this static but otherwise unknown identifier.

2018-11-06  Youenn Fablet  <youenn@apple.com>

        sender.replaceTrack() fails with InvalidStateError if the transceiver.direction is "inactive"
        https://bugs.webkit.org/show_bug.cgi?id=191202

        Reviewed by Eric Carlson.

        Covered by updated test.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::removeTrack):
        Update as per spec, in particular make sure to not stop the sender when removing the track.

2018-11-06  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Experimental prototype for WebGPURenderPipeline and WebGPUSwapChain
        https://bugs.webkit.org/show_bug.cgi?id=191291

        Reviewed by Myles Maxfield.

        Test: webgpu/render-pipelines.html
        Also update test webgpu/webgpu-basics.html to create a WebGPURenderPipeline.

        Begin implementation of WebGPURenderPipeline and WebGPUSwapChain. A WebGPURenderPipeline is backed by a
        GPURenderPipeline, created lazily using the properties of the passed-in WebGPURenderPipelineDescriptor.
        On Metal-supported systems, GPURenderPipeline is an interface to a MTLRenderPipelineState.
        The MTLRenderPipelineState is created with the WebGPUDevice currently configured on the WebGPURenderingContext.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * Modules/webgpu/GPUDevice.cpp:
        (WebCore::GPUDevice::createRenderPipeline const):
        * Modules/webgpu/GPUDevice.h:
        * Modules/webgpu/GPUPipelineDescriptorBase.h:
        * Modules/webgpu/GPUPipelineStageDescriptor.h:
        * Modules/webgpu/GPURenderPipelineDescriptor.h:
        (WebCore::GPURenderPipelineDescriptor::GPURenderPipelineDescriptor):
        (WebCore::GPURenderPipelineDescriptor::primitiveTopology):
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createRenderPipeline const):
        * Modules/webgpu/WebGPUDevice.h:
        (WebCore::WebGPUDevice::adapter const):
        (WebCore::WebGPUDevice::device const):
        * Modules/webgpu/WebGPUDevice.idl:
        * Modules/webgpu/WebGPUPipelineDescriptorBase.h:
        * Modules/webgpu/WebGPUPipelineDescriptorBase.idl:
        * Modules/webgpu/WebGPUPipelineStageDescriptor.h:
        * Modules/webgpu/WebGPUPipelineStageDescriptor.idl:
        * Modules/webgpu/WebGPURenderPipeline.cpp:
        (WebCore::WebGPURenderPipeline::create):
        (WebCore::WebGPURenderPipeline::WebGPURenderPipeline):
        * Modules/webgpu/WebGPURenderPipeline.h:
        * Modules/webgpu/WebGPURenderPipeline.idl:
        * Modules/webgpu/WebGPURenderPipelineDescriptor.h:
        * Modules/webgpu/WebGPURenderPipelineDescriptor.idl:
        * Modules/webgpu/WebGPURenderingContext.cpp:
        (WebCore::WebGPURenderingContext::create):
        (WebCore::WebGPURenderingContext::WebGPURenderingContext):
        * Modules/webgpu/WebGPURenderingContext.h:
        * Modules/webgpu/WebGPUShaderModule.h:
        (WebCore::WebGPUShaderModule::module const):
        * Modules/webgpu/WebGPUShaderStage.h:
        * Modules/webgpu/WebGPUShaderStage.idl:
        * Modules/webgpu/WebGPUSwapChain.cpp:
        (WebCore::WebGPUSwapChain::configure):
        (WebCore::WebGPUSwapChain::reshape):
        (WebCore::WebGPUSwapChain::markLayerComposited):
        * Modules/webgpu/WebGPUSwapChain.h:
        (WebCore::WebGPUSwapChain::WebGPUSwapChain):
        * Modules/webgpu/WebGPUSwapChain.idl:
        * Modules/webgpu/cocoa/GPURenderPipeline.h:
        (WebCore::GPURenderPipeline::platformRenderPipeline const):
        * Modules/webgpu/cocoa/GPURenderPipelineMetal.mm: Added.
        (WebCore::setFunctionsForPipelineDescriptor):
        (WebCore::GPURenderPipeline::create):
        (WebCore::GPURenderPipeline::GPURenderPipeline):
        * Modules/webgpu/cocoa/GPUSwapChain.h:
        (WebCore::GPUSwapChain::platformLayer const):
        * Modules/webgpu/cocoa/GPUSwapChainMetal.mm:
        (WebCore::GPUSwapChain::create):
        (WebCore::GPUSwapChain::GPUSwapChain):
        (WebCore::GPUSwapChain::setDevice):
        (WebCore::GPUSwapChain::reshape):
        (WebCore::GPUSwapChain::present):
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2018-11-06  Youenn Fablet  <youenn@apple.com>

        Add support for sender/receiver getCapabilities
        https://bugs.webkit.org/show_bug.cgi?id=191192

        Reviewed by Eric Carlson.

        Expose sender/receiver RTCRtpCapabilities to JS.
        Add corresponding IDL and plumbing down to libwebrtc peer connection factory.
        Covered by rebased tests.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::receiverCapabilities):
        (WebCore::PeerConnectionBackend::senderCapabilities):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCRtpCapabilities.idl: Added.
        * Modules/mediastream/RTCRtpReceiver.cpp:
        (WebCore::RTCRtpReceiver::getCapabilities):
        * Modules/mediastream/RTCRtpReceiver.h:
        * Modules/mediastream/RTCRtpReceiver.idl:
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::getCapabilities):
        * Modules/mediastream/RTCRtpSender.h:
        * Modules/mediastream/RTCRtpSender.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::receiverCapabilities):
        (WebCore::PeerConnectionBackend::senderCapabilities):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/RTCPMuxPolicy.h:
        * platform/mediastream/RTCRtpCapabilities.h: Added.
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::typeFromKind):
        (WebCore::fromStdString):
        (WebCore::toChannels):
        (WebCore::toRTCRtpCapabilities):
        (WebCore::LibWebRTCProvider::receiverCapabilities):
        (WebCore::LibWebRTCProvider::senderCapabilities):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:

2018-11-06  Youenn Fablet  <youenn@apple.com>

        Calling sender.replaceTrack() twice produces a new transceiver and its corresponding m= section
        https://bugs.webkit.org/show_bug.cgi?id=191261

        Reviewed by Eric Carlson.

        Handle the case of replacing a track in a sender that has no track.
        In particular, do not create a new m-section as was implied by plan B implementation.
        Instead, set the track directly on the rtc sender.
        Covered by webrtc/video-addTransceiver.html.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::createSourceAndRTCTrack):
        (WebCore::LibWebRTCMediaEndpoint::addTransceiver):
        (WebCore::LibWebRTCMediaEndpoint::setSenderSourceFromTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::setSenderSourceFromTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        (WebCore::LibWebRTCRtpSenderBackend::replaceTrack):

2018-11-06  Chris Dumez  <cdumez@apple.com>

        Post too much text to iFrame could crash webkit
        https://bugs.webkit.org/show_bug.cgi?id=190947
        <rdar://problem/45678231>

        Reviewed by Geoffrey Garen.

        Optimize SuffixTree (Which is used by XSSAuditor) to stop storing each Node's
        children as a static array of 128 pointers and use a dynamic array (vector)
        instead. This uses way less memory. Also make SuffixTree and SuffixTree::Node
        as fast allocated for performance. This part of the change is based on the
        following Blink change:
        - https://chromium.googlesource.com/chromium/src.git/+/6ca590e1c7edaa7c56cac9e3e3c39cf398ca8d4d

        Also update the XSSAuditor to construct the SuffixTree lazily since there are
        many cases (including the one in this bug) where we were spending a significant
        amount of time building the SuffixTree and then never querying it.

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init):
        (WebCore::XSSAuditor::decodedHTTPBodySuffixTree):
        (WebCore::XSSAuditor::isContainedInRequest):
        * html/parser/XSSAuditor.h:
        * platform/text/SuffixTree.h:
        (WebCore::SuffixTree::mightContain):
        (WebCore::SuffixTree::Node::Node):
        (WebCore::SuffixTree::Node::~Node):
        (WebCore::SuffixTree::Node::find):
        (WebCore::SuffixTree::Node::end):
        (WebCore::SuffixTree::build):
        (WebCore::SuffixTree<Codebook>::Node::childAt):
        (WebCore::SuffixTree::Node::at): Deleted.

2018-11-06  Youenn Fablet  <youenn@apple.com>

        Support onremovetrack for RTCPeerConnection removed tracks
        https://bugs.webkit.org/show_bug.cgi?id=191299

        Reviewed by Eric Carlson.

        When applying SDP, LibWebRTCMediaEndpoint gets notified of a removed track.
        In that case, make sure to remove it from its remote stream(s) so as
        to notify the application of the changes.
        Work around the receiver missing the list of streams by storing in a map
        the list of the remote streams for a given remote track.

        Covered by rebased test.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::mediaStreamFromRTCStream):
        (WebCore::LibWebRTCMediaEndpoint::removeRemoteTrack):
        (WebCore::LibWebRTCMediaEndpoint::removeRemoteStream):
        (WebCore::LibWebRTCMediaEndpoint::stop):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:

2018-11-06  Timothy Hatcher  <timothy@apple.com>

        REGRESSION (r237878): css-dark-mode/supported-color-schemes.html is failing on Mojave
        https://bugs.webkit.org/show_bug.cgi?id=191338

        Reviewed by Dean Jackson.

        * page/Page.cpp:
        (WebCore::Page::appearanceDidChange): Add back call to didChangeStyleSheetEnvironment().
        It was dropped by mistake when I moved code to appearanceDidChange(). This is needed to
        update styles for semantic colors and from controls when the media prefers-color-scheme
        media query is not used on the page.

2018-11-06  Youenn Fablet  <youenn@apple.com>

        Make mDNS ICE Candidate an experimental flag again
        https://bugs.webkit.org/show_bug.cgi?id=191262

        Reviewed by Dean Jackson.

        Rename mdnsICECandidatesEnabled to webRTCICECandidatesEnabled.
        This allows grouping the WebRTC runtime flags.
        No change of behavior.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::newICECandidate):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webRTCMDNSICECandidatesEnabled const):
        (WebCore::RuntimeEnabledFeatures::setWebRTCMDNSICECandidatesEnabled):
        (WebCore::RuntimeEnabledFeatures::mdnsICECandidatesEnabled const): Deleted.
        (WebCore::RuntimeEnabledFeatures::setMDNSICECandidatesEnabled): Deleted.

2018-11-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Implement text-underline-offset and text-decoration-thickness
        https://bugs.webkit.org/show_bug.cgi?id=190774

        Reviewed by Dean Jackson.

        Because of our existing infrastructure for text decorations, adding support for these
        is fairly simple. This patch updates our existing functions to handle thick & placed
        underlines, as well as updating our repaint code to correcly handle repainting them.
        It also handles animations.

        Tests: animations/text-decoration-thickness.html
               animations/text-underline-offset.html
               fast/css3-text/css3-text-decoration/text-decoration-offset-2.html
               fast/css3-text/css3-text-decoration/text-decoration-offset-3.html
               fast/css3-text/css3-text-decoration/text-decoration-offset-auto-length.html
               fast/css3-text/css3-text-decoration/text-decoration-offset-baseline.html
               fast/css3-text/css3-text-decoration/text-decoration-offset-from-font-auto.html
               fast/css3-text/css3-text-decoration/text-decoration-offset-from-font-length.html
               fast/css3-text/css3-text-decoration/text-decoration-offset-repaint.html
               fast/css3-text/css3-text-decoration/text-decoration-offset-under-auto.html
               fast/css3-text/css3-text-decoration/text-decoration-offset-under-length.html
               fast/css3-text/css3-text-decoration/text-decoration-offset.html
               fast/css3-text/css3-text-decoration/text-decoration-thickness-length.html
               fast/css3-text/css3-text-decoration/text-decoration-thickness-repaint.html

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * platform/graphics/FontMetrics.h:
        (WebCore::FontMetrics::underlinePosition const):
        (WebCore::FontMetrics::setUnderlinePosition):
        (WebCore::FontMetrics::underlineThickness const):
        (WebCore::FontMetrics::setUnderlineThickness):
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformInit):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForStyle):
        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::paintTextDecoration):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeAffectsVisualOverflow const):
        * rendering/style/TextDecorationThickness.h:
        (WebCore::TextDecorationThickness::resolve const):
        * style/InlineTextBoxStyle.cpp:
        (WebCore::computeUnderlineOffset):
        (WebCore::visualOverflowForDecorations):
        * style/InlineTextBoxStyle.h:
        (WebCore::textDecorationStrokeThickness): Deleted.

2018-11-06  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Remove cap on partitioned cache max age if it matches a network reload (redirect-only)
        https://bugs.webkit.org/show_bug.cgi?id=189760
        <rdar://problem/44612242>

        Reviewed by Youenn Fablet and Antti Koivisto.

        No new tests. Existing test fleshed out.

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::isRedirection const):
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::isRedirection const): Deleted.
            Moved to the implementation file so that I can export it without warning.

2018-11-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Spelling dots are drawn in the wrong place
        https://bugs.webkit.org/show_bug.cgi?id=190764

        Reviewed by Dean Jackson.

        - Dots should not be clipped.
        - Dots should be horizontally centered.
        - Dots should be drawn behind the text.
        - Distance from the baseline to the top of the dot should be 11.035% of font size.
        - Dot diameter should be 13.247% of the font size.
        - Distance between the dots (right side of the left dot to left side of the right dot) should be 9.457% of the font size.
        - The "font size" used in these calculations should be clamped so it's 10px <= font size <= 40px.

        Tests: editing/spelling/spelling-dots-position-2.html
               editing/spelling/spelling-dots-position-3.html
               editing/spelling/spelling-dots-position.html
               editing/spelling/spelling-dots-repaint.html

        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::colorForMarkerLineStyle): Align iOS and macOS implementations.
        (WebCore::GraphicsContext::drawDotsForDocumentMarker): Place the dots correctly.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine): The KnownToHaveNoOverflow flag should be cleared if the element has spelling dots,
            because there is no guarantee the spelling dots will lie inside the layout rect of the element.
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow): Update the repaint rects to include splling dot positions.
        * rendering/InlineFlowBox.h: Comments should explain why, not say what.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Draw the dots behind the text.
        (WebCore::InlineTextBox::hasMarkers const): Convenience.
        (WebCore::InlineTextBox::paintPlatformDocumentMarkers): Refactor bounds information into a helper function.
        (WebCore::InlineTextBox::calculateUnionOfAllDocumentMarkerBounds const): Use for repaint rect calculation.
        (WebCore::InlineTextBox::calculateDocumentMarkerBounds const): Place the dots correctly.
        (WebCore::InlineTextBox::paintPlatformDocumentMarker): Call the helper method.
        (WebCore::InlineTextBox::collectMarkedTextsForDocumentMarkers const):
        (WebCore::InlineTextBox::collectMarkedTextsForDocumentMarkers): Deleted.
        * rendering/InlineTextBox.h: Declare the helper methods.
        * rendering/SimpleLineLayout.cpp: Simple line layout doesn't know how to paint spelling dots, so make the presence of
            spelling dots opt us out of SLL.
        (WebCore::SimpleLineLayout::canUseForWithReason):
        * rendering/SimpleLineLayoutCoverage.cpp:
        (WebCore::SimpleLineLayout::printReason):
        * rendering/SimpleLineLayoutCoverage.h: Add a new opt-out reason.

2018-11-06  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION (r230523): Caps lock indicator not shown in password field
        https://bugs.webkit.org/show_bug.cgi?id=190056

        Reviewed by Ryosuke Niwa.

        When WindowServer access is blocked, GetCurrentModifiers() always returns 0. Instead of calling
        GetCurrentModifiers(), store the current modifiers from the key event argument in the method
        WebKit::WebPage::keyEvent, and use the stored value to detect if Caps lock is on. Additionally,
        the modifiers needs to be updated when the window becomes active.

        Test: fast/events/detect-caps-lock.html

        * Sources.txt:
        * platform/PlatformKeyboardEvent.h:
        * platform/graphics/FontTaggedSettings.cpp:
        * platform/mac/KeyEventMac.mm:
        (WebCore::PlatformKeyboardEvent::currentCapsLockState):
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState):
        * testing/Internals.cpp:
        (WebCore::Internals::capsLockIsOn):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-11-06  Javier Fernandez  <jfernandez@igalia.com>

        CSS grid elements with justify-content: space-around have extra whitespace, sometimes a lot
        https://bugs.webkit.org/show_bug.cgi?id=191308

        Reviewed by Dean Jackson.

        The CSS WG resolved [1] that Content Alignment should account to the
        track sizing algorithm.

        The sizing algorithm has been modified so that two new steps (1.5
        and 2.5) were added to compute the Content Alignment offsets after
        resolving the columns' and rows' sizes respectively.

        This change decouples the Content Alignment logic from the tracks
        position, so that we can use it as part of the track sizing algorithm.

        I also had to store the whole ContentAlignmentData structure in two
        class attributes. We need both, position and distribution offsets, to
        be used in different parts of the layout logic.

        [1] https://github.com/w3c/csswg-drafts/issues/2557

        Tests: imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-001.html
               imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-002.html
               imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-003.html
               imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-004.html
               imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-percent-cols-filled-shrinkwrap-001.html
               imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-percent-cols-spanned-shrinkwrap-001.html
               imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-percent-rows-filled-shrinkwrap-001.html
               imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-percent-rows-spanned-shrinkwrap-001.html

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::gridAreaBreadthForChild const):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::repeatTracksSizingIfNeeded):
        (WebCore::RenderGrid::layoutBlock):
        (WebCore::RenderGrid::gridItemOffset const):
        (WebCore::RenderGrid::trackSizesForComputedStyle const):
        (WebCore::RenderGrid::populateGridPositionsForDirection):
        (WebCore::RenderGrid::gridAreaBreadthForOutOfFlowChild):
        (WebCore::contentDistributionOffset):
        (WebCore::RenderGrid::computeContentPositionAndDistributionOffset):
        (WebCore::RenderGrid::nonCollapsedTracks const):
        * rendering/RenderGrid.h:
        (WebCore::ContentAlignmentData::isValid):
        (WebCore::ContentAlignmentData::defaultOffsets):

2018-11-06  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: WAL file keeps growing
        https://bugs.webkit.org/show_bug.cgi?id=191294
        <rdar://problem/41333493>

        Reviewed by Chris Dumez.

        When we quit apps, the database connection may not be shut down properly, and WAL file will be retained on disk.
        On the next open of database connection, new logs will be appended to the original WAL file, which keeps 
        increasing size of the WAL file. We should do a manual checkpoint when we open a IndexedDB to make sure previous
        log is written to database and truncate WAL file.

        Test: IndexedDB.IndexedDBTempFileSize

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

2018-11-06  Ali Juma  <ajuma@chromium.org>

        IntersectionObserver doesn't keep target's JS wrapper alive
        https://bugs.webkit.org/show_bug.cgi?id=190235

        Reviewed by Ryosuke Niwa.

        Retain JS wrappers of targets in queued entries using a vector of GCReachableRef owned by
        IntersectionObserver, which gets cleared after the entries have been delivered.

        Make IntersectionObserver::takeRecords return a struct which has both the vector of GCReachableRefs
        for targets and the vector of intersection observer entries, so that the GCReachableRefs survive
        until the creation of JS wrappers for the entries.

        Modify IntersectionObserver::hasPendingActivity to keep the observer alive while it has
        entries to deliver.

        Tests: intersection-observer/intersection-observer-entry-keeps-js-wrapper-of-target-alive.html
               intersection-observer/intersection-observer-keeps-js-wrapper-of-target-alive.html
               intersection-observer/target-deleted.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSIntersectionObserverEntryCustom.cpp:
        (WebCore::JSIntersectionObserverEntry::visitAdditionalChildren): Keep the target element's wrapper alive while the
        IntersectionObserverEntry's wrapper is alive.
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::takeRecords): Change return type to include GCReachableRefs for each record's target, so that
        each target can be kept until a JS wrapper is constructed for its IntersectionObserverEntry.
        (WebCore::IntersectionObserver::appendQueuedEntry):
        (WebCore::IntersectionObserver::notify): Erase GCReachableRefs for targets after delivering the corresponding records.
        (WebCore::IntersectionObserver::hasPendingActivity const): Keep the IntersectionObserver alive until queued entries are delivered.
        (WebCore::IntersectionObserver::stop):
        * page/IntersectionObserver.h:
        * page/IntersectionObserver.idl:
        * page/IntersectionObserverEntry.h:
        (WebCore::IntersectionObserverEntry::target const): Make this return a raw pointer instead of a RefPtr so that it
        can be called in JSIntersectionObserverEntry::visitAdditionalChildren, which runs on the GC thread (it's illegal to ref a Node
        on a non-main thread).
        * page/IntersectionObserverEntry.idl:

2018-11-06  Timothy Hatcher  <timothy@apple.com>

        <picture> container doesn't update when prefers-color-scheme media query changes
        https://bugs.webkit.org/show_bug.cgi?id=190913
        rdar://problem/45608456

        Reviewed by Dean Jackson.

        Test: css-dark-mode/prefers-color-scheme-picture-element.html

        * css/MediaQueryEvaluator.cpp:
        (WebCore::isAppearanceDependent): Added.
        (WebCore::MediaQueryEvaluator::evaluate const): Keep track of appearanceDependentResults.
        * css/MediaQueryEvaluator.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::addAppearanceDependentMediaQueryResult): Added.
        (WebCore::StyleResolver::hasMediaQueriesAffectedByAppearanceChange const): Added.
        * css/StyleResolver.h:
        (WebCore::StyleResolver::hasAppearanceDependentMediaQueries const): Added.
        * dom/Document.cpp:
        (WebCore::Document::evaluateMediaQueryList): Call checkAppearanceDependentPictures.
        (WebCore::Document::checkAppearanceDependentPictures): Added.
        (WebCore::Document::addAppearanceDependentPicture): Added.
        (WebCore::Document::removeAppearanceDependentPicture): Added.
        * dom/Document.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::bestFitSourceFromPictureElement): Call addAppearanceDependentPicture.
        * html/HTMLPictureElement.cpp:
        (WebCore::HTMLPictureElement::~HTMLPictureElement): Call removeAppearanceDependentPicture.
        (WebCore::HTMLPictureElement::didMoveToNewDocument): Ditto.
        (WebCore::HTMLPictureElement::appearanceChangeAffectedPicture const): Added.
        * html/HTMLPictureElement.h:
        * page/Page.cpp:
        (WebCore::Page::appearanceDidChange): Added.
        (WebCore::Page::setUseSystemAppearance): Call appearanceDidChange.
        (WebCore::Page::setUseDarkAppearance): Call appearanceDidChange.
        * page/Page.h:
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::evaluateMediaQueriesForAppearanceChange): Added.
        * style/StyleScope.h:

2018-11-06  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r237834.

        Tests for this change crash on iOS Simulator

        Reverted changeset:

        "Spelling dots are drawn in the wrong place"
        https://bugs.webkit.org/show_bug.cgi?id=190764
        https://trac.webkit.org/changeset/237834

2018-11-06  Antoine Quint  <graouts@apple.com>

        [Web Animations] transitions/remove-transition-style.html crashes with GuardMalloc on
        https://bugs.webkit.org/show_bug.cgi?id=191304
        <rdar://problem/45819476>

        Reviewed by Dean Jackson.

        Ensure we remove animations from the m_allAnimations ListHashSet upon destruction.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::forgetAnimation):
        (WebCore::AnimationTimeline::cancelDeclarativeAnimation):
        * animation/AnimationTimeline.h:
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::getAnimations const):
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::~WebAnimation):

2018-11-06  Youenn Fablet  <youenn@apple.com>

        RealtimeOutgoingAudioSourceCocoa should unobserve its source at destruction time
        https://bugs.webkit.org/show_bug.cgi?id=191295

        Reviewed by Eric Carlson.

        Make RealtimeOutgoingAudioSource subclasses unobserve their source
        inside their destructor instead of RealtimeOutgoingAudioSource.
        This is consistent with how starting to observe works.
        Covered by existing tests.

        * platform/mediastream/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::unobserveSource):
        * platform/mediastream/RealtimeOutgoingAudioSource.h:
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp:
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::~RealtimeOutgoingAudioSourceLibWebRTC):
        * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp:
        (WebCore::RealtimeOutgoingAudioSourceCocoa::RealtimeOutgoingAudioSourceCocoa):
        (WebCore::RealtimeOutgoingAudioSourceCocoa::~RealtimeOutgoingAudioSourceCocoa):
        * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.h:

2018-11-06  Youenn Fablet  <youenn@apple.com>

        Make sure RTCIceCandidateStats address is undefined for host and peer reflexive case
        https://bugs.webkit.org/show_bug.cgi?id=191263

        Reviewed by Eric Carlson.

        Test: webrtc/datachannel/getStats-no-prflx-remote-candidate.html

        * Modules/mediastream/libwebrtc/LibWebRTCStatsCollector.cpp:
        (WebCore::fillRTCIceCandidateStats):

2018-11-06  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Handle setting max number of frame between keyframes
        https://bugs.webkit.org/show_bug.cgi?id=190682

        Reviewed by Philippe Normand.

        That has been manually checked.

        * platform/mediastream/libwebrtc/GStreamerVideoEncoder.cpp:
        (gst_webrtc_video_encoder_get_property):
        (gst_webrtc_video_encoder_set_property):
        (register_known_encoder):
        (gst_webrtc_video_encoder_class_init):
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::InitEncode):

2018-11-03  Alex Christensen  <achristensen@webkit.org>

        [Mac] Implement safe browsing in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=188871

        Reviewed by Tim Horton.

        * en.lproj/Localizable.strings:

2018-11-06  Ali Juma  <ajuma@chromium.org>

        [IntersectionObserver] Account for CSS zoom when computing client rects
        https://bugs.webkit.org/show_bug.cgi?id=191282

        Reviewed by Simon Fraser.

        When computing rects for an IntersectionObserverEntry, account for the effective zoom when
        converting from absolute to client coordinates.

        Test: web-platform-tests/intersection-observer/bounding-box.html

        * dom/Document.cpp:
        (WebCore::Document::updateIntersectionObservations):

2018-11-06  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Implement black frame generation
        https://bugs.webkit.org/show_bug.cgi?id=190684

        Reviewed by Xabier Rodriguez-Calvar.

        Avoiding webrtc/video-mute-vp8.html to crash but it still fails because
        we are missing the canvas bridging code.

        * platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceLibWebRTC.cpp:
        (WebCore::RealtimeOutgoingVideoSourceLibWebRTC::createBlackFrame):
        * platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceLibWebRTC.h:

2018-11-06  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Do not try to handle framerate modulation in the encoder
        https://bugs.webkit.org/show_bug.cgi?id=190683

        Reviewed by Philippe Normand.

        This has to already be handled in capturing pipeline or in libwebrtc itself.

        No other encoder implementation do that, and libwebrtc is not happy with encoder that do not output the exact number of frames that have been passed in.

        No regressions detected and libwebrtc is happier this way, less warning output and no more frame corruption in H264 streams found.

        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::InitEncode):

2018-11-06  Frederic Wang  <fwang@igalia.com>

        Unreviewed, follow-up of previous commit.

        Actually move OptionSet in the header since it's used there too.

        * page/WindowFeatures.cpp:
        * page/WindowFeatures.h:

2018-11-06  Frederic Wang  <fwang@igalia.com>

        Unreviewed build fix.

        * page/WindowFeatures.cpp: Add missing header for OptionSet.
        * platform/graphics/FontTaggedSettings.cpp: Add missing header for IntegerHash.

2018-11-06  Antoine Quint  <graouts@apple.com>

        [Web Animations] Don't reset pending tasks when setting a null effect
        https://bugs.webkit.org/show_bug.cgi?id=191301
        <rdar://problem/45838422>

        Reviewed by Dean Jackson.

        The issue https://github.com/w3c/csswg-drafts/issues/2077 has changed the Web Animations API such that
        we no longer reset pending tasks when setting a null effect on an animation.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setEffect):

2018-11-06  Antoine Quint  <graouts@apple.com>

        [Web Animations] Update the API to allow the "auto" composite value
        https://bugs.webkit.org/show_bug.cgi?id=191300
        <rdar://problem/45838373>

        Reviewed by Dean Jackson.

        The Web Animations API has been changed such that the various "composite" properties are no longer optional and instead
        allow an "auto" value in their enumeration.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/CompositeOperationOrAuto.h: Copied from Source/WebCore/animation/KeyframeEffect.idl.
        * animation/CompositeOperationOrAuto.idl: Copied from Source/WebCore/animation/KeyframeEffect.idl.
        * animation/KeyframeEffect.cpp:
        (WebCore::processKeyframeLikeObject):
        (WebCore::processIterableKeyframes):
        (WebCore::processPropertyIndexedKeyframes):
        (WebCore::KeyframeEffect::getKeyframes):
        * animation/KeyframeEffect.h:
        * animation/KeyframeEffect.idl:

2018-11-06  Antoine Quint  <graouts@apple.com>

        [Web Animations] Update the API to implement Animation.updatePlaybackRate()
        https://bugs.webkit.org/show_bug.cgi?id=186510
        <rdar://problem/41000641>

        Reviewed by Dean Jackson.

        The Web Animations API has been changed to allow for changes to an animation's playback rate both synchronously,
        with the existing "playbackRate" property, and asynchronously, with the new updatePlaybackRate() method. In this
        patch we update the various procedures to account for pending playback rate changes and the notion of an "effective
        playback rate".

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setEffect):
        (WebCore::WebAnimation::setTimeline):
        (WebCore::WebAnimation::setStartTime):
        (WebCore::WebAnimation::setCurrentTime):
        (WebCore::WebAnimation::effectivePlaybackRate const):
        (WebCore::WebAnimation::setPlaybackRate):
        (WebCore::WebAnimation::updatePlaybackRate):
        (WebCore::WebAnimation::applyPendingPlaybackRate):
        (WebCore::WebAnimation::playState const):
        (WebCore::WebAnimation::resetPendingTasks):
        (WebCore::WebAnimation::finish):
        (WebCore::WebAnimation::play):
        (WebCore::WebAnimation::runPendingPlayTask):
        (WebCore::WebAnimation::reverse):
        (WebCore::WebAnimation::runPendingPauseTask):
        * animation/WebAnimation.h:
        (WebCore::WebAnimation::playbackRate const):
        * animation/WebAnimation.idl:

2018-11-06  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement getTiming() and updateTiming()
        https://bugs.webkit.org/show_bug.cgi?id=186511
        <rdar://problem/41000677>

        Reviewed by Dean Jackson.

        The Web Animations API has been further simplified by removing the AnimationEffectTiming and AnimationEffectTimingReadOnly
        interfaces, removing the "timing" property on AnimationEffect replacing it with getTiming() and updateTiming() methods. This
        does not change the features of the API but simply how they are exposed.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/AnimationEffect.cpp:
        (WebCore::AnimationEffect::AnimationEffect):
        (WebCore::AnimationEffect::~AnimationEffect):
        (WebCore::AnimationEffect::phase const):
        (WebCore::AnimationEffect::activeTime const):
        (WebCore::AnimationEffect::overallProgress const):
        (WebCore::AnimationEffect::simpleIterationProgress const):
        (WebCore::AnimationEffect::currentIteration const):
        (WebCore::AnimationEffect::currentDirection const):
        (WebCore::AnimationEffect::transformedProgress const):
        (WebCore::AnimationEffect::getTiming):
        (WebCore::AnimationEffect::getComputedTiming):
        (WebCore::AnimationEffect::updateTiming):
        (WebCore::AnimationEffect::setIterationStart):
        (WebCore::AnimationEffect::setIterations):
        (WebCore::AnimationEffect::endTime const):
        (WebCore::AnimationEffect::setDelay):
        (WebCore::AnimationEffect::setEndDelay):
        (WebCore::AnimationEffect::setFill):
        (WebCore::AnimationEffect::setIterationDuration):
        (WebCore::AnimationEffect::setDirection):
        (WebCore::AnimationEffect::setTimingFunction):
        (WebCore::AnimationEffect::activeDuration const):
        * animation/AnimationEffect.h:
        (WebCore::AnimationEffect::delay const):
        (WebCore::AnimationEffect::endDelay const):
        (WebCore::AnimationEffect::fill const):
        (WebCore::AnimationEffect::iterationStart const):
        (WebCore::AnimationEffect::iterations const):
        (WebCore::AnimationEffect::iterationDuration const):
        (WebCore::AnimationEffect::direction const):
        (WebCore::AnimationEffect::timingFunction const):
        * animation/AnimationEffect.idl:
        * animation/AnimationEffectTiming.idl: Removed.
        * animation/AnimationEffectTimingReadOnly.cpp: Removed.
        * animation/AnimationEffectTimingReadOnly.h: Removed.
        * animation/AnimationEffectTimingReadOnly.idl: Removed.
        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::syncPropertiesWithBackingAnimation):
        * animation/CSSTransition.cpp:
        (WebCore::CSSTransition::setTimingProperties):
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::invalidateDOMEvents):
        * animation/DocumentTimeline.cpp:
        * animation/EffectTiming.idl:
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::create):
        (WebCore::KeyframeEffect::KeyframeEffect):
        (WebCore::KeyframeEffect::copyPropertiesFromSource):
        (WebCore::KeyframeEffect::setAnimatedPropertiesInStyle):
        (WebCore::KeyframeEffect::applyPendingAcceleratedActions):
        (WebCore::KeyframeEffect::backingAnimationForCompositedRenderer const):
        * animation/KeyframeEffect.h:
        * animation/OptionalEffectTiming.h: Renamed from Source/WebCore/animation/AnimationEffectTiming.h.
        * animation/OptionalEffectTiming.idl: Renamed from Source/WebCore/animation/AnimationEffectTiming.cpp.
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::effectTimingDidChange):
        (WebCore::WebAnimation::updatePlaybackRate):
        * animation/WebAnimation.h:
        (WebCore::WebAnimation::isRelevant const):
        * bindings/js/JSAnimationEffectTimingReadOnlyCustom.cpp: Removed.
        * bindings/js/WebCoreBuiltinNames.h:

2018-11-06  Antoine Quint  <graouts@apple.com>

        [Web Animations] Update the Web Animations API to remove all the ReadOnly interfaces
        https://bugs.webkit.org/show_bug.cgi?id=186512
        <rdar://problem/41000691>

        Reviewed by Dean Jackson.

        The Web Animations API has been simplified by removing its various ReadOnly interfaces. In this patch,
        we make the following changes, not adding code but merely merging and renaming files:

        - AnimationEffectReadOnly and AnimationEffect are now a single AnimationEffect interface
        - KeyframeEffectReadOnly and KeyframeEffect are now a single KeyframeEffect interface
        - ComputedTimingProperties is now named ComputedEffectTiming
        - AnimationEffectTimingProperties is now named EffectTiming

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/AnimationEffect.cpp: Renamed from Source/WebCore/animation/AnimationEffectReadOnly.cpp.
        (WebCore::AnimationEffect::~AnimationEffect):
        (WebCore::AnimationEffect::timingDidChange):
        (WebCore::AnimationEffect::localTime const):
        (WebCore::AnimationEffect::phase const):
        (WebCore::AnimationEffect::activeTime const):
        (WebCore::AnimationEffect::overallProgress const):
        (WebCore::AnimationEffect::simpleIterationProgress const):
        (WebCore::AnimationEffect::currentIteration const):
        (WebCore::AnimationEffect::currentDirection const):
        (WebCore::AnimationEffect::directedProgress const):
        (WebCore::AnimationEffect::transformedProgress const):
        (WebCore::AnimationEffect::iterationProgress const):
        (WebCore::AnimationEffect::getComputedTiming):
        * animation/AnimationEffect.h: Renamed from Source/WebCore/animation/AnimationEffectReadOnly.h.
        (WebCore::AnimationEffect::isKeyframeEffect const):
        * animation/AnimationEffect.idl: Renamed from Source/WebCore/animation/AnimationEffectReadOnly.idl.
        * animation/AnimationEffectTimingReadOnly.cpp:
        * animation/AnimationEffectTimingReadOnly.h:
        (WebCore::AnimationEffectTimingReadOnly::setEffect):
        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::removeAnimation):
        (WebCore::AnimationTimeline::cssAnimationForElementAndProperty):
        * animation/CSSTransition.cpp:
        * animation/ComputedEffectTiming.h: Renamed from Source/WebCore/animation/ComputedTimingProperties.h.
        * animation/ComputedEffectTiming.idl: Renamed from Source/WebCore/animation/ComputedTimingProperties.idl.
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::initialize):
        (WebCore::DeclarativeAnimation::flushPendingStyleChanges const):
        (WebCore::DeclarativeAnimation::phaseWithoutEffect const):
        (WebCore::DeclarativeAnimation::invalidateDOMEvents):
        * animation/DeclarativeAnimation.h:
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::getAnimations const):
        (WebCore::DocumentTimeline::transitionDidComplete):
        (WebCore::DocumentTimeline::computeExtentOfAnimation const):
        (WebCore::DocumentTimeline::isRunningAnimationOnRenderer const):
        (WebCore::DocumentTimeline::isRunningAcceleratedAnimationOnRenderer const):
        (WebCore::DocumentTimeline::animatedStyleForRenderer):
        (WebCore::DocumentTimeline::animationAcceleratedRunningStateDidChange):
        (WebCore::DocumentTimeline::updateListOfElementsWithRunningAcceleratedAnimationsForElement):
        (WebCore::DocumentTimeline::applyPendingAcceleratedAnimations):
        (WebCore::DocumentTimeline::resolveAnimationsForElement):
        * animation/EffectTiming.h: Renamed from Source/WebCore/animation/AnimationEffectTimingProperties.h.
        * animation/EffectTiming.idl: Renamed from Source/WebCore/animation/AnimationEffectTimingProperties.idl.
        * animation/KeyframeEffect.cpp:
        (WebCore::invalidateElement):
        (WebCore::CSSPropertyIDToIDLAttributeName):
        (WebCore::IDLAttributeNameToAnimationPropertyName):
        (WebCore::computeMissingKeyframeOffsets):
        (WebCore::processKeyframeLikeObject):
        (WebCore::processIterableKeyframes):
        (WebCore::processPropertyIndexedKeyframes):
        (WebCore::KeyframeEffect::create):
        (WebCore::KeyframeEffect::KeyframeEffect):
        (WebCore::KeyframeEffect::copyPropertiesFromSource):
        (WebCore::KeyframeEffect::getKeyframes):
        (WebCore::KeyframeEffect::processKeyframes):
        (WebCore::KeyframeEffect::updateBlendingKeyframes):
        (WebCore::KeyframeEffect::forceLayoutIfNeeded):
        (WebCore::KeyframeEffect::setBlendingKeyframes):
        (WebCore::KeyframeEffect::checkForMatchingTransformFunctionLists):
        (WebCore::KeyframeEffect::checkForMatchingFilterFunctionLists const):
        (WebCore::KeyframeEffect::checkForMatchingFilterFunctionLists):
        (WebCore::KeyframeEffect::checkForMatchingBackdropFilterFunctionLists):
        (WebCore::KeyframeEffect::checkForMatchingColorFilterFunctionLists):
        (WebCore::KeyframeEffect::computeDeclarativeAnimationBlendingKeyframes):
        (WebCore::KeyframeEffect::computeCSSAnimationBlendingKeyframes):
        (WebCore::KeyframeEffect::computeCSSTransitionBlendingKeyframes):
        (WebCore::KeyframeEffect::computedNeedsForcedLayout):
        (WebCore::KeyframeEffect::computeStackingContextImpact):
        (WebCore::KeyframeEffect::setTarget):
        (WebCore::KeyframeEffect::apply):
        (WebCore::KeyframeEffect::invalidate):
        (WebCore::KeyframeEffect::computeShouldRunAccelerated):
        (WebCore::KeyframeEffect::getAnimatedStyle):
        (WebCore::KeyframeEffect::setAnimatedPropertiesInStyle):
        (WebCore::KeyframeEffect::timingFunctionForKeyframeAtIndex):
        (WebCore::KeyframeEffect::updateAcceleratedAnimationState):
        (WebCore::KeyframeEffect::addPendingAcceleratedAction):
        (WebCore::KeyframeEffect::animationDidSeek):
        (WebCore::KeyframeEffect::animationSuspensionStateDidChange):
        (WebCore::KeyframeEffect::applyPendingAcceleratedActions):
        (WebCore::KeyframeEffect::backingAnimationForCompositedRenderer const):
        (WebCore::KeyframeEffect::renderer const):
        (WebCore::KeyframeEffect::currentStyle const):
        (WebCore::KeyframeEffect::computeExtentOfTransformAnimation const):
        (WebCore::containsRotation):
        (WebCore::KeyframeEffect::computeTransformedExtentViaTransformList const):
        (WebCore::KeyframeEffect::computeTransformedExtentViaMatrix const):
        * animation/KeyframeEffect.h:
        (WebCore::KeyframeEffect::ParsedKeyframe::ParsedKeyframe):
        (WebCore::KeyframeEffect::target const):
        (WebCore::KeyframeEffect::iterationComposite const):
        (WebCore::KeyframeEffect::composite const):
        (WebCore::KeyframeEffect::isRunningAccelerated const):
        (WebCore::KeyframeEffect::hasPendingAcceleratedAction const):
        (WebCore::KeyframeEffect::hasBlendingKeyframes const):
        (WebCore::KeyframeEffect::animatedProperties const):
        * animation/KeyframeEffect.idl:
        * animation/KeyframeEffectOptions.h:
        * animation/KeyframeEffectOptions.idl:
        * animation/KeyframeEffectReadOnly.cpp: Removed.
        * animation/KeyframeEffectReadOnly.h: Removed.
        * animation/KeyframeEffectReadOnly.idl: Removed.
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::create):
        (WebCore::WebAnimation::setEffect):
        (WebCore::WebAnimation::setEffectInternal):
        (WebCore::WebAnimation::setTimeline):
        (WebCore::WebAnimation::applyPendingAcceleratedActions):
        (WebCore::WebAnimation::computeRelevance):
        * animation/WebAnimation.h:
        (WebCore::WebAnimation::effect const):
        * animation/WebAnimation.idl:
        * bindings/js/JSAnimationEffectCustom.cpp: Renamed from Source/WebCore/bindings/js/JSAnimationEffectReadOnlyCustom.cpp.
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        * bindings/js/JSWebAnimationCustom.cpp:
        (WebCore::constructJSWebAnimation):
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/Document.cpp:

2018-11-06  Rob Buis  <rbuis@igalia.com>

        Some minor X-Content-Type-Options parsing issues
        https://bugs.webkit.org/show_bug.cgi?id=191107

        Reviewed by Darin Adler.

        Implement new parsing rules for X-Content-Type-Options [1]:
        https://github.com/whatwg/fetch/pull/818

        [1] https://fetch.spec.whatwg.org/#x-content-type-options-header

        Test: web-platform-tests/fetch/nosniff/parsing-nosniff.html

        * platform/network/HTTPParsers.cpp:
        (WebCore::isHTTPTabOrSpace):
        (WebCore::parseContentTypeOptionsHeader):

2018-11-06  Frederic Wang  <fwang@igalia.com>

        Overlay with -webkit-overflow-scrolling:touch doesn't become scrollable after added text makes it taller
        https://bugs.webkit.org/show_bug.cgi?id=158342

        Reviewed by Simon Fraser.

        Resizing the content of a -webkit-overflow-scrolling:touch overflow node on iOS may make it
        scrollable. However, the RenderLayerBacking's scrolling layer is not properly created
        when RenderLayerCompositor::updateScrollCoordinatedLayer is called and hence the UIProcess
        receives a null UIScrollView pointer when ScrollingTreeScrollingNodeDelegateIOS performs the
        associated update. In debug mode this hits an ASSERT and in release mode the overflow node
        remains unscrollable from the user's point of view. This patch fixes this issue by ensuring
        the RenderLayerBacking's scrolling layer is created during updateScrollCoordinatedStatus.

        Test: fast/scrolling/ios/update-scroll-coordinated-status.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedStatus): Call updateConfiguration()
        to ensure the scrolling layer is present and indicate whether a rebuild is necessary.

2018-11-05  Zan Dobersek  <zdobersek@igalia.com>

        Place Fontconfig-specific RefPtr specializations in RefPtrFontconfig.h
        https://bugs.webkit.org/show_bug.cgi?id=191267

        Reviewed by Michael Catanzaro.

        Move the Fontconfig-specific RefPtr specialization declarations from
        RefPtrCairo.h to RefPtrFontconfig.h, with definitions moved to the new
        RefPtrFontconfig.cpp implementation file. These specializations are
        not tied to Cairo in any way.

        * platform/FreeType.cmake:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/cairo/RefPtrCairo.cpp:
        * platform/graphics/cairo/RefPtrCairo.h:
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        * platform/graphics/freetype/RefPtrFontconfig.cpp: Added.
        (WTF::refIfNotNull):
        (WTF::derefIfNotNull):
        * platform/graphics/freetype/RefPtrFontconfig.h: Copied from Source/WebCore/platform/graphics/cairo/RefPtrCairo.h.

2018-11-05  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Fix WebCore/Modules includes
        https://bugs.webkit.org/show_bug.cgi?id=191287

        Reviewed by Fujii Hironori.

        No new tests. No change in behavior.

        Add in applicationmanifest to the list of includes and sort the
        modules directory.

        * CMakeLists.txt:

2018-11-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Cache glyph paths and share underline skipping code between all the ports
        https://bugs.webkit.org/show_bug.cgi?id=191239

        Reviewed by Alex Christensen.

        I was hoping that caching the glyph paths was going to be a performance progression,
        but it turns out that the additional overhead of WebCore::Path compensated for it.
        In total, the performance is the same (my testing says that this patch is a 1%
        progression, but that's within the noise).

        Because the ink skipping logic is now shared among all ports, Windows now gets it for
        free.

        Test: PerformanceTests/Layout/underline.html

        * platform/graphics/Font.cpp:
        (WebCore::Font::pathForGlyph const):
        * platform/graphics/Font.h:
        * platform/graphics/FontCascade.cpp:
        (WebCore::computeUnderlineType):
        (WebCore::GlyphIterationState::GlyphIterationState):
        (WebCore::findIntersectionPoint):
        (WebCore::updateX):
        (WebCore::findPathIntersections):
        (WebCore::GlyphToPathTranslator::GlyphToPathTranslator):
        (WebCore::GlyphToPathTranslator::containsMorePaths):
        (WebCore::GlyphToPathTranslator::path):
        (WebCore::GlyphToPathTranslator::extents):
        (WebCore::GlyphToPathTranslator::underlineType):
        (WebCore::GlyphToPathTranslator::advance):
        (WebCore::FontCascade::dashesForIntersectionsWithRect const):
        * platform/graphics/FontCascade.h:
        * platform/graphics/GlyphMetricsMap.h:
        (WebCore::GlyphMetricsMap::existingMetricsForGlyph):
        (WebCore::GlyphMetricsMap::GlyphMetricsPage::existingMetricsForGlyph const):
        (WebCore::GlyphMetricsMap<std::optional<Path>>::unknownMetrics):
        * platform/graphics/TextRun.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::platformPathForGlyph const):
        (WebCore::GlyphIterationState::GlyphIterationState): Deleted.
        (WebCore::findIntersectionPoint): Deleted.
        (WebCore::updateX): Deleted.
        (WebCore::findPathIntersections): Deleted.
        (): Deleted.
        (WebCore::CairoGlyphToPathTranslator::path): Deleted.
        (WebCore::CairoGlyphToPathTranslator::extents): Deleted.
        (WebCore::CairoGlyphToPathTranslator::underlineType): Deleted.
        (WebCore::CairoGlyphToPathTranslator::advance): Deleted.
        (WebCore::FontCascade::dashesForIntersectionsWithRect const): Deleted.
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::GlyphIterationState::GlyphIterationState): Deleted.
        (WebCore::findIntersectionPoint): Deleted.
        (WebCore::updateX): Deleted.
        (WebCore::findPathIntersections): Deleted.
        (): Deleted.
        (WebCore::MacGlyphToPathTranslator::path): Deleted.
        (WebCore::MacGlyphToPathTranslator::extents): Deleted.
        (WebCore::MacGlyphToPathTranslator::underlineType): Deleted.
        (WebCore::MacGlyphToPathTranslator::advance): Deleted.
        (WebCore::FontCascade::dashesForIntersectionsWithRect const): Deleted.
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformPathForGlyph const):
        * rendering/TextDecorationPainter.cpp:
        (WebCore::drawSkipInkUnderline):
        (WebCore::TextDecorationPainter::paintTextDecoration):

2018-11-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Clean up text decoration drawing code
        https://bugs.webkit.org/show_bug.cgi?id=191245

        Reviewed by Zalan Bujtas.

        This is some general clean up of the text decorations code. There is no behavior change.

        This patch modifies GraphicsContext::drawLineForText() & friends to accept a FloatRect instead of a FloatPoint + float width.
        This is helpful because it allows for easier bounding box calculations.
        This patch also removes some redundant computations that the skip:ink codepath was performing.
        This patch also refactors the wavy decoration parameters to not use out params.

        No new tests because there is no behavior change.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::computeUnderlineBoundsForText):
        (WebCore::GraphicsContext::computeLineBoundsAndAntialiasingModeForText):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextImpl.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::drawLinesForText):
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::DrawLinesForText::apply const):
        (WebCore::DisplayList::DrawLinesForText::localBounds const):
        (WebCore::DisplayList::operator<<):
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::DrawLinesForText::create):
        (WebCore::DisplayList::DrawLinesForText::thickness const):
        (WebCore::DisplayList::DrawLinesForText::DrawLinesForText):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::drawLinesForText):
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintMarkedTextDecoration):
        (WebCore::InlineTextBox::paintCompositionUnderline const):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        * rendering/TextDecorationPainter.cpp:
        (WebCore::strokeWavyTextDecoration):
        (WebCore::translateIntersectionPointsToSkipInkBoundaries):
        (WebCore::TextDecorationPainter::TextDecorationPainter):
        (WebCore::TextDecorationPainter::paintTextDecoration):
        (WebCore::drawSkipInkUnderline): Deleted.
        * rendering/TextDecorationPainter.h:
        (WebCore::TextDecorationPainter::setInlineTextBox):
        (WebCore::TextDecorationPainter::setWidth):
        (WebCore::TextDecorationPainter::setFont): Deleted.
        (WebCore::TextDecorationPainter::setBaseline): Deleted.
        * style/InlineTextBoxStyle.cpp:
        (WebCore::getWavyStrokeParameters):
        (WebCore::visualOverflowForDecorations):
        * style/InlineTextBoxStyle.h:

2018-11-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix the Windows build after r237835
        https://bugs.webkit.org/show_bug.cgi?id=191242

        Reviewed by Simon Fraser.

        * rendering/style/TextDecorationThickness.h:
        (WebCore::TextDecorationThickness::operator== const):

2018-11-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Swatch appears squished and off-center in inputs of type color
        https://bugs.webkit.org/show_bug.cgi?id=191279
        <rdar://problem/45816319>

        Reviewed by Tim Horton.

        This patch makes some small adjustments to color inputs on iOS to bring them closer to the intended design.
        See comments below for more details.

        Tests:  fast/forms/color/color-input-uses-color-well-appearance.html
                fast/forms/color/input-appearance-color.html

        * css/html.css:

        Adjust the UA stylesheet for color inputs on iOS.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintDecorations):

        When painting decorations for `ColorWellPart`, treat it as a standard button instead of the square button
        appearance.

        (WebCore::RenderTheme::colorInputStyleSheet const):

        Add `-webkit-appearance: color-well;` to the stylesheet for color inputs. Previously, this was special-cased on
        iOS, where color input elements had appearances of `textfield`; however, this patch makes some adjustments to
        RenderThemeIOS, allowing us to use `color-well` on iOS.

        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::platformUsesColorWellAppearance const): Deleted.

        Remove this from RenderTheme. This is no longer necessary, since all platforms now use
        `-webkit-appearance: color-well;`.

        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::adjustButtonStyle const):

        When painting buttons for color inputs, don't add rounded corners that are present by default for regular
        buttons.

2018-11-05  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] An audio track should be muted when capture is interrupted by the OS.
        https://bugs.webkit.org/show_bug.cgi?id= 191283
         <rdar://problem/45773103>

        Reviewed by Jon Lee.

        Test: fast/mediastream/media-stream-track-interrupted.html

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::setInterruptedForTesting):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::beginInterruption):
        (WebCore::CoreAudioCaptureSource::endInterruption):
        * testing/Internals.cpp:
        (WebCore::Internals::setMediaStreamSourceInterrupted):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-11-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Parsing support for text-underline-offset and text-decoration-thickness
        https://bugs.webkit.org/show_bug.cgi?id=191242

        Reviewed by Simon Fraser.

        Before we can implement the properties properly, we have to parse them.

        https://github.com/w3c/csswg-drafts/issues/3118#issuecomment-432297480 describes the grammar:
        text-underline-position: auto | [ [ under | from-font] || [ left | right ] ]
        text-underline-offset: auto | <length>
        text-decoration-thickness: auto | from-font | <length>

        This patch also takes the opportunity to update the grammar of text-underline-position to match the spec,
        and to add an alias to the unprefixed version.

        We still don't support the left and right values on text-underline-position. We should add those eventually.

        Tests: fast/css3-text/css3-text-decoration/text-decoration-thickness-parse.html
               fast/css3-text/css3-text-decoration/text-underline-offset-parse.html

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::textUnderlineOffsetToCSSValue):
        (WebCore::textDecorationThicknessToCSSValue):
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TextUnderlinePosition const):
        (WebCore::CSSPrimitiveValue::operator OptionSet<TextUnderlinePosition> const): Deleted.
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertTextUnderlinePosition):
        (WebCore::StyleBuilderConverter::convertTextUnderlineOffset):
        (WebCore::StyleBuilderConverter::convertTextDecorationThickness):
        * css/StyleResolver.cpp:
        (WebCore::shouldApplyPropertyInParseOrder):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeTextUnderlineOffset):
        (WebCore::consumeTextDecorationThickness):
        (WebCore::CSSPropertyParser::parseSingleValue):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::textUnderlinePosition const):
        (WebCore::RenderStyle::textUnderlineOffset const):
        (WebCore::RenderStyle::textDecorationThickness const):
        (WebCore::RenderStyle::setTextUnderlinePosition):
        (WebCore::RenderStyle::setTextUnderlineOffset):
        (WebCore::RenderStyle::setTextDecorationThickness):
        (WebCore::RenderStyle::initialTextUnderlinePosition):
        (WebCore::RenderStyle::initialTextUnderlineOffset):
        (WebCore::RenderStyle::initialTextDecorationThickness):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/TextDecorationThickness.h: Added.
        (WebCore::TextDecorationThickness::createWithAuto):
        (WebCore::TextDecorationThickness::createFromFont):
        (WebCore::TextDecorationThickness::createWithLength):
        (WebCore::TextDecorationThickness::isAuto const):
        (WebCore::TextDecorationThickness::isFromFont const):
        (WebCore::TextDecorationThickness::isLength const):
        (WebCore::TextDecorationThickness::setLengthValue):
        (WebCore::TextDecorationThickness::lengthValue const):
        (WebCore::TextDecorationThickness::operator== const):
        (WebCore::TextDecorationThickness::operator!= const):
        (WebCore::TextDecorationThickness::TextDecorationThickness):
        (WebCore::operator<<):
        * rendering/style/TextUnderlineOffset.h: Added.
        (WebCore::TextUnderlineOffset::createWithAuto):
        (WebCore::TextUnderlineOffset::createWithLength):
        (WebCore::TextUnderlineOffset::isAuto const):
        (WebCore::TextUnderlineOffset::isLength const):
        (WebCore::TextUnderlineOffset::setLengthValue):
        (WebCore::TextUnderlineOffset::lengthValue const):
        (WebCore::TextUnderlineOffset::lengthOr const):
        (WebCore::TextUnderlineOffset::operator== const):
        (WebCore::TextUnderlineOffset::operator!= const):
        (WebCore::TextUnderlineOffset::TextUnderlineOffset):
        (WebCore::operator<<):
        * style/InlineTextBoxStyle.cpp:
        (WebCore::computeUnderlineOffset):
        * style/InlineTextBoxStyle.h:

2018-11-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Spelling dots are drawn in the wrong place
        https://bugs.webkit.org/show_bug.cgi?id=190764

        Reviewed by Dean Jackson.

        - Dots should not be clipped.
        - Dots should be horizontally centered.
        - Dots should be drawn behind the text.
        - Distance from the baseline to the top of the dot should be 11.035% of font size.
        - Dot diameter should be 13.247% of the font size.
        - Distance between the dots (right side of the left dot to left side of the right dot) should be 9.457% of the font size.
        - The "font size" used in these calculations should be clamped so it's 10px <= font size <= 40px.

        Tests: editing/spelling/spelling-dots-position-2.html
               editing/spelling/spelling-dots-position-3.html
               editing/spelling/spelling-dots-position.html
               editing/spelling/spelling-dots-repaint.html

        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::colorForMarkerLineStyle): Align iOS and macOS implementations.
        (WebCore::GraphicsContext::drawDotsForDocumentMarker): Place the dots correctly.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine): The KnownToHaveNoOverflow flag should be cleared if the element has spelling dots,
            because there is no guarantee the spelling dots will lie inside the layout rect of the element.
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow): Update the repaint rects to include splling dot positions.
        * rendering/InlineFlowBox.h: Comments should explain why, not say what.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Draw the dots behind the text.
        (WebCore::InlineTextBox::hasMarkers const): Convenience.
        (WebCore::InlineTextBox::paintPlatformDocumentMarkers): Refactor bounds information into a helper function.
        (WebCore::InlineTextBox::calculateUnionOfAllDocumentMarkerBounds const): Use for repaint rect calculation.
        (WebCore::InlineTextBox::calculateDocumentMarkerBounds const): Place the dots correctly.
        (WebCore::InlineTextBox::paintPlatformDocumentMarker): Call the helper method.
        (WebCore::InlineTextBox::collectMarkedTextsForDocumentMarkers const):
        (WebCore::InlineTextBox::collectMarkedTextsForDocumentMarkers): Deleted.
        * rendering/InlineTextBox.h: Declare the helper methods.
        * rendering/SimpleLineLayout.cpp: Simple line layout doesn't know how to paint spelling dots, so make the presence of
            spelling dots opt us out of SLL.
        (WebCore::SimpleLineLayout::canUseForWithReason):
        * rendering/SimpleLineLayoutCoverage.cpp:
        (WebCore::SimpleLineLayout::printReason):
        * rendering/SimpleLineLayoutCoverage.h: Add a new opt-out reason.

2018-11-05  Dean Jackson  <dino@apple.com>

        Attempted build fix.

        * dom/messageports/MessagePortChannelRegistry.cpp:

2018-11-05  Chris Dumez  <cdumez@apple.com>

        Crash under DOMWindow::postMessageTimerFired()
        https://bugs.webkit.org/show_bug.cgi?id=191217
        <rdar://problem/40888466>

        Reviewed by Geoffrey Garen.

        Protect the frame in DOMWindow::postMessageTimerFired() before calling dispatchEvent() as dispatching the
        event may cause JS to run and this JS may cause the frame to be destroyed, in which case we will crash
        when trying to use the frame on the next line.

        Test: fast/dom/Window/remove-frame-in-message-event-handler.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessageTimerFired):

2018-11-05  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Fix EncodedImage timestamps to match what libWebRTC expects
        https://bugs.webkit.org/show_bug.cgi?id=190035

        Reviewed by Philippe Normand.

        We can't rely on GStreamer timestamps to pass to EncodedImages after encoding
        because libWebRTC doesn't use the timestamp we fed it but does
        some computation on the input timestamp in the images we pass in before it passes
        them back to the encoder. Then internally LibWebRTC relies on those exact timestamps
        passed into the encoder to do checks and compute RTP timestamps so we need to carefully
        pass the exact timestamps to LibWebRTC (in practice we still use GStreamer timestamps in
        all the GStreamer processing pipelines as the WebRTC object basically wraps the "same"
        `GstSample` all around, but we are not synced on the clock anyway).

        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        * platform/mediastream/gstreamer/GStreamerVideoFrameLibWebRTC.cpp:
        (WebCore::LibWebRTCVideoFrameFromGStreamerSample):
        * platform/mediastream/gstreamer/GStreamerVideoFrameLibWebRTC.h:
        * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:
        (WebCore::GStreamerVideoDecoder::newSampleCallback):
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::GStreamerVideoEncoder):
        (WebCore::GStreamerVideoEncoder::newSampleCallback):

2018-11-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Changing view scale sometimes does not zoom the page to the new initial scale when the page is zoomed in when ignoring meta viewport
        https://bugs.webkit.org/show_bug.cgi?id=191226
        <rdar://problem/45781765>

        Reviewed by Tim Horton.

        When `_setViewScale:` SPI is used to adjust the layout scale factor of the page, we multiply minimum, initial
        and maximum scales by the given layout scale factor to adjust for a larger or smaller minimum layout size.
        However, in the case where the layout size scale factor is greater than 1 and we're also forcing the viewport to
        be scalable, we override the default minimum scale with 1 (i.e. `forceAlwaysUserScalableMinimumScale`). This
        means that the might be off by a small margin due to rounding error when computing the content width and view
        width (see: r237743).

        This means that in the case where (1) the viewport is forced to be user-scalable, and (2) we're ignoring meta
        viewport parameters, and (3) `_viewScale` exceeds 1, we may end up computing a slightly different minimum scale
        than the default minimum scale multiplied by the layout size scale factor; subsequently, the page scale factor
        will be slightly different from initial scale, such that we'll no longer zoom to the new initial scale when
        changing view scale.

        This patch adjusts `forceAlwaysUserScalableMinimumScale` and `forceAlwaysUserScalableMaximumScale` to take the
        current layout scale factor into account when computing min and max scales when the viewport is forced to be
        always scalable.

        Test: fast/viewport/ios/minimum-scale-after-changing-view-scale.html

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::minimumScale const):
        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::maximumScale const):
        (WebCore::ViewportConfiguration::forceAlwaysUserScalableMaximumScale const):
        (WebCore::ViewportConfiguration::forceAlwaysUserScalableMinimumScale const):

        Turn these from constant values to const functions on ViewportConfiguration, which factor in the current
        viewport layout size scale factor.

2018-11-05  Dean Jackson  <dino@apple.com>

        Expose a constructor for PointerEvent from PlatformTouchEvent
        https://bugs.webkit.org/show_bug.cgi?id=191238
        <rdar://problem/45795682>

        Reviewed by Antoine Quint.

        Implement a constructor that takes a PlatformTouchEvent to
        create a PointerEvent. At the moment the code to call this
        constructor will live in WebKitAdditions, so no new tests
        yet.

        * SourcesCocoa.txt: Add PointerEventIOS.cpp.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/EventNames.h: Add macros for pointerdown, pointermove,
             pointerup, pointercancel.
        * dom/PointerEvent.cpp: Remove JSC namespace.
        * dom/PointerEvent.h: Add create and constructor that takes
             a PlatformTouchEvent.
        * dom/ios/PointerEventIOS.cpp: Added.

2018-11-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r237785.

        Introduced layout test and API test failures on macOS and iOS.

        Reverted changeset:

        "[iOS] Issue initial paint soon after the visuallyNonEmpty
        milestone is fired."
        https://bugs.webkit.org/show_bug.cgi?id=191078
        https://trac.webkit.org/changeset/237785

2018-11-05  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Error out when simulcast is activated
        https://bugs.webkit.org/show_bug.cgi?id=190678

        Reviewed by Philippe Normand.

        Implementing it is not for now yet.

        Tests for simulcast have been disabled as they now fail (instead of crashing).

        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::InitEncode):

2018-11-05  Youenn Fablet  <youenn@apple.com>

        RealtimeOutgoingAudioSource subclasses should observe its source when fully constructed
        https://bugs.webkit.org/show_bug.cgi?id=191241

        Reviewed by Eric Carlson.

        Moving the logic to observe the audio source to the point where the
        RealtimeOutgoingAudioSource subclass is fully initialized.
        Covered by existing tests.

        * platform/mediastream/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::RealtimeOutgoingAudioSource):
        (WebCore::RealtimeOutgoingAudioSource::observeSource):
        * platform/mediastream/RealtimeOutgoingAudioSource.h:
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp:
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::RealtimeOutgoingAudioSourceLibWebRTC):
        * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp:
        (WebCore::RealtimeOutgoingAudioSourceCocoa::RealtimeOutgoingAudioSourceCocoa):

2018-11-05  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Add webrtcencoder bin to cleanup and refactor the way we set encoders
        https://bugs.webkit.org/show_bug.cgi?id=190674

        Reviewed by Philippe Normand.

        webrtcencoder is a simple GstBin with a set of well known GStreamer encoders which
        it can use to implement encoding for different formats exposing a trimmed down unified API.

        It also adds proper handling of H264 profiles.

        The added files follow GStreamer coding style as we aim at upstreaming the element
        in the future.

        This is a refactoring so current tests already cover it.

        * platform/GStreamer.cmake:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::initializeGStreamerAndRegisterWebKitElements):
        * platform/mediastream/libwebrtc/GStreamerVideoEncoder.cpp: Added.
        (gst_webrtc_video_encoder_get_property):
        (gst_webrtc_video_encoder_set_bitrate):
        (gst_webrtc_video_encoder_set_format):
        (gst_webrtc_video_encoder_set_property):
        (register_known_encoder):
        (setup_x264enc):
        (setup_vp8enc):
        (setup_openh264enc):
        (set_bitrate_kbit_per_sec):
        (set_bitrate_bit_per_sec):
        (gst_webrtc_video_encoder_class_init):
        (gst_webrtc_video_encoder_init):
        * platform/mediastream/libwebrtc/GStreamerVideoEncoder.h: Added.
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::GStreamerVideoEncoder):
        (WebCore::GStreamerVideoEncoder::InitEncode):
        (WebCore::GStreamerVideoEncoder::createEncoder):
        (WebCore::GStreamerVideoEncoder::AddCodecIfSupported):
        (WebCore::GStreamerVideoEncoder::ImplementationName const):
        (WebCore::GStreamerVideoEncoder::SetRestrictionCaps):

2018-11-05  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] properly mark H.264 stream type in the "decoder"
        https://bugs.webkit.org/show_bug.cgi?id=190676

        Reviewed by Philippe Normand.

        Avoiding to have h264parse make assumption (which might be wrong at some
        point).

        * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:
        (WebCore::GStreamerVideoDecoder::GetCapsForFrame):

2018-11-05  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Do not sync libwerbtc stream on the clock
        https://bugs.webkit.org/show_bug.cgi?id=190677

        The approach here is basically to let libwebrtc do all the
        synchronisation for us, and the same way as it is done in apple ports,
        we basically try to display what libwebrtc outputs as fast as possible.

        Reviewed by Philippe Normand.

        Manually tested

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::setSyncOnSink):
        (WebCore::MediaPlayerPrivateGStreamer::syncOnClock):
        (WebCore::MediaPlayerPrivateGStreamer::loadFull):
        (WebCore::MediaPlayerPrivateGStreamer::load):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2018-11-05  Ali Juma  <ajuma@chromium.org>

        [IntersectionObserver] Fix isIntersecting computation when 0 is not a threshold
        https://bugs.webkit.org/show_bug.cgi?id=191210

        Reviewed by Simon Fraser.

        isIntersecting should be false if the intersection ratio is smaller than the
        smallest threshold value. Update the computation of isIntersecting to depend on
        the current thresholdIndex.

        Test: imported/w3c/web-platform-tests/intersection-observer/initial-observation-with-threshold-expected.html

        * dom/Document.cpp:
        (WebCore::Document::updateIntersectionObservations):

2018-11-05  Rob Buis  <rbuis@igalia.com>

        Remove some virtual methods in CachedRawResource
        https://bugs.webkit.org/show_bug.cgi?id=191251

        Reviewed by Frédéric Wang.

        Since CachedRawResource is final no need to introduce new virtual
        methods in CachedRawResource. This patch also removes an outdated
        comment and forward declaration.

        No new tests since no change in functionality.

        * loader/cache/CachedRawResource.h:

2018-11-05  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Move elements registration to GStreamerCommon
        https://bugs.webkit.org/show_bug.cgi?id=191189

        Reviewed by Xabier Rodriguez-Calvar.

        It was a bit odd to have this in the base player class and to have
        sub-classes calling a static function of the super-class.

        Covered by existing tests.

        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::initializeGStreamerAndRegisterWebKitElements):
        * platform/graphics/gstreamer/GStreamerCommon.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::isAvailable):
        (WebCore::MediaPlayerPrivateGStreamer::loadFull):
        (WebCore::MediaPlayerPrivateGStreamer::getSupportedTypes):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::registerMediaEngine):
        (WebCore::MediaPlayerPrivateGStreamerMSE::load):
        (WebCore::MediaPlayerPrivateGStreamerMSE::trackDetected):
        (WebCore::MediaPlayerPrivateGStreamerMSE::supportsType):

2018-11-04  Rob Buis  <rbuis@igalia.com>

        Remove ENABLE_OPENCL fully
        https://bugs.webkit.org/show_bug.cgi?id=191172

        Reviewed by Yusuke Suzuki.

        Forgot to simplify this, no need for applyAll anymore
        since it just calls apply.

        No new tests since no change in functionality.

        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::applyAll): Deleted.
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):

2018-11-04  Zalan Bujtas  <zalan@apple.com>

        [iOS] Issue initial paint soon after the visuallyNonEmpty milestone is fired.
        https://bugs.webkit.org/show_bug.cgi?id=191078
        <rdar://problem/45736178>

        Reviewed by Antti Koivisto.

        1. Improve visuallyNonEmpty milestone confidence level.
            Ignore whitespace and non visible text content.
            Parsing the main document should not necessarily fire the milestone. Check if there's any pending scripts/css/font loading.
            Check if the html/body is actually visible.

        2. Issue initial paint soon after the milestone fires.
            Use a 0ms timer to flush the initial paint.
            Throttle additional flushes for 500ms (remove the non-initial 1.5 throttling)

        3. Suspend optional style recalcs and layouts while painting is being throttled.
           When parsing yields we initiate a 0ms style recalc/layout timer.
           These optional layouts produce content that we have no intention to paint. 

        * dom/Document.cpp:
        (WebCore::Document::scheduleStyleRecalc):
        (WebCore::Document::shouldScheduleLayout):
        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::resetLayoutMilestones):
        (WebCore::FrameView::qualifiesAsVisuallyNonEmpty const):
        (WebCore::FrameView::updateSignificantRenderedTextMilestoneIfNeeded):
        (WebCore::FrameView::updateIsVisuallyNonEmpty):
        * page/FrameView.h:
        (WebCore::FrameView::incrementVisuallyNonEmptyCharacterCount): Ignore whitespace characters. Some pages start with plenty of whitespace only content.
        * platform/graphics/FontCascade.h:
        * rendering/RenderText.cpp: Check whether the text is actually visible at this point.
        (WebCore::RenderText::RenderText):

2018-11-04  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Add support for percentage height in quirks mode.
        https://bugs.webkit.org/show_bug.cgi?id=191232

        Reviewed by Antti Koivisto.

        In quirks mode, we go and travers the containing block chain to find a block level
        box with fixed height value to resolve the percentage value.

        Test: fast/block/basic/quirk-mode-percent-height.html

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedHeightValue):
        * layout/Verification.cpp:
        (WebCore::Layout::LayoutState::verifyAndOutputMismatchingLayoutTree const):

2018-11-04  Zalan Bujtas  <zalan@apple.com>

        [LFC][BCF] Add support for block level non-replaced inflow height percentage
        https://bugs.webkit.org/show_bug.cgi?id=191229

        Reviewed by Antti Koivisto.

        Test: fast/block/basic/child-block-level-box-with-height-percent.html

        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedHeightValue):
        (WebCore::Layout::computedHeightValue): Deleted.
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):

2018-11-04  Youenn Fablet  <youenn@apple.com>

        RealtimeOutgoingAudioSource should use DestructionThread::Main
        https://bugs.webkit.org/show_bug.cgi?id=191230

        Reviewed by Eric Carlson.

        Covered by imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html
        that should no longer crash in debug.

        * platform/mediastream/RealtimeOutgoingAudioSource.h:

2018-11-04  Youenn Fablet  <youenn@apple.com>

        IDB should allow storing RTCCertificate
        https://bugs.webkit.org/show_bug.cgi?id=191077

        Reviewed by Chris Dumez.

        Add support for serialization/deserialization of RTCCertificate.
        Store the origin in RTCCertificate and make sure that a certificate
        with a different origin cannot be used to create a RTCPeerConnection.

        Test: imported/w3c/web-platform-tests/webrtc/RTCCertificate-postMessage.html

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::generateCertificate):
        * Modules/mediastream/RTCCertificate.cpp:
        (WebCore::RTCCertificate::create):
        (WebCore::RTCCertificate::RTCCertificate):
        * Modules/mediastream/RTCCertificate.h:
        (WebCore::RTCCertificate::origin const):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::certificatesFromConfiguration):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/libwebrtc/LibWebRTCCertificateGenerator.cpp:
        (WebCore::LibWebRTCCertificateGenerator::RTCCertificateGeneratorCallback::RTCCertificateGeneratorCallback):
        (WebCore::LibWebRTCCertificateGenerator::generateCertificate):
        * Modules/mediastream/libwebrtc/LibWebRTCCertificateGenerator.h:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::CachedString::takeString):
        (WebCore::CloneDeserializer::readRTCCertificate):
        (WebCore::CloneDeserializer::readTerminal):

2018-11-04  Youenn Fablet  <youenn@apple.com>

        Add support for RTCMuxPolicy
        https://bugs.webkit.org/show_bug.cgi?id=191188

        Reviewed by Eric Carlson.

        Add support for RTCMuxPolicy dictionary option for both constructor and setConfiguration.
        Make sure setConfiguration throws if trying to change this policy.
        Pipe this parameter up to libwebrtc.
        Covered by rebased test.

        * Modules/mediastream/RTCConfiguration.h:
        * Modules/mediastream/RTCConfiguration.idl:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::iceServersFromConfiguration):
        (WebCore::RTCPeerConnection::initializeConfiguration):
        (WebCore::RTCPeerConnection::setConfiguration):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::rtcpMuxPolicyfromConfiguration):
        (WebCore::configurationFromMediaEndpointConfiguration):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/MediaEndpointConfiguration.cpp:
        (WebCore::MediaEndpointConfiguration::MediaEndpointConfiguration):
        * platform/mediastream/MediaEndpointConfiguration.h:
        * platform/mediastream/RTCPMuxPolicy.h: Added.

2018-11-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: capture changes to <canvas> that would affect the recorded context
        https://bugs.webkit.org/show_bug.cgi?id=190854

        Reviewed by Matt Baker.

        Updated existing tests: inspector/canvas/recording-2d.html
                                inspector/canvas/recording-bitmaprenderer.html
                                inspector/canvas/recording-webgl.html

        * html/HTMLCanvasElement.idl:
        Apply `CallTracingCallback=recordCanvasAction` to the `width` and `height` attributes so
        that they are recorded through the same path as `CanvasRenderingContext`.

        * html/CanvasBase.h:
        * html/CanvasBase.cpp:
        (WebCore::CanvasBase::callTracingActive const): Added.

        * bindings/js/CallTracer.h:
        * bindings/js/CallTracer.cpp:
        (WebCore::CallTracer::recordCanvasAction):


2018-11-03  Andy Estes  <aestes@apple.com>

        [Payment Request] PaymentResponse.retry()'s errorFields should be optional
        https://bugs.webkit.org/show_bug.cgi?id=191212

        Reviewed by Youenn Fablet.

        Per WebIDL, the errorFields argument to PaymentResponse.retry() should be optional. See
        <https://github.com/w3c/payment-request/issues/804> for details.

        Added test case to http/tests/paymentrequest/payment-response-retry-method.https.html.

        * Modules/paymentrequest/PaymentResponse.idl:

2018-11-02  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Resolve percentage height values.
        https://bugs.webkit.org/show_bug.cgi?id=191224

        Reviewed by Antti Koivisto.

        10.5 Content height: the 'height' property
        The percentage is calculated with respect to the height of the generated box's containing block.
        If the height of the containing block is not specified explicitly (i.e., it depends on content height),
        and this element is not absolutely positioned, the used height is calculated as if 'auto' was specified.

        https://www.w3.org/TR/CSS22/visudet.html#propdef-height

        Test: fast/block/basic/height-percentage-simple.html

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::isHeightAuto):
        (WebCore::Layout::computedHeightValue):
        (WebCore::Layout::contentHeightForFormattingContextRoot):
        (WebCore::Layout::FormattingContext::Geometry::computedMaxHeight):
        (WebCore::Layout::FormattingContext::Geometry::computedMinHeight):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):

2018-11-03  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] enumerateDevices should not expose devices that are not available to getUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=191177
        <rdar://problem/45747873>

        Reviewed by Jer Noble.

        Test: http/tests/media/media-stream/enumerate-devices-iframe-allow-attribute.html

        * Modules/mediastream/MediaDevicesRequest.cpp:
        (WebCore::MediaDevicesRequest::start): Only expose devices that are available to gUM.

        * Modules/mediastream/UserMediaController.cpp:
        (WebCore::isSecure): Moved from UserMediaRequest.cpp.
        (WebCore::isAllowedToUse): Ditto.
        (WebCore::UserMediaController::canCallGetUserMedia): Modified from UserMediaRequest.cpp.
        (WebCore::UserMediaController::logGetUserMediaDenial): Log reason for denial.
        * Modules/mediastream/UserMediaController.h:

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::start): Use UserMediaController::canCallGetUserMedia.
        (WebCore::isSecure): Deleted.
        (WebCore::isAllowedToUse): Deleted.
        (WebCore::canCallGetUserMedia): Deleted.

2018-11-02  Justin Michaud  <justin_michaud@apple.com>

        Add new global object and preliminary Worklets support for CSS painting api
        https://bugs.webkit.org/show_bug.cgi?id=190979

        Reviewed by Chris Dumez.

        Test: fast/css-custom-paint/worklet.html

        Add a new ScriptExecutionContext and global object to run worklets in. This is mostly copy+paste
        from Workers, but without any of the threading. Worklet.addModule does not yet support loading scripts
        or doing cross origin checking. There are quite a few parts of the ScriptExecutionContext api that are
        left as ASSERT_NOT_REACHED().

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::scriptExecutionContext const):
        * bindings/js/JSPaintWorkletGlobalScopeCustom.cpp: Renamed from Source/WebCore/bindings/js/JSCSSPaintWorkletGlobalScopeCustom.cpp.
        (WebCore::JSPaintWorkletGlobalScope::visitAdditionalChildren):
        (WebCore::JSPaintWorkletGlobalScope::registerPaint):
        * bindings/js/JSWorkletGlobalScopeBase.cpp: Added.
        (WebCore::JSWorkletGlobalScopeBase::JSWorkletGlobalScopeBase):
        (WebCore::JSWorkletGlobalScopeBase::finishCreation):
        (WebCore::JSWorkletGlobalScopeBase::clearDOMGuardedObjects):
        (WebCore::JSWorkletGlobalScopeBase::visitChildren):
        (WebCore::JSWorkletGlobalScopeBase::destroy):
        (WebCore::JSWorkletGlobalScopeBase::scriptExecutionContext const):
        (WebCore::JSWorkletGlobalScopeBase::supportsRichSourceInfo):
        (WebCore::JSWorkletGlobalScopeBase::shouldInterruptScript):
        (WebCore::JSWorkletGlobalScopeBase::shouldInterruptScriptBeforeTimeout):
        (WebCore::JSWorkletGlobalScopeBase::javaScriptRuntimeFlags):
        (WebCore::toJS):
        (WebCore::toJSWorkletGlobalScope):
        * bindings/js/JSWorkletGlobalScopeBase.h: Added.
        (WebCore::JSWorkletGlobalScopeBase::wrapped const):
        (WebCore::JSWorkletGlobalScopeBase::proxy const):
        (WebCore::JSWorkletGlobalScopeBase::createStructure):
        (WebCore::toJS):
        * bindings/js/ScriptState.cpp:
        (WebCore::execStateFromWorkerGlobalScope):
        (WebCore::execStateFromWorkletGlobalScope):
        * bindings/js/ScriptState.h:
        * bindings/js/WebCoreBuiltinNames.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (IsDOMGlobalObject):
        (ShouldUseGlobalObjectPrototype):
        (GenerateHeader):
        (GenerateRuntimeEnableConditionalStringForExposed):
        (GenerateImplementation):
        * bindings/scripts/preprocess-idls.pl:
        * css/CSSPaintImageValue.cpp:
        (WebCore::CSSPaintImageValue::image):
        * css/DOMCSSPaintWorklet.cpp:
        (WebCore::DOMCSSPaintWorklet::ensurePaintWorklet):
        (WebCore::DOMCSSPaintWorklet::ensurePaintWorkletGlobalScope): Deleted.
        * css/DOMCSSPaintWorklet.h:
        * css/DOMCSSPaintWorklet.idl:
        * dom/Document.cpp:
        (WebCore::Document::ensureCSSPaintWorklet):
        (WebCore::Document::setCSSPaintWorkletGlobalScope):
        (WebCore::Document::ensureCSSPaintWorkletGlobalScope): Deleted.
        * dom/Document.h:
        (WebCore::Document::getCSSPaintWorkletGlobalScope):
        * dom/EventTargetFactory.in:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::vm):
        (WebCore::ScriptExecutionContext::execState):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::isWorkletGlobalScope const):
        * inspector/agents/worker/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::injectedScriptForEval):
        * inspector/agents/worker/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::injectedScriptForEval):
        * platform/graphics/CustomPaintImage.cpp:
        (WebCore::CustomPaintImage::CustomPaintImage):
        (WebCore::CustomPaintImage::doCustomPaint):
        * platform/graphics/CustomPaintImage.h:
        * worklets/PaintWorkletGlobalScope.cpp: Copied from Source/WebCore/css/CSSPaintWorkletGlobalScope.cpp.
        (WebCore::PaintWorkletGlobalScope::create):
        (WebCore::PaintWorkletGlobalScope::PaintWorkletGlobalScope):
        (WebCore::PaintWorkletGlobalScope::devicePixelRatio):
        (WebCore::PaintWorkletGlobalScope::addRegisteredPaint):
        * worklets/PaintWorkletGlobalScope.h: Renamed from Source/WebCore/css/CSSPaintWorkletGlobalScope.h.
        * worklets/PaintWorkletGlobalScope.idl: Copied from Source/WebCore/css/CSSPaintWorkletGlobalScope.idl.
        * worklets/Worklet.cpp: Copied from Source/WebCore/css/CSSPaintWorkletGlobalScope.cpp.
        (WebCore::Worklet::create):
        (WebCore::Worklet::Worklet):
        (WebCore::Worklet::addModule):
        * worklets/Worklet.h: Renamed from Source/WebCore/css/CSSPaintWorkletGlobalScope.cpp.
        * worklets/Worklet.idl: Copied from Source/WebCore/css/CSSPaintWorkletGlobalScope.idl.
        * worklets/WorkletConsoleClient.cpp: Copied from Source/WebCore/inspector/agents/worker/WorkerDebuggerAgent.cpp.
        (WebCore::WorkletConsoleClient::WorkletConsoleClient):
        (WebCore::WorkletConsoleClient::messageWithTypeAndLevel):
        (WebCore::WorkletConsoleClient::count):
        (WebCore::WorkletConsoleClient::time):
        (WebCore::WorkletConsoleClient::timeEnd):
        (WebCore::WorkletConsoleClient::profile):
        (WebCore::WorkletConsoleClient::profileEnd):
        (WebCore::WorkletConsoleClient::takeHeapSnapshot):
        (WebCore::WorkletConsoleClient::timeStamp):
        (WebCore::WorkletConsoleClient::record):
        (WebCore::WorkletConsoleClient::recordEnd):
        * worklets/WorkletConsoleClient.h: Added.
        * worklets/WorkletGlobalScope.cpp: Added.
        (WebCore::WorkletGlobalScope::WorkletGlobalScope):
        (WebCore::WorkletGlobalScope::~WorkletGlobalScope):
        (WebCore::WorkletGlobalScope::evaluate):
        (WebCore::WorkletGlobalScope::isJSExecutionForbidden const):
        (WebCore::WorkletGlobalScope::disableEval):
        (WebCore::WorkletGlobalScope::disableWebAssembly):
        (WebCore::WorkletGlobalScope::completeURL const):
        (WebCore::WorkletGlobalScope::logExceptionToConsole):
        (WebCore::WorkletGlobalScope::addConsoleMessage):
        (WebCore::WorkletGlobalScope::addMessage):
        * worklets/WorkletGlobalScope.h: Added.
        (WebCore::WorkletGlobalScope::isPaintWorkletGlobalScope const):
        (WebCore::WorkletGlobalScope::identifier const):
        (WebCore::WorkletGlobalScope::script):
        (WebCore::WorkletGlobalScope::jsRuntimeFlags const):
        (isType):
        * worklets/WorkletGlobalScope.idl: Renamed from Source/WebCore/css/CSSPaintWorkletGlobalScope.idl.
        * worklets/WorkletScriptController.cpp: Added.
        (WebCore::WorkletScriptController::WorkletScriptController):
        (WebCore::WorkletScriptController::~WorkletScriptController):
        (WebCore::WorkletScriptController::forbidExecution):
        (WebCore::WorkletScriptController::isExecutionForbidden const):
        (WebCore::WorkletScriptController::disableEval):
        (WebCore::WorkletScriptController::disableWebAssembly):
        (WebCore::WorkletScriptController::initScriptWithSubclass):
        (WebCore::WorkletScriptController::initScript):
        (WebCore::WorkletScriptController::evaluate):
        (WebCore::WorkletScriptController::setException):
        * worklets/WorkletScriptController.h: Added.
        (WebCore::WorkletScriptController::workletGlobalScopeWrapper):
        (WebCore::WorkletScriptController::vm):
        (WebCore::WorkletScriptController::initScriptIfNeeded):

2018-11-02  Myles C. Maxfield  <mmaxfield@apple.com>

        Clean up drawLineForDocumentMarker()
        https://bugs.webkit.org/show_bug.cgi?id=191215

        Reviewed by Zalan Bujtas.

        In preparation for https://bugs.webkit.org/show_bug.cgi?id=190764, I need to do a little bit of refactoring.
        This patch has no behavior change; it just does the following:

        1. Renames drawLineForDocumentMarker() to drawDotsForDocumentMarker(), because 2 of the 3 implementations draw dots
        2. Moves our implementation back into GraphicsContext, because it's simpler and  GraphicsContext is already platform-
               specific.
        3. The signature used to accept a location and a width, but without a height, it's difficult to know what the bounding
               box is. In particular, knowing the bounding box must be possible without a GraphicsContext. So, I've modified
               the signature to accept a rectangle instead. The GraphicsContext draws only within this rectangle.

        No new tests because there is no behavior change.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextImpl.h:
        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawDotsForDocumentMarker):
        (WebCore::Cairo::drawLineForDocumentMarker): Deleted.
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawDotsForDocumentMarker):
        (WebCore::GraphicsContext::drawLineForDocumentMarker): Deleted.
        * platform/graphics/cairo/GraphicsContextImplCairo.cpp:
        (WebCore::GraphicsContextImplCairo::drawDotsForDocumentMarker):
        (WebCore::GraphicsContextImplCairo::drawLineForDocumentMarker): Deleted.
        * platform/graphics/cairo/GraphicsContextImplCairo.h:
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::colorForMarkerLineStyle):
        (WebCore::GraphicsContext::drawDotsForDocumentMarker):
        (WebCore::GraphicsContext::drawLineForDocumentMarker): Deleted.
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::Item::sizeInBytes):
        (WebCore::DisplayList::DrawDotsForDocumentMarker::apply const):
        (WebCore::DisplayList::DrawDotsForDocumentMarker::localBounds const):
        (WebCore::DisplayList::operator<<):
        (WebCore::DisplayList::DrawLineForDocumentMarker::apply const): Deleted.
        (WebCore::DisplayList::DrawLineForDocumentMarker::localBounds const): Deleted.
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::DrawDotsForDocumentMarker::create):
        (WebCore::DisplayList::DrawDotsForDocumentMarker::rect const):
        (WebCore::DisplayList::DrawDotsForDocumentMarker::DrawDotsForDocumentMarker):
        (WebCore::DisplayList::DrawLineForDocumentMarker::create): Deleted.
        (WebCore::DisplayList::DrawLineForDocumentMarker::point const): Deleted.
        (WebCore::DisplayList::DrawLineForDocumentMarker::width const): Deleted.
        (WebCore::DisplayList::DrawLineForDocumentMarker::DrawLineForDocumentMarker): Deleted.
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::drawDotsForDocumentMarker):
        (WebCore::DisplayList::Recorder::drawLineForDocumentMarker): Deleted.
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:
        (Nicosia::CairoOperationRecorder::drawDotsForDocumentMarker):
        (Nicosia::CairoOperationRecorder::drawLineForDocumentMarker): Deleted.
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.h:
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawDotsForDocumentMarker):
        (WebCore::GraphicsContext::drawLineForDocumentMarker): Deleted.
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::drawDotsForDocumentMarker):
        (WebCore::GraphicsContext::drawLineForDocumentMarker): Deleted.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintPlatformDocumentMarker):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::drawLineForDocumentMarker): Deleted.
        * rendering/RenderTheme.h:
        * rendering/RenderThemeCocoa.h:
        * rendering/RenderThemeCocoa.mm:
        (WebCore::RenderThemeCocoa::drawLineForDocumentMarker): Deleted.
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::colorForMarkerLineStyle): Deleted.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::colorForMarkerLineStyle): Deleted.

2018-11-02  Ali Juma  <ajuma@chromium.org>

        requestAnimationFrame causes bad location of position:fixed inside overflow:auto and iframe
        https://bugs.webkit.org/show_bug.cgi?id=176243

        Reviewed by Simon Fraser.

        When a new layer tree is committed to the UIProcess, the positions of layers for fixed
        or sticky nodes in the newly-committed tree can be stale, because of scrolling that has
        happened in the UIProcess since the tree was updated in the WebProcess. To handle this,
        RemoteLayerTreeDrawingAreaProxy::commitLayerTree updates the positions of these layers
        by calling RemoteScrollingCoordinatorProxy::viewportChangedViaDelegatedScrolling, which
        leads to a recursive traversal of the ScrollingTree to update each such layer. However,
        since ScrollingTreeFrameScrollingNodeIOS didn't implement updateLayersAfterAncestorChange,
        this traversal never descended into scrolling nodes within an iframe, so the layers for
        these nodes were left with stale positions.

        Implement ScrollingTreeFrameScrollingNodeIOS::updateLayersAfterAncestorChange so that
        fixed and sticky layers within an iframe do get their positions updated when a new layer
        tree is committed.

        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateLayersAfterAncestorChange):

2018-11-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Changing view scale sometimes does not zoom the page to the new initial scale, when the page is at initial scale
        https://bugs.webkit.org/show_bug.cgi?id=191180
        <rdar://problem/45744786>

        Reviewed by Simon Fraser.

        When computing the minimum scale in ViewportConfiguration::minimumScale, if our content width or height is
        shorter than the view width or height, then we recompute the minimum scale such that the content dimensions will
        fill the bounds of the view by setting the minimum scale to the view width or height divided by the content
        width or height.

        Suppose the minimum scale is equal to some value `s`; additionally, let `w_c` denote the content width and `w_v`
        denote the view width (as integers). If `w_v / s` is not an integral value, the computed content width `w_c` may
        be rounded, such that `w_v / w_c` is not precisely equal to `s`. In the case that `w_v / w_c` is ever so
        slightly larger than `s`, we will end up overriding the minimum scale `s` with `w_v / w_c`.

        As a result, specifying a viewport with a decimal `minimum-scale` will sometimes cause the computed minimum
        scale of the viewport (and platform view) to be very slightly different from the minimum scale. The new layout
        test below exercises this scenario, specifying a viewport with minimum and initial scales of 0.94 that results
        in `ViewportConfiguration::minimumScale` returning 0.94158.

        With the `WebPage::setViewportConfigurationViewLayoutSize` check added in r237127, this means setting
        `_viewScale:` when the page is at initial scale sometimes doesn't zoom the page to the new initial scale when it
        should, since the page scale factor and the initial scale are different enough such that
        `areEssentiallyEqualAsFloat` returns false.

        This patch addresses these issues by snapping to the minimum scale if the computed scale that fits content
        dimensions to view dimensions results in a minimum scale that is close enough to the configuration's minimum
        scale, such that the difference can be attributed to rounding error when computing content or view dimensions.

        Test: fast/viewport/ios/viewport-minimum-and-initial-scale.html

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::minimumScale const):

2018-11-02  Philippe Normand  <pnormand@igalia.com>

        [GTK][WPE] Unreviewed, another --no-video --no-web-audio build fix following r237677

        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::addEventListenersToNode):

2018-11-02  Daniel Bates  <dabates@apple.com>

        [iOS] Normalize character string based on key code
        https://bugs.webkit.org/show_bug.cgi?id=191120

        Reviewed by Tim Horton.

        Following r236417 (https://bugs.webkit.org/show_bug.cgi?id=189604) we always have a valid key code
        for a special key (e.g. page up) and can simplify the character string normalization code.

        No functionality changed. So, no new tests.

        * platform/ios/WebEvent.mm:
        (normalizedStringWithAppKitCompatibilityMapping): Modified to take a key code and wrote algorithm
        in terms of it.

        (-[WebEvent initWithKeyEventType:timeStamp:characters:charactersIgnoringModifiers:modifiers:isRepeating:withFlags:keyCode:isTabKey:characterSet:]):
        (-[WebEvent initWithKeyEventType:timeStamp:characters:charactersIgnoringModifiers:modifiers:isRepeating:withFlags:withInputManagerHint:keyCode:isTabKey:]):
        Pass the key code for the event to normalizedStringWithAppKitCompatibilityMapping().

2018-11-02  Daniel Bates  <dabates@apple.com>

        [iOS] WebKit should dispatch DOM events when a modifier key is pressed
        https://bugs.webkit.org/show_bug.cgi?id=190487

        Reviewed by Tim Horton.

        Add support for modifier flags change events.

        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::modifiersForEvent): Modifier keys do not have an associated character and do not
        participate in key repeat.
        (WebCore::keyIdentifierForKeyEvent): Identify modifier keys, returning "Unidentified" if
        the modifier key is unidentified. This matches the behavior on Mac.
        (WebCore::keyForKeyEvent): Identify modifier keys, returning the empty string if the modifier
        key is unidentified. This matches the behavior on Mac.
        (WebCore::PlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder):
        * platform/ios/WebEvent.h:

        * platform/ios/WebEvent.mm:
        (-[WebEvent initWithKeyEventType:timeStamp:characters:charactersIgnoringModifiers:modifiers:isRepeating:withFlags:keyCode:isTabKey:characterSet:]):
        (-[WebEvent initWithKeyEventType:timeStamp:characters:charactersIgnoringModifiers:modifiers:isRepeating:withFlags:withInputManagerHint:keyCode:isTabKey:]):
        Modifier keys do not have an associated character and do not participate in key repeat.

        (-[WebEvent _eventDescription]): Modified to print a description for a keydown or keyup event
        that represents a modifier flags change.
        (-[WebEvent characters]): Modifier keys do not have an associated character. Assert this
        invariant as it is a programming error. On Mac, the same operation would result in a
        NSInternalInconsistencyException exception being raised.
        (-[WebEvent charactersIgnoringModifiers]): Ditto.

2018-11-02  Ali Juma  <ajuma@chromium.org>

        Allow cross-document intersection observing
        https://bugs.webkit.org/show_bug.cgi?id=165746

        Reviewed by Simon Fraser.

        Add logic to compute the intersection between the viewport and an element in a
        subframe.

        Add a FloatRect version of ScrollView::rootViewToContents, and FloatRect versions
        of the methods it calls.

        Test: http/tests/intersection-observer/intermediate-frame-changes.html
        Also covered by rebased tests in imported/w3c/web-platform-tests/intersection-observer.

        * dom/Document.cpp:
        (WebCore::computeClippedRectInRootContentsSpace):
        (WebCore::computeIntersectionState):
        (WebCore::Document::updateIntersectionObservations):
        * page/FrameView.cpp:
        (WebCore::FrameView::viewportContentsChanged):
        (WebCore::FrameView::convertFromContainingViewToRenderer const):
        (WebCore::FrameView::convertFromContainingView const):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::viewToContents const):
        (WebCore::ScrollView::contentsToView const):
        (WebCore::ScrollView::rootViewToContents const):
        * platform/ScrollView.h:
        * platform/Widget.cpp:
        (WebCore::Widget::convertFromRootView const):
        (WebCore::Widget::convertFromContainingView const):
        * platform/Widget.h:

2018-11-02  Rob Buis  <rbuis@igalia.com>

        Remove ENABLE_OPENCL fully
        https://bugs.webkit.org/show_bug.cgi?id=191172

        Reviewed by Yusuke Suzuki.

        No new tests since no change in functionality.

        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::hasResult const):
        (WebCore::FilterEffect::applyAll):
        (WebCore::FilterEffect::openCLImage): Deleted.
        (WebCore::FilterEffect::setOpenCLImage): Deleted.

2018-11-02  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for intrinsic width calculation
        https://bugs.webkit.org/show_bug.cgi?id=191144

        Reviewed by Antti Koivisto.

        This is the inline formatting version of the shrink-to-fit computation. It generates inline runs
        and uses InlineLineBreaker to compute min/max width. This is very similar to ::layout.

        Test: fast/inline/simple-shrink-to-fit-inline-block.html

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin const):
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin const):
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox const):
        (WebCore::Layout::InlineFormattingContext::collectInlineContent const):
        (WebCore::Layout::InlineFormattingContext::instrinsicWidthConstraints const):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndHeightForInlineBox const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:

2018-11-02  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] BlockFormattingContext::instrinsicWidthConstraints logic should look similar to ::layout
        https://bugs.webkit.org/show_bug.cgi?id=191181

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::instrinsicWidthConstraints const):

2018-11-02  Zalan Bujtas  <zalan@apple.com>

        [LFC] Align shrink-to-fit width computation with the layout implementation.
        https://bugs.webkit.org/show_bug.cgi?id=191179

        Reviewed by Antti Koivisto.

        There are many similarities between layout and shrink-to-fit.
        They both operate on formatting roots only (shrink-to-fit -> float, out-of-flow, inline-block) and in both cases
        the algoritm depends on what type of formatting context the element establishes.

        This patch is in preparation for transforming the "shrink-to-fit" width computation to make it behave more like layout.
        With this change the instrinsicWidthConstraints() computation happens in the formatting context that the element establishes (similar to layout).

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):
        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::shrinkToFitWidth):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingWidthAndMargin):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::instrinsicWidthConstraints const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::InlineFormattingContext::instrinsicWidthConstraints const):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin):

2018-11-01  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make document.getAnimations() return declarative animations in the correct order
        https://bugs.webkit.org/show_bug.cgi?id=191153

        Reviewed by Dean Jackson.

        The Web Animations spec has the notion of "composite order" which determines the order in which animations should
        be returned when document.getAnimations() is called. The CSS Transitions and CSS Animations specifications also
        determine the composite order of their respective animation classes, as well as the notion of "owning element",
        the element that was the animation target when specified through style, prior to any manipulation via the Web
        Animations API. We implement these two notions so that we can pass the document.getAnimations() tests for
        declarative animations.

        It is important that we have the notion of an "owning element" since when a CSS Transition or CSS Animation is
        modified via the Web Animations API in a way that an animation created through CSS we must consider no longer
        as a declarative animation but as a regular Web Animation. In this patch, we remove the DeclarativeAnimation's
        target(), which returned a reference, to owningElement(), which returns a pointer and return nullptr once the
        declarative animation has been modified.

        In order to also keep a correct count of declarative animations applied to elements, we correctly add transitions
        that have completed to a list of completed transitions, as specified by the CSS Transitions spec. We have had this
        list declared in AnimationTimeline.h for a while but never actually did the work to add items to it. Thanks to that,
        AnimationTimeline::updateCSSTransitionsForElement() now correctly accounts for completed transitions so that they
        may be canceled if overridden with a new animation, correctly removing their "owning element".

        Finally, now that we have saner lists of animations per classes, we can apply the right sorting routines to match
        the composite order for CSS Transitions, CSS Animations and Web Animations, keeping a list of all animations created
        in order as the final criterion for sorting.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::animationTimingDidChange): Make sure this animation is tracked on the list of all animations
        created for this timeline in the order in which they were created, which is needed to sort animations correctly when
        document.getAnimations() is called.
        (WebCore::AnimationTimeline::animationWasAddedToElement): We've removed the relevantMapForAnimation() method which we used
        to determine which map we should add an animation to based on its class and instead have code that accounts for not just
        the animation's class, but also whether it has an owning element since a valid owning element is required to qualify as
        a CSS Transition or CSS Animation, regardless of the animation's original class.
        (WebCore::removeAnimationFromMapForElement): Adding this helper to remove an animation from the provided animation map so
        that animationWasRemovedFromElement() can call this with all of the various animation maps.
        (WebCore::AnimationTimeline::animationWasRemovedFromElement): Check all of the various animation maps to see which may
        contain the animation we're trying to remove as the owning element might have been cleared by the time this function is
        called and looking at the animation's class would not be sufficient to determine which animation map the animation was in.
        (WebCore::AnimationTimeline::removeDeclarativeAnimationFromListsForOwningElement): New function in which the logic from
        animationWasRemovedFromElement() that dealt with removing animations from the list of running CSS Animations/Transitions as
        well as completed CSS Transitions was factored out. This allowed us to also call this function from
        DeclarativeAnimation::disassociateFromOwningElement().
        (WebCore::AnimationTimeline::elementWasRemoved): We no longer need to remove an animation as canceling it will remove it
        correctly when DocumentTimeline::updateAnimationsAndSendEvents() is called.
        (WebCore::AnimationTimeline::updateCSSAnimationsForElement): Call cancelDeclarativeAnimation() instead of the removed
        cancelOrRemoveDeclarativeAnimation() when a CSS Animation should be canceled.
        (WebCore::AnimationTimeline::ensureRunningTransitionsByProperty): Now that we correctly remove transitions from the list
        of running transitions once they've completed or have been canceled, we need a helper to always get a valid map of running
        transitions for a given element as that map can be cleared while updateCSSTransitionsForElement() is running. 
        (WebCore::AnimationTimeline::updateCSSTransitionsForElement): Call cancelDeclarativeAnimation() instead of the removed
        cancelOrRemoveDeclarativeAnimation() when a CSS Transition should be canceled. Additionally we always get the list of running
        transitions for a given element as it can be cleared by a prior cancelation.
        (WebCore::AnimationTimeline::cancelDeclarativeAnimation): New function replacing cancelOrRemoveDeclarativeAnimation() in which
        we call the new DeclarativeAnimation::cancelFromStyle() function on the provided animation and then remove the animation from
        all known lists, including the new list of all animations. We do this final part so that the animation gets re-added as if it
        were a new animation since canceling a declarative animation via a style change removes its declarative-ness. This guarantees
        that a declarative animation that is canceled through style but then resumed through the Web Animations API sorts after any
        declarative animation with an owning element.
        (WebCore::AnimationTimeline::relevantMapForAnimation): Deleted.
        (WebCore::AnimationTimeline::cancelOrRemoveDeclarativeAnimation): Deleted.
        * animation/AnimationTimeline.h:
        (WebCore::AnimationTimeline::timingModelDidChange): Deleted. This was left over in the patch where we implemented the "update
        animations and send events" procedure.
        (WebCore::AnimationTimeline::animations const): Deleted.
        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::create): Some refactoring to make the handling of a declarative animation's owning element part of the
        DeclarativeAnimation constructor.
        * animation/CSSTransition.cpp:
        (WebCore::CSSTransition::create): Some refactoring to make the handling of a declarative animation's owning element part of the
        DeclarativeAnimation constructor.
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::DeclarativeAnimation):
        (WebCore::DeclarativeAnimation::tick): Make sure we disassociate from the animation's owning element once we transition from a
        relevant state to an idle state. This will catch any changes made via the Web Animations API to a declarative animation when the
        "update animations and send events" procedure is run.
        (WebCore::DeclarativeAnimation::disassociateFromOwningElement): Remove this animation from the list of declarative animations on
        the associated timeline and make owningElement() nullptr so that document.getAnimations() will know to sort this animation with other
        Web Animations created via the Web Animations API.
        (WebCore::DeclarativeAnimation::initialize):
        (WebCore::DeclarativeAnimation::cancelFromStyle): New method called from AnimationTimeline::cancelDeclarativeAnimation() which
        cancels the animation but also disassociates it from its owning element.
        (WebCore::DeclarativeAnimation::invalidateDOMEvents):
        (WebCore::DeclarativeAnimation::enqueueDOMEvent):
        * animation/DeclarativeAnimation.h:
        (WebCore::DeclarativeAnimation::owningElement const):
        (WebCore::DeclarativeAnimation::target const): Deleted.
        * animation/DocumentTimeline.cpp:
        (WebCore::compareDeclarativeAnimationOwningElementPositionsInDocumentTreeOrder): Adding a new utility used when sorting both
        CSS Transitions and CSS Animations by tree order when their owning element differ, with special logic for pseudo-elements.
        (WebCore::DocumentTimeline::getAnimations const): Filter and sort animations according to their composite order.
        (WebCore::DocumentTimeline::updateAnimationsAndSendEvents): Compile a list of transitions that move to a finished state to
        the list of completed transitions so that they may be canceled correctly in AnimationTimeline::updateCSSTransitionsForElement().
        (WebCore::DocumentTimeline::transitionDidComplete):
        * animation/DocumentTimeline.h:

2018-11-02  Zan Dobersek  <zdobersek@igalia.com>

        PNGImageDecoder: report no repetition for non-animated images
        https://bugs.webkit.org/show_bug.cgi?id=191068

        Reviewed by Michael Catanzaro.

        When building with APNG support enabled, the
        PNGImageDecoder::repetitionCount() method until now reported  infinite
        repetition count for all PNG images, even the ones that were not
        animated. This is now changed so that no repetition is reported for
        non-animated images.

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::repetitionCount const):

2018-11-02  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Experimental prototype for MSL shaders
        https://bugs.webkit.org/show_bug.cgi?id=191084

        Reviewed by Dean Jackson.

        Begin implementation for WebGPUDevice and WebGPUShaderModule and associated descriptor objects.

        Test: webgpu/webgpu-basics.html
        Test: webgpu/shader-modules.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/webgpu/GPUDevice.cpp: 
        (WebCore::GPUDevice::createShaderModule const):
        * Modules/webgpu/GPUDevice.h: 
        (WebCore::GPUDevice::platformDevice const):
        * Modules/webgpu/GPUShaderModule.h:
        (WebCore::GPUShaderModule::platformShaderModule const):
        * Modules/webgpu/GPUShaderModuleDescriptor.h:
        * Modules/webgpu/WebGPU.cpp:
        (WebCore::WebGPU::requestAdapter const):
        * Modules/webgpu/WebGPUAdapter.cpp:
        (WebCore::WebGPUAdapter::create):
        (WebCore::WebGPUAdapter::createDevice):
        * Modules/webgpu/WebGPUAdapter.h:
        * Modules/webgpu/WebGPUAdapter.idl:
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::create):
        (WebCore::WebGPUDevice::WebGPUDevice):
        (WebCore::WebGPUDevice::createShaderModule const):
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDevice.idl:
        * Modules/webgpu/WebGPUShaderModule.cpp:
        (WebCore::WebGPUShaderModule::create):
        (WebCore::WebGPUShaderModule::WebGPUShaderModule):
        * Modules/webgpu/WebGPUShaderModule.h:
        * Modules/webgpu/WebGPUShaderModule.idl:
        * Modules/webgpu/WebGPUShaderModuleDescriptor.h:
        * Modules/webgpu/WebGPUShaderModuleDescriptor.idl:
        * Modules/webgpu/WebGPUSwapChain.cpp:
        (WebCore::WebGPUSwapChain::configure):
        * Modules/webgpu/WebGPUSwapChain.h:
        * Modules/webgpu/WebGPUSwapChain.idl:
        * Modules/webgpu/cocoa/GPUDeviceMetal.mm:
        (WebCore::GPUDevice::create):
        (WebCore::GPUDevice::GPUDevice):
        * Modules/webgpu/cocoa/GPUShaderModuleMetal.mm:
        (WebCore::GPUShaderModule::create):
        (WebCore::GPUShaderModule::GPUShaderModule):
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * platform/Logging.h:

2018-11-01  Jiewen Tan  <jiewen_tan@apple.com>

        Replace CommonRandom SPI with API
        https://bugs.webkit.org/show_bug.cgi?id=191178
        <rdar://problem/45722391>

        Reviewed by Brent Fulgham.

        The API is available since macOS 10.10 and iOS 10, and therefore it is safe to replace
        all SPI usages with API.

        No change of behaviors.

        * crypto/CommonCryptoUtilities.h:
        * crypto/mac/CryptoKeyMac.cpp:
        (WebCore::CryptoKey::randomData):
        * crypto/mac/SerializedCryptoKeyWrapMac.mm:
        (WebCore::createAndStoreMasterKey):
        (WebCore::wrapSerializedCryptoKey):
        * page/Crypto.cpp:
        (WebCore::Crypto::getRandomValues):

2018-11-01  Chris Dumez  <cdumez@apple.com>

        [WebIDL] Rename CallWith=ScriptState to CallWith=ExecState
        https://bugs.webkit.org/show_bug.cgi?id=191162

        Reviewed by Alex Christensen.

        Rename CallWith=ScriptState to CallWith=ExecState in our Web IDL as ScriptState is no longer a thing
        in modern WebKit. The implementation is actually passed an ExecState nowadays.

        * Modules/applepay/ApplePaySession.idl:
        * Modules/encryptedmedia/MediaKeyStatusMap.idl:
        * Modules/fetch/FetchBody.idl:
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBKeyRange.idl:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * animation/Animatable.idl:
        * animation/KeyframeEffect.idl:
        * animation/KeyframeEffectReadOnly.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallWith):
        (GenerateConstructorDefinition):
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjWithExecStateAttributeGetter):
        (WebCore::jsTestObjWithExecStateAttribute):
        (WebCore::setJSTestObjWithExecStateAttributeSetter):
        (WebCore::setJSTestObjWithExecStateAttribute):
        (WebCore::jsTestObjWithScriptExecutionContextAndExecStateAttributeGetter):
        (WebCore::jsTestObjWithScriptExecutionContextAndExecStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAndExecStateAttributeSetter):
        (WebCore::setJSTestObjWithScriptExecutionContextAndExecStateAttribute):
        (WebCore::jsTestObjWithScriptExecutionContextAndExecStateWithSpacesAttributeGetter):
        (WebCore::jsTestObjWithScriptExecutionContextAndExecStateWithSpacesAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAndExecStateWithSpacesAttributeSetter):
        (WebCore::setJSTestObjWithScriptExecutionContextAndExecStateWithSpacesAttribute):
        (WebCore::jsTestObjPrototypeFunctionWithExecStateVoidBody):
        (WebCore::jsTestObjPrototypeFunctionWithExecStateVoid):
        (WebCore::jsTestObjPrototypeFunctionWithExecStateObjBody):
        (WebCore::jsTestObjPrototypeFunctionWithExecStateObj):
        (WebCore::jsTestObjPrototypeFunctionWithExecStateVoidExceptionBody):
        (WebCore::jsTestObjPrototypeFunctionWithExecStateVoidException):
        (WebCore::jsTestObjPrototypeFunctionWithExecStateObjExceptionBody):
        (WebCore::jsTestObjPrototypeFunctionWithExecStateObjException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndExecStateBody):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndExecState):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndExecStateObjExceptionBody):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndExecStateObjException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndExecStateWithSpacesBody):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndExecStateWithSpaces):
        (WebCore::jsTestObjWithScriptStateAttributeGetter): Deleted.
        (WebCore::jsTestObjWithScriptStateAttribute): Deleted.
        (WebCore::setJSTestObjWithScriptStateAttributeSetter): Deleted.
        (WebCore::setJSTestObjWithScriptStateAttribute): Deleted.
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttributeGetter): Deleted.
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttribute): Deleted.
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttributeSetter): Deleted.
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttribute): Deleted.
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttributeGetter): Deleted.
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute): Deleted.
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttributeSetter): Deleted.
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute): Deleted.
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateVoidBody): Deleted.
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateVoid): Deleted.
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObjBody): Deleted.
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObj): Deleted.
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateVoidExceptionBody): Deleted.
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateVoidException): Deleted.
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObjExceptionBody): Deleted.
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObjException): Deleted.
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateBody): Deleted.
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptState): Deleted.
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateObjExceptionBody): Deleted.
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateObjException): Deleted.
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateWithSpacesBody): Deleted.
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateWithSpaces): Deleted.
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestPromiseRejectionEvent.idl:
        * crypto/SubtleCrypto.idl:
        * dom/Element.idl:
        * dom/ErrorEvent.idl:
        * dom/MessagePort.idl:
        * dom/MouseEvent.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLFrameElement.idl:
        * html/OffscreenCanvas.idl:
        * html/track/DataCue.idl:
        * inspector/CommandLineAPIHost.idl:
        * page/DOMWindow.idl:
        * page/RemoteDOMWindow.idl:
        * page/WindowOrWorkerGlobalScope.idl:
        * testing/Internals.idl:
        * workers/DedicatedWorkerGlobalScope.idl:
        * workers/Worker.idl:

2018-11-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        Rename <wtf/unicode/UTF8.h> to <wtf/unicode/UTF8Conversion.h> in order to avoid conflicting with ICU's unicode/utf8.h
        https://bugs.webkit.org/show_bug.cgi?id=189693

        Reviewed by Yusuke Suzuki.

        No new tests because there's no behaviro changes.

        * platform/SharedBuffer.cpp: Replaced <wtf/unicode/UTF8.h> with <wtf/unicode/UTF8Conversion.h>.
        * xml/XSLTProcessorLibxslt.cpp: Ditto.
        * xml/parser/XMLDocumentParserLibxml2.cpp: Ditto.

2018-11-01  John Wilander  <wilander@apple.com>

        In WebCore::ResourceLoadObserver, use document.sessionID().isEphemeral() when possible and check for page existence when not
        https://bugs.webkit.org/show_bug.cgi?id=191119
        <rdar://problem/44176965>

        Reviewed by Chris Dumez.

        New API test added.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):

2018-11-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: remove unnecessary media event tracking
        https://bugs.webkit.org/show_bug.cgi?id=191174

        Reviewed by Joseph Pecoraro.

        No new tests, as this simply removes some event listeners for the WebInspector frontend.

        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::addEventListenersToNode):

2018-11-01  Chris Dumez  <cdumez@apple.com>

        Location object sans browsing context
        https://bugs.webkit.org/show_bug.cgi?id=191060

        Reviewed by Geoffrey Garen.

        As per https://github.com/whatwg/html/pull/4076, a Location object's URL should be "about:blank" when
        it does not have a browsing context (Frame), not "".

        No new tests, rebaselined existing tests.

        * page/Location.cpp:
        (WebCore::Location::url const):
        (WebCore::Location::href const):
        (WebCore::Location::protocol const):
        (WebCore::Location::host const):
        (WebCore::Location::hostname const):
        (WebCore::Location::port const):
        (WebCore::Location::pathname const):
        (WebCore::Location::search const):
        (WebCore::Location::origin const):
        (WebCore::Location::hash const):

2018-11-01  Sihui Liu  <sihui_liu@apple.com>

        Add a storage limit for IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=190598
        <rdar://problem/44654715>

        Reviewed by Chris Dumez.

        Set a storage limit in IndexedDB for each pair of mainFrameOrigin and openingOrigin. 
        IndexedDB will return a QuotaExceededError if limit is reached.

        If the size of free disk space is over 1 GB, the default limit is 500 MB; otherwise it is 
        half the free disk space.

        Test: storage/indexeddb/storage-limit.html

        * Modules/indexeddb/server/IDBBackingStore.h:
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::createBackingStore):
        (WebCore::IDBServer::IDBServer::setPerOriginQuota):
        * Modules/indexeddb/server/IDBServer.h:
        (WebCore::IDBServer::IDBServer::perOriginQuota const):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::SQLiteIDBBackingStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::quotaForOrigin const):
        (WebCore::IDBServer::SQLiteIDBBackingStore::maximumSize const):
        (WebCore::IDBServer::SQLiteIDBBackingStore::beginTransaction):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::renameObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedPutIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::renameIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::addRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedSetKeyGeneratorValue):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::setQuota):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

2018-11-01  Justin Michaud  <justin_michaud@apple.com>

        CSS Custom Properties API Should Support syntax="*" and "<length>", and handle cycles properly
        https://bugs.webkit.org/show_bug.cgi?id=191042

        Reviewed by Antti Koivisto.

        Refactor code so that:
        - All properties applied in StyleResolver::applyMatchedProperties are only applied once. 
        - Custom properties are only resolved once, in StyleResolver, when they are applied to the RenderStyle. They were previously resolved
          every time they were referenced, and again in RenderStyle.
        - The font-size property is applied after its variable references, but before custom properties that depend on it.
        - Cycles are detected at the same time as resolution.
        - MutableStyleProperties' custom properties cannot be set from Javascript or WebKitLegacy if they do not parse for the property's type.
          If they contain var(--...) references, however, then they can be set because we cannot check if the references are valid from setProperty.
          This behaviour matches chrome, but is not documented in the spec. 
        - Custom property values have more explicit resolved/unresolved state.
        - RenderStyle only ever holds resolved custom properties, and StyleResolver::CascadedProperties only holds unresolved properties.

        Tests: css-custom-properties-api/crash.html
               css-custom-properties-api/cycles.html
               css-custom-properties-api/inline.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::customPropertyValue):
        * css/CSSCustomPropertyValue.cpp:
        (WebCore::CSSCustomPropertyValue::equals const):
        (WebCore::CSSCustomPropertyValue::customCSSText const):
        (WebCore::CSSCustomPropertyValue::tokens const):
        (WebCore::CSSCustomPropertyValue::checkVariablesForCycles const): Deleted.
        (WebCore::CSSCustomPropertyValue::resolveVariableReferences const): Deleted.
        (WebCore::CSSCustomPropertyValue::setResolvedTypedValue): Deleted.
        * css/CSSCustomPropertyValue.h:
        * css/CSSRegisteredCustomProperty.cpp:
        (WebCore::CSSRegisteredCustomProperty::CSSRegisteredCustomProperty):
        * css/CSSRegisteredCustomProperty.h:
        * css/CSSVariableData.cpp:
        (WebCore::CSSVariableData::CSSVariableData):
        (WebCore::CSSVariableData::consumeAndUpdateTokens): Deleted.
        (WebCore::CSSVariableData::checkVariablesForCycles const): Deleted.
        (WebCore::CSSVariableData::checkVariablesForCyclesWithRange const): Deleted.
        (WebCore::CSSVariableData::resolveVariableFallback const): Deleted.
        (WebCore::CSSVariableData::resolveVariableReference const): Deleted.
        (WebCore::CSSVariableData::resolveVariableReferences const): Deleted.
        (WebCore::CSSVariableData::resolveTokenRange const): Deleted.
        * css/CSSVariableData.h:
        (WebCore::CSSVariableData::create):
        (WebCore::CSSVariableData::createResolved): Deleted.
        (WebCore::CSSVariableData::needsVariableResolution const): Deleted.
        (WebCore::CSSVariableData::CSSVariableData): Deleted.
        * css/CSSVariableReferenceValue.cpp:
        (WebCore::resolveVariableFallback):
        (WebCore::resolveVariableReference):
        (WebCore::resolveTokenRange):
        (WebCore::CSSVariableReferenceValue::resolveVariableReferences const):
        (WebCore::CSSVariableReferenceValue::checkVariablesForCycles const): Deleted.
        * css/CSSVariableReferenceValue.h:
        (WebCore::CSSVariableReferenceValue::create):
        (WebCore::CSSVariableReferenceValue::equals const):
        (WebCore::CSSVariableReferenceValue::variableDataValue const): Deleted.
        * css/DOMCSSRegisterCustomProperty.cpp:
        (WebCore::DOMCSSRegisterCustomProperty::registerProperty):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::setProperty):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialCustomProperty):
        (WebCore::StyleBuilderCustom::applyValueCustomProperty):
        * css/StyleProperties.cpp:
        (WebCore::MutableStyleProperties::setCustomProperty):
        * css/StyleProperties.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::setStyle):
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::applyMatchedProperties):
        (WebCore::StyleResolver::applyPropertyToCurrentStyle):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::resolvedVariableValue const):
        (WebCore::StyleResolver::CascadedProperties::applyDeferredProperties):
        (WebCore::StyleResolver::CascadedProperties::Property::apply):
        (WebCore::StyleResolver::applyCascadedCustomProperty):
        (WebCore::StyleResolver::applyCascadedProperties):
        * css/StyleResolver.h:
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseValueWithVariableReferences):
        * css/parser/CSSParser.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::CSSPropertyParser):
        (WebCore::CSSPropertyParser::canParseTypedCustomPropertyValue):
        (WebCore::CSSPropertyParser::parseTypedCustomPropertyValue):
        (WebCore::CSSPropertyParser::collectParsedCustomPropertyValueDependencies):
        (WebCore::CSSPropertyParser::parseValueStart):
        (WebCore::CSSPropertyParser::parseSingleValue):
        * css/parser/CSSPropertyParser.h:
        * css/parser/CSSVariableParser.cpp:
        (WebCore::CSSVariableParser::parseDeclarationValue):
        * dom/ConstantPropertyMap.cpp:
        (WebCore::ConstantPropertyMap::setValueForProperty):
        (WebCore::variableDataForPositivePixelLength):
        (WebCore::variableDataForPositiveDuration):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::checkVariablesInCustomProperties): Deleted.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setInheritedCustomPropertyValue):
        (WebCore::RenderStyle::setNonInheritedCustomPropertyValue):
        * rendering/style/StyleCustomPropertyData.h:
        (WebCore::StyleCustomPropertyData::operator== const):
        (WebCore::StyleCustomPropertyData::setCustomPropertyValue):
        (WebCore::StyleCustomPropertyData::StyleCustomPropertyData):
        (): Deleted.

2018-11-01  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [CG] Adopt CG SPI for non-even cornered rounded rects
        https://bugs.webkit.org/show_bug.cgi?id=190155

        Reviewed by Simon Fraser.

        Instead of creating bezier curves for the non-even corners of the rounded
        rects, we should use the optimized SPI provided by CG.

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::platformAddPathForRoundedRect):

2018-11-01  Youenn Fablet  <youenn@apple.com>

        RTCTrackEvent.streams should be SameObject
        https://bugs.webkit.org/show_bug.cgi?id=191130

        Reviewed by Eric Carlson.

        Mimick SameObject using CachedAttribute.
        Covered by rebased test.

        * Modules/mediastream/RTCTrackEvent.idl:

2018-10-31  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for inline-block elements.
        https://bugs.webkit.org/show_bug.cgi?id=191143

        Reviewed by Antti Koivisto.

        This patch add support for laying out non-shrink-to-width inline-block elements.

        Test: fast/inline/simple-inline-block.html

        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::contentHeightForFormattingContextRoot):
        (WebCore::Layout::FormattingContext::Geometry::shrinkToFitWidth):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const):
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin):
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockHeightAndMargin):
        * layout/layouttree/LayoutInlineContainer.cpp:
        (WebCore::Layout::InlineContainer::establishesInlineFormattingContext const):
        * layout/layouttree/LayoutInlineContainer.h:
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createSubTree):

2018-11-01  Claudio Saavedra  <csaavedra@igalia.com>

        Fix build with VIDEO and WEB_AUDIO disabled
        https://bugs.webkit.org/show_bug.cgi?id=191147

        Reviewed by Philippe Normand.

        Supported or not, there were a few build fixes needed
        to be able to build WebKit with media disabled. Mostly
        low-hanging fruits.

        * Modules/mediasource/VideoPlaybackQuality.cpp:
        * Modules/mediasource/VideoPlaybackQuality.h:
        * Modules/mediasource/VideoPlaybackQuality.idl:
        * dom/Document.cpp:
        (WebCore::Document::dispatchFullScreenChangeOrErrorEvent):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend):
        * inspector/agents/InspectorDOMAgent.h:
        * rendering/RenderThemeGtk.cpp:

2018-10-31  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: create a setting for auto-recording newly created contexts
        https://bugs.webkit.org/show_bug.cgi?id=190856

        Reviewed by Brian Burg.

        Test: inspector/canvas/setRecordingAutoCaptureFrameCount.html

        * inspector/agents/InspectorCanvasAgent.h:
        (WebCore::InspectorCanvasAgent::RecordingOptions): Added.
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::enable):
        (WebCore::InspectorCanvasAgent::disable):
        (WebCore::InspectorCanvasAgent::setRecordingAutoCaptureFrameCount): Added.
        (WebCore::InspectorCanvasAgent::startRecording):
        (WebCore::InspectorCanvasAgent::didCreateCanvasRenderingContext):
        (WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame):
        (WebCore::InspectorCanvasAgent::consoleStartRecordingCanvas):
        (WebCore::InspectorCanvasAgent::startRecording): Added.
        Unify the different functions that are able to start a recording to use a single path.

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::resetRecordingData):
        (WebCore::InspectorCanvas::recordAction):
        (WebCore::InspectorCanvas::setFrameCount): Added.
        (WebCore::InspectorCanvas::overFrameCount const): Added.

2018-10-31  Devin Rousso  <drousso@apple.com>

        Web Inspector: display low-power enter/exit events in Timelines and Network node waterfalls
        https://bugs.webkit.org/show_bug.cgi?id=190641
        <rdar://problem/45319049>

        Reviewed by Joseph Pecoraro.

        No new tests, as low power mode is indeterminate. Should not affect functionality.

        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::addEventListenersToNode):
        (WebCore::InspectorDOMAgent::mediaMetricsTimerFired): Added.

2018-10-31  Alicia Boya García  <aboya@igalia.com>

        [MSE] Use tolerance when growing the coded frame group
        https://bugs.webkit.org/show_bug.cgi?id=190085

        Reviewed by Jer Noble.

        Test: media/media-source/media-source-append-acb-tolerance.html

        This patch introduces a millisecond tolerance in the range of
        potential frames that should be erased frame from the track buffer
        when the coded frame group is growing.

        This is necessary because some files have imprecise overlapping
        timestamps (especially WebM files).

        This fixes a stall when seeking back and forth in YouTube with WebM
        video.

        A test case simulating the problem with video/mock using timestamps
        similar to those of a typical 30 fps WebM video is also added.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):

2018-10-31  Jer Noble  <jer.noble@apple.com>

        MediaSource.isTypeSupported('video/mp4; codecs="hvc1.1.6.L60.B0') is inproperly rejected
        https://bugs.webkit.org/show_bug.cgi?id=191129

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-istypesupported-case-sensitive.html

        According to RFC 2045: "All media type values, subtype values, and parameter names as
        defined are case-insensitive. However, parameter values are case-sensitive unless otherwise
        specified for the specific parameter." So rather than fold the entire ContentType into lower-
        case, leave the original string intact and require clients to enforce case-insensitivity.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::isTypeSupported):

2018-10-31  Jer Noble  <jer.noble@apple.com>

        Unreivewed build fix; fix the non-HAVE_AVCONTENTKEYSESSION builds by adding guards around
        access of m_cdmInstance.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::attemptToDecryptWithInstance):

2018-10-31  YUHAN WU  <yuhan_wu@apple.com>

        MediaRecorder should fire dataavailable event when all tracks are ended and stop() is called
        https://bugs.webkit.org/show_bug.cgi?id=190778
        <rdar://problem/45703574>

        Reviewed by Youenn Fablet.

        Add a include to fix the unified build error.

        No tests since no new functionality.

        * Modules/webgpu/WebGPUDevice.cpp:

2018-10-26  Jer Noble  <jer.noble@apple.com>

        [EME][Cocoa] Cannot play unmuxed video and audio fMP4 streams encrypted with different keys via MSE
        https://bugs.webkit.org/show_bug.cgi?id=190946

        Reviewed by Eric Carlson.

        Use separate AVContentKeySessions per CDMInstanceSession (rather than one AVContentKeySession per
        CDMInstance).

        - Add a mechanism for sending a message out from platform/CDMInstance to MediaKeySession without
          requiring MediaKeySession to send a callback first.

        - Move all the AVContentKeySession delegate methods from CDMInstanceFairPlayStreamingAVFObjC to
          CDMInstanceSessionFairPlayStreamingAVFObjC.

        - Add a mechanism for requesting the correct CDMInstanceSession for a given KeyID.

        - Support key renewal through a "renew" message.

        - Remember the keyID in SourceBufferPrivateAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID()
          and ask for the correct CDMInstanceSession for that keyID in attemptToDecrypt().

        - Pass the CDMInstance down from MediaPlayerPrivateMediaSourceAVFObjC -> SourceBufferPrivateAVFObjC.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::sendMessage):
        * Modules/encryptedmedia/MediaKeySession.h:
        * platform/encryptedmedia/CDMInstanceSession.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (-[WebCoreFPSContentKeySessionDelegate initWithParent:]):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::initializeWithConfiguration):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::createSession):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::outputObscuredDueToInsufficientExternalProtectionChanged):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::sessionForKeyIDs const):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::CDMInstanceSessionFairPlayStreamingAVFObjC):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::~CDMInstanceSessionFairPlayStreamingAVFObjC):
        (WebCore::keyIDsForRequest):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::keyIDs):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::requestLicense):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::updateLicense):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::closeSession):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::removeSessionData):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvideRequest):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvideRenewingRequest):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didFailToProvideRequest):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::requestDidSucceed):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::nextRequest):
        (WebCore::requestStatusToCDMStatus):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::keyStatuses const):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::outputObscuredDueToInsufficientExternalProtectionChanged):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::ensureSession):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cdmInstanceAttached):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cdmInstanceDetached):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::attemptToDecryptWithInstance):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::outputObscuredDueToInsufficientExternalProtectionChanged):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::cdmInstanceAttached):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::cdmInstanceDetached):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::attemptToDecryptWithInstance):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::waitingForKey const):
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::addSourceBuffer):
        (WebCore::MediaSourcePrivateAVFObjC::cdmInstanceAttached):
        (WebCore::MediaSourcePrivateAVFObjC::cdmInstanceDetached):
        (WebCore::MediaSourcePrivateAVFObjC::attemptToDecryptWithInstance):
        (WebCore::MediaSourcePrivateAVFObjC::waitingForKey const):
        (WebCore::MediaSourcePrivateAVFObjC::outputObscuredDueToInsufficientExternalProtectionChanged):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID):
        (WebCore::SourceBufferPrivateAVFObjC::destroyParser):
        (WebCore::SourceBufferPrivateAVFObjC::setCDMInstance):
        (WebCore::SourceBufferPrivateAVFObjC::attemptToDecrypt):
        (WebCore::SourceBufferPrivateAVFObjC::outputObscuredDueToInsufficientExternalProtectionChanged):

2018-10-31  Zach Li  <zacharyli323@gmail.com>

        Add credit card autofill button
        https://bugs.webkit.org/show_bug.cgi?id=191051
        <rdar://problem/45657011>

        Reviewed by Wenson Hsieh.

        Test: fast/forms/auto-fill-button/input-credit-card-auto-fill-button.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * css/html.css:
        (input::-webkit-credit-card-auto-fill-button):
        Add credit card autofill button.
        (input::-webkit-credit-card-auto-fill-button:hover):
        (input::-webkit-credit-card-auto-fill-button:active):
        * html/HTMLTextFormControlElement.h:
        * html/TextFieldInputType.cpp:
        (WebCore::autoFillButtonTypeToAccessibilityLabel):
        (WebCore::autoFillButtonTypeToAutoFillButtonText):
        (WebCore::autoFillButtonTypeToAutoFillButtonPseudoClassName):
        (WebCore::isAutoFillButtonTypeChanged):
        * platform/LocalizedStrings.cpp:
        (WebCore::AXAutoFillCreditCardLabel):
        * platform/LocalizedStrings.h:
        * testing/Internals.cpp:
        (WebCore::toAutoFillButtonType):
        (WebCore::toInternalsAutoFillButtonType):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-10-31  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Don't reveal device IDs until the user has granted permission to capture
        https://bugs.webkit.org/show_bug.cgi?id=191112
        <rdar://problem/45699932>

        Reviewed by Youenn Fablet.

        No new tests, existing tests updated.

        * Modules/mediastream/MediaDevicesRequest.cpp:
        (WebCore::MediaDevicesRequest::start): Don't reveal device ID or group ID until the user 
        has granted permssion to capture.

2018-10-31  YUHAN WU  <yuhan_wu@apple.com>

        MediaRecorder should fire dataavailable event when all tracks are ended and stop() is called
        https://bugs.webkit.org/show_bug.cgi?id=190778

        Reviewed by Youenn Fablet.

        Implement JavaScript dispatch event dataavailable and JavaScript exposed method stop().
        Implement a mock string as the output buffer of MediaRecorder.
        Remove the declaration of timecode in BlobEvent since it has not been implemented in MediaRecorder and MediaRecorderPrivate. 

        Tests: http/wpt/mediarecorder/MediaRecorder-dataavailable.html
               http/wpt/mediarecorder/MediaRecorder-mock-dataavailable.html
               imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-destroy-script-execution.html
               imported/w3c/web-platform-tests/mediacapture-record/support/MediaRecorder-iframe.html

        * CMakeLists.txt:
        * Modules/mediarecorder/BlobEvent.cpp: Added.
        (WebCore::BlobEvent::create):
        (WebCore::BlobEvent::BlobEvent):
        (WebCore::BlobEvent::eventInterface const):
        * Modules/mediarecorder/BlobEvent.h:
        * Modules/mediarecorder/BlobEvent.idl:
        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::MediaRecorder):
        (WebCore::MediaRecorder::~MediaRecorder):
        (WebCore::MediaRecorder::stop):
        (WebCore::MediaRecorder::startRecording):
        (WebCore::MediaRecorder::stopRecording):
        (WebCore::MediaRecorder::stopRecordingInternal):
        (WebCore::MediaRecorder::didAddOrRemoveTrack):
        (WebCore::MediaRecorder::trackEnded):
        (WebCore::MediaRecorder::sampleBufferUpdated):
        (WebCore::MediaRecorder::audioSamplesAvailable):
        (WebCore::MediaRecorder::scheduleDeferredTask):
        * Modules/mediarecorder/MediaRecorder.h:
        * Modules/mediarecorder/MediaRecorder.idl:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.h:
        * dom/EventNames.in:
        * platform/mediarecorder/MediaRecorderPrivate.h: Added.
        * platform/mediarecorder/MediaRecorderPrivateMock.cpp: Added.
        (WebCore::MediaRecorderPrivateMock::sampleBufferUpdated):
        (WebCore::MediaRecorderPrivateMock::audioSamplesAvailable):
        (WebCore::MediaRecorderPrivateMock::generateMockString):
        (WebCore::MediaRecorderPrivateMock::fetchData):
        * platform/mediarecorder/MediaRecorderPrivateMock.h: Added.

2018-10-31  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK][WPE] Remaining topPrivatelyControlledDomain() fixes
        https://bugs.webkit.org/show_bug.cgi?id=191110

        Reviewed by Michael Catanzaro.

        Covered by existing tests.

        Turns out that this method is expected to reject domains that
        are not registrable. Also sync with the Mac implementation in
        that given domains that are not all ASCII should be returned
        back as is. This fixes the remaining Public Suffix API tests.

        * platform/soup/PublicSuffixSoup.cpp:
        (WebCore::topPrivatelyControlledDomain):

2018-10-31  Antti Koivisto  <antti@apple.com>

        Remove LayerFlushScheduler
        https://bugs.webkit.org/show_bug.cgi?id=191103

        Reviewed by Anders Carlsson.

        It is only used in WK1.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ca/LayerFlushScheduler.cpp: Removed.
        * platform/graphics/ca/LayerFlushScheduler.h: Removed.
        * platform/graphics/ca/LayerFlushSchedulerClient.h: Removed.
        * platform/graphics/ca/cocoa/LayerFlushSchedulerMac.cpp: Removed.

2018-10-31  Zalan Bujtas  <zalan@apple.com>

        Missing from r237634

        * layout/inlineformatting/InlineFormattingState.cpp:
        (WebCore::Layout::InlineFormattingState::formattingContext):

2018-10-31  Zalan Bujtas  <zalan@apple.com>

        [LFC] Do not pass LayoutState& to compute* and layout* functions
        https://bugs.webkit.org/show_bug.cgi?id=191100

        Reviewed by Antti Koivisto.

        Reduce noise by removing LayoutState& parameter where possible.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        (WebCore::Layout::FormattingContext::computeBorderAndPadding const):
        (WebCore::Layout::FormattingContext::placeInFlowPositionedChildren const):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        (WebCore::Layout::FormattingContext::validateGeometryConstraintsAfterLayout const):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::shrinkToFitWidth):
        * layout/LayoutFormattingState.cpp:
        (WebCore::Layout::LayoutState::layoutFormattingContextSubtree):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::BlockFormattingContext::computeStaticPosition const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginTop const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginTopForAncestors const):
        (WebCore::Layout::BlockFormattingContext::precomputeVerticalPositionForFormattingRootIfNeeded const):
        (WebCore::Layout::BlockFormattingContext::computeFloatingPosition const):
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats const):
        (WebCore::Layout::BlockFormattingContext::computeVerticalPositionForFloatClear const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowPositionedPosition const):
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        (WebCore::Layout::BlockFormattingContext::instrinsicWidthConstraints const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        (WebCore::Layout::InlineFormattingContext::initializeNewLine const):
        (WebCore::Layout::InlineFormattingContext::layoutInlineContent const):
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndHeightForInlineBox const):
        (WebCore::Layout::InlineFormattingContext::computeFloatPosition const):
        (WebCore::Layout::InlineFormattingContext::computeStaticPosition const):
        (WebCore::Layout::InlineFormattingContext::computeInFlowPositionedPosition const):
        (WebCore::Layout::InlineFormattingContext::instrinsicWidthConstraints const):
        * layout/inlineformatting/InlineFormattingContext.h:

2018-10-31  Zalan Bujtas  <zalan@apple.com>

        [LFC] FormattingContext class should take FormattingState&
        https://bugs.webkit.org/show_bug.cgi?id=191099

        Reviewed by Antti Koivisto.

        This is in preparation for not passing LayoutState& into every layout functions.
        FormattingContext has FormattingState now and LayoutState can be acquired through FormattingState.
        LayoutState <- FormattingState <- FormattingContext

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::FormattingContext):
        (WebCore::Layout::FormattingContext::formattingState const):
        (WebCore::Layout::FormattingContext::layoutState const):
        * layout/FormattingContext.h:
        * layout/FormattingState.cpp:
        (WebCore::Layout::FormattingState::FormattingState):
        * layout/FormattingState.h:
        (WebCore::Layout::FormattingState::layoutState const):
        * layout/LayoutFormattingState.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::BlockFormattingContext):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingState.cpp:
        (WebCore::Layout::BlockFormattingState::BlockFormattingState):
        (WebCore::Layout::BlockFormattingState::formattingContext):
        (WebCore::Layout::BlockFormattingState::formattingContext const): Deleted.
        * layout/blockformatting/BlockFormattingState.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineFormattingContext):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingState.cpp:
        (WebCore::Layout::InlineFormattingState::InlineFormattingState):
        (WebCore::Layout::InlineFormattingState::formattingContext):
        (WebCore::Layout::InlineFormattingState::formattingContext const): Deleted.
        * layout/inlineformatting/InlineFormattingState.h:

2018-10-31  Zalan Bujtas  <zalan@apple.com>

        [LFC] The *FormattingState class should provide the *FormattingContext.
        https://bugs.webkit.org/show_bug.cgi?id=191089

        Reviewed by Antti Koivisto.

        BlockFormattingState provides the BlockFormattingContext object, while InlineFormattingState provides the InlineFormattingContext.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        * layout/FormattingState.h:
        * layout/LayoutFormattingState.cpp:
        (WebCore::Layout::LayoutState::layoutFormattingContextSubtree):
        (WebCore::Layout::LayoutState::formattingContext const): Deleted.
        * layout/LayoutFormattingState.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::BlockFormattingContext::instrinsicWidthConstraints const):
        * layout/blockformatting/BlockFormattingState.cpp:
        (WebCore::Layout::BlockFormattingState::formattingContext const):
        * layout/blockformatting/BlockFormattingState.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const):
        * layout/inlineformatting/InlineFormattingState.cpp:
        (WebCore::Layout::InlineFormattingState::formattingContext const):
        * layout/inlineformatting/InlineFormattingState.h:

2018-10-31  Zalan Bujtas  <zalan@apple.com>

        [LFC] Rename LayoutContext to LayoutState
        https://bugs.webkit.org/show_bug.cgi?id=191080

        Reviewed by Antti Koivisto.

        LayoutContext naming was a bit misleading since none of the other *FormattingContext classes (BlockFormattingContext etc) hold states.
        (LayoutContext.cpp -> LayoutFormattingState.cpp because LayoutState.cpp name is already taken.)

        Now the current state is as follows:

        LayoutState has
        1. Layout tree
        2. State content for each formatting subtrees
        3. Display tree

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        (WebCore::Layout::FormattingContext::computeBorderAndPadding const):
        (WebCore::Layout::FormattingContext::placeInFlowPositionedChildren const):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        (WebCore::Layout::FormattingContext::mapBoxToAncestor):
        (WebCore::Layout::FormattingContext::mapTopLeftToAncestor):
        (WebCore::Layout::FormattingContext::mapCoordinateToAncestor):
        (WebCore::Layout::FormattingContext::validateGeometryConstraintsAfterLayout const):
        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::contentHeightForFormattingContextRoot):
        (WebCore::Layout::FormattingContext::Geometry::computedMaxHeight):
        (WebCore::Layout::FormattingContext::Geometry::computedMinHeight):
        (WebCore::Layout::staticVerticalPositionForOutOfFlowPositioned):
        (WebCore::Layout::staticHorizontalPositionForOutOfFlowPositioned):
        (WebCore::Layout::FormattingContext::Geometry::shrinkToFitWidth):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedBorder):
        (WebCore::Layout::FormattingContext::Geometry::computedPadding):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedHorizontalMarginValue):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedVerticalMarginValue):
        * layout/FormattingState.cpp:
        (WebCore::Layout::FormattingState::FormattingState):
        * layout/FormattingState.h:
        (WebCore::Layout::FormattingState::setInstrinsicWidthConstraints):
        (WebCore::Layout::FormattingState::instrinsicWidthConstraints const):
        * layout/LayoutFormattingState.cpp: Renamed from Source/WebCore/layout/LayoutContext.cpp.
        (WebCore::Layout::LayoutState::LayoutState):
        (WebCore::Layout::LayoutState::initializeRoot):
        (WebCore::Layout::LayoutState::updateLayout):
        (WebCore::Layout::LayoutState::layoutFormattingContextSubtree):
        (WebCore::Layout::LayoutState::displayBoxForLayoutBox const):
        (WebCore::Layout::LayoutState::styleChanged):
        (WebCore::Layout::LayoutState::markNeedsUpdate):
        (WebCore::Layout::LayoutState::formattingStateForBox const):
        (WebCore::Layout::LayoutState::establishedFormattingState const):
        (WebCore::Layout::LayoutState::createFormattingStateForFormattingRootIfNeeded):
        (WebCore::Layout::LayoutState::formattingContext const):
        * layout/LayoutFormattingState.h: Renamed from Source/WebCore/layout/LayoutContext.h.
        (WebCore::Layout::LayoutState::setInQuirksMode):
        (WebCore::Layout::LayoutState::hasDisplayBox const):
        (WebCore::Layout::LayoutState::inQuirksMode const):
        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingSimpleLineInformationIfNeeded):
        (WebCore::Layout::outputMismatchingComplexLineInformationIfNeeded):
        (WebCore::Layout::outputMismatchingBlockBoxInformationIfNeeded):
        (WebCore::Layout::verifyAndOutputSubtree):
        (WebCore::Layout::LayoutState::verifyAndOutputMismatchingLayoutTree const):
        (WebCore::Layout::LayoutContext::verifyAndOutputMismatchingLayoutTree const): Deleted.
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::BlockFormattingContext::computeStaticPosition const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginTop const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginTopForAncestors const):
        (WebCore::Layout::BlockFormattingContext::precomputeVerticalPositionForFormattingRootIfNeeded const):
        (WebCore::Layout::hasPrecomputedMarginTop):
        (WebCore::Layout::BlockFormattingContext::computeFloatingPosition const):
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats const):
        (WebCore::Layout::BlockFormattingContext::computeVerticalPositionForFloatClear const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowPositionedPosition const):
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        (WebCore::Layout::BlockFormattingContext::instrinsicWidthConstraints const):
        * layout/blockformatting/BlockFormattingContext.h:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::isStretchedToInitialContainingBlock):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowPositionedPosition):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::instrinsicWidthConstraints):
        (WebCore::Layout::BlockFormattingContext::Geometry::estimatedMarginTop):
        * layout/blockformatting/BlockFormattingState.cpp:
        (WebCore::Layout::BlockFormattingState::BlockFormattingState):
        * layout/blockformatting/BlockFormattingState.h:
        * layout/blockformatting/BlockInvalidation.cpp:
        (WebCore::Layout::computeUpdateType):
        (WebCore::Layout::computeUpdateTypeForAncestor):
        (WebCore::Layout::BlockInvalidation::invalidate):
        * layout/blockformatting/BlockInvalidation.h:
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::isMarginTopCollapsedWithParent):
        (WebCore::Layout::isMarginBottomCollapsedThrough):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::collapsedMarginTopFromFirstChild):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::nonCollapsedMarginTop):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::computedNonCollapsedMarginTop):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::computedNonCollapsedMarginBottom):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginTop):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginBottom):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginBottomCollapsedWithParent):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::collapsedMarginBottomFromLastChild):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::nonCollapsedMarginBottom):
        * layout/displaytree/DisplayBox.h:
        * layout/floats/FloatAvoider.cpp:
        (WebCore::Layout::FloatAvoider::FloatAvoider):
        * layout/floats/FloatAvoider.h:
        * layout/floats/FloatBox.cpp:
        (WebCore::Layout::FloatBox::FloatBox):
        * layout/floats/FloatBox.h:
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::positionForFloatAvoiding const):
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        * layout/floats/FloatingContext.h:
        (WebCore::Layout::FloatingContext::layoutState const):
        (WebCore::Layout::FloatingContext::layoutContext const): Deleted.
        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::FloatItem::FloatItem):
        (WebCore::Layout::FloatingState::FloatingState):
        (WebCore::Layout::FloatingState::constraints const):
        * layout/floats/FloatingState.h:
        (WebCore::Layout::FloatingState::create):
        (WebCore::Layout::FloatingState::layoutState const):
        (WebCore::Layout::FloatingState::layoutContext const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        (WebCore::Layout::InlineFormattingContext::initializeNewLine const):
        (WebCore::Layout::InlineFormattingContext::layoutInlineContent const):
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndHeightForInlineBox const):
        (WebCore::Layout::InlineFormattingContext::computeFloatPosition const):
        (WebCore::Layout::InlineFormattingContext::computeStaticPosition const):
        (WebCore::Layout::InlineFormattingContext::computeInFlowPositionedPosition const):
        (WebCore::Layout::InlineFormattingContext::instrinsicWidthConstraints const):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin):
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockHeightAndMargin):
        * layout/inlineformatting/InlineFormattingState.cpp:
        (WebCore::Layout::InlineFormattingState::InlineFormattingState):
        * layout/inlineformatting/InlineFormattingState.h:
        * layout/inlineformatting/InlineInvalidation.cpp:
        (WebCore::Layout::InlineInvalidation::invalidate):
        * layout/inlineformatting/InlineInvalidation.h:
        * layout/inlineformatting/InlineLineBreaker.cpp:
        (WebCore::Layout::InlineLineBreaker::InlineLineBreaker):
        (WebCore::Layout::InlineLineBreaker::runWidth const):
        * layout/inlineformatting/InlineLineBreaker.h:
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::outputInlineRuns):
        (WebCore::Layout::outputLayoutTree):
        (WebCore::Layout::showLayoutTree):
        * layout/layouttree/LayoutTreeBuilder.h:
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

2018-10-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Attachment dropped from one web view to another is missing its file wrapper
        https://bugs.webkit.org/show_bug.cgi?id=190530
        <rdar://problem/45232149>

        Reviewed by Tim Horton.

        Add support for copying and pasting attachment elements across web views by encoding and adding file wrapper
        data as subresources in the web archive when writing selected web content to the pasteboard, and then decoding
        and creating NSFileWrappers upon reading web content.

        Test: WKAttachmentTests.CopyAndPasteBetweenWebViews

        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::registerAttachments):
        * editing/Editor.h:

        Add registerAttachments(), which registers _WKAttachments in the UI process given a list of
        SerializedAttachmentData. This behaves similarly to registerAttachmentIdentifiers(), but differs in that (1) it
        sends serialized file wrapper data, and (2) it sends a list of serialized attachments, rather than information
        about just a single attachment.

        * editing/SerializedAttachmentData.h:

        Introduce SerializedAttachmentData, a struct containing information needed to serialize and deserialize an
        attachment. These are used both when writing attachment data to the pasteboard, and when consuming attachment
        data upon paste.

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::replaceRichContentWithAttachments):

        Add a step when pasting rich content with attachments, to collect and send serialized attachments to the client.
        Also, drive-by fix: don't WTFMove() the Ref here if it's still going to be used below.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::archiveResourceURL):
        * html/HTMLAttachmentElement.h:

        Add a static helper function to compute a URL that represents the data for the given attachment identifier, for
        use in a web archive resource.

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::addSubresourcesForAttachmentElementsIfNecessary):

        Add a helper function to create and append ArchiveResources representing attachment element data when writing
        attachments to the pasteboard via web archive data.

        (WebCore::LegacyWebArchive::create):
        * page/EditorClient.h:
        (WebCore::EditorClient::registerAttachments):
        (WebCore::EditorClient::serializedAttachmentDataForIdentifiers):

2018-10-30  David Kilzer  <ddkilzer@apple.com>

        XSLTProcessor should limit max transform depth
        <https://webkit.org/b/191075>
        <rdar://problem/45531453>

        Reviewed by Alex Christensen.

        Test: fast/xsl/xslt-max-depth.html

        * xml/SoftLinkLibxslt.cpp: Add macro for `xsltMaxDepth` global.
        * xml/SoftLinkLibxslt.h: Ditto.
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::XSLTProcessor::transformToString): Set `xsltMaxDepth`
        to 1000.  Default in libxslt.dylib is 3000.

2018-10-30  Jim Mason  <jmason@ibinx.com>

        [GTK] Scrollbars not following gtk-primary-button-warps-slider setting
        https://bugs.webkit.org/show_bug.cgi?id=191067

        Reviewed by Michael Catanzaro.

        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::ScrollbarThemeGtk::handleMousePressEvent):

2018-10-30  Alexey Proskuryakov  <ap@apple.com>

        Clean up some obsolete MAX_ALLOWED macros
        https://bugs.webkit.org/show_bug.cgi?id=190916

        Reviewed by Tim Horton.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::exernalDeviceDisplayNameForPlayer):
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::globalPointForEvent):
        (WebCore::pointForEvent):
        (WebCore::mouseButtonForEvent):
        (WebCore::PlatformMouseEventBuilder::PlatformMouseEventBuilder):

2018-10-30  Ali Juma  <ajuma@chromium.org>

        Calling window.open("", "_self") allows working around restrictions on window.close()
        https://bugs.webkit.org/show_bug.cgi?id=191073

        Reviewed by Chris Dumez.

        Do not treat a re-used frame in DOMWindow::createWindow as having been opened by DOM.

        Test: fast/dom/Window/window-open-self-disallow-close.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):

2018-10-30  Andy Estes  <aestes@apple.com>

        [Payment Request] Implement PaymentResponse.retry()
        https://bugs.webkit.org/show_bug.cgi?id=190985

        Reviewed by Daniel Bates.

        Implemented the retry() method on PaymentResponse as specified in the Payment Request API
        W3C Editor's Draft of 24 October 2018.

        See https://w3c.github.io/payment-request/#retry-method for details.

        Tests: http/tests/paymentrequest/payment-response-rejects-if-not-active.https.html
               http/tests/paymentrequest/payment-response-retry-method.https.html

        * Modules/applepay/PaymentCoordinator.h:
        (WebCore::PaymentCoordinator::client): Added. Returns m_client.
        * Modules/applepay/PaymentCoordinatorClient.h:
        (WebCore::PaymentCoordinatorClient::isMockPaymentCoordinator const): Added. Used to downcast
        a PaymentCoordinatorClient to a MockPaymentCoordinator.
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::computeTotalAndLineItems const): Made const.
        (WebCore::ApplePayPaymentHandler::computeErrors const): Broke this function into
        computeAddressErrors, computePayerErrors, and computePaymentMethodErrors, then modified this
        function to call those functions. Exceptions thrown by computePaymentMethodErrors are ignored.
        (WebCore::ApplePayPaymentHandler::computeAddressErrors const): Added.
        (WebCore::ApplePayPaymentHandler::computePayerErrors const): Added.
        (WebCore::ApplePayPaymentHandler::computePaymentMethodErrors const): Added.
        (WebCore::ApplePayPaymentHandler::complete): Added ASSERTs to verify whether result is a
        final result.
        (WebCore::ApplePayPaymentHandler::retry): Computed PaymentErrors from PaymentValidationErrors,
        ensured the PaymentAuthorizationResult was non-final by adding an unknown error if necessary,
        and called PaymentCoordinator::completePaymentSession.
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
        * Modules/paymentrequest/PaymentHandler.h:
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::show): Changed to call settleShowPromise.
        (WebCore::PaymentRequest::abortWithException): Changed to abort PaymentResponse's retry
        promise, if present, instead of PaymentResponse's show promise.
        (WebCore::PaymentRequest::settleShowPromise): Added. Settles m_showPromise then sets it to
        std::nullopt.
        (WebCore::PaymentRequest::closeActivePaymentHandler): Added. Hides the active payment
        handler then sets it to std::nullopt.
        (WebCore::PaymentRequest::stop): Stopped calling abortWithException, since that function
        might settle PaymentResponse's retry promise. PaymentResponse is now an ActiveDOMObject and
        will settle its own promise in its implementation of stop.
        (WebCore::PaymentRequest::abort): Changed to throw an InvalidStateError if there is a
        pending retry promise and to call abortWithException instead of stop.
        (WebCore::PaymentRequest::completeMerchantValidation): Changed to call abortWithException
        instead of stop.
        (WebCore::PaymentRequest::settleDetailsPromise): Ditto.
        (WebCore::PaymentRequest::accept): Updated the existing PaymentResponse, if present, rather
        than creating a new one. Settled the existing PaymentResponse's retry promise, if present,
        rather than the show promise.
        (WebCore::PaymentRequest::complete): Changed to throw an AbortError if there is no longer an
        active payment handler.
        (WebCore::PaymentRequest::retry): Changed to throw an AbortError if there is no longer an
        active payment handler, and to call PaymentHandler::retry if there is.
        (WebCore::PaymentRequest::cancel): Changed to call abortWithException instead of stop.
        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/paymentrequest/PaymentRequest.idl:
        * Modules/paymentrequest/PaymentResponse.cpp:
        (WebCore::PaymentResponse::PaymentResponse):
        (WebCore::PaymentResponse::finishConstruction): Pending activities create strong references
        to |this|, so they cannot be created in constructors without relaxing adoption requirements.
        Added this function so that the pending activity can be created after the PaymentResponse is
        created and adopted.
        (WebCore::PaymentResponse::~PaymentResponse):
        (WebCore::PaymentResponse::complete): Updated to throw an AbortError or InvalidStateError
        when necessary.
        (WebCore::PaymentResponse::retry): Implemented. Throws an AbortError or InvalidStateError
        when necessary, otherwise calls PaymentRequest::retry and stores the retry promise in
        m_retryPromise.
        (WebCore::PaymentResponse::abortWithException): Added. Rejects the retry promise with
        |exception|, clears the pending activity, and sets m_state to Completed.
        (WebCore::PaymentResponse::settleRetryPromise): Added. Settles the retry promise and sets it
        to std::nullopt.
        (WebCore::PaymentResponse::canSuspendForDocumentSuspension const): Added. Returns true if
        there is no pending activity.
        (WebCore::PaymentResponse::stop): Added. Rejects the retry promise with AbortError, clears
        the pending activity, and sets m_state to Stopped.
        * Modules/paymentrequest/PaymentResponse.h: Changed create to call finishConstruction and
        made PaymentResponse an ActiveDOMObject instead of a ContextDestructionObserver.
        * testing/Internals.cpp:
        (WebCore::Internals::Internals): Changed to only create a MockPaymentCoordinator for main frames.
        (WebCore::Internals::mockPaymentCoordinator): Changed to get the MockPaymentCoordinator by
        downcasting the page's payment coordinator client.
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::completePaymentSession): Changed to only increment
        hideCount for final results.
        * testing/MockPaymentCoordinator.h:
        (isType): Added so that PaymentCoordinatorClients can be downcasted to MockPaymentCoordinators.

2018-10-30  Zalan Bujtas  <zalan@apple.com>

        [iOS] Use the mainframe view size to compute window.outerWidth/height.
        https://bugs.webkit.org/show_bug.cgi?id=191070
        <rdar://problem/42368377>

        Reviewed by Tim Horton.

        Use a more reasonable value for window.outerWidth and height.
        (WKWebView's frame rect -> drawing area sizing -> WebPage's view size -> FrameView size)

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::outerHeight const):
        (WebCore::DOMWindow::outerWidth const):

2018-10-30  Andy Estes  <aestes@apple.com>

        [Apple Pay] PaymentRequest.canMakePayment() should resolve to true whenever Apple Pay is available
        https://bugs.webkit.org/show_bug.cgi?id=191039

        Reviewed by Megan Gardner.

        During a recent Web Payments WG F2F, we decided that canMakePayment() should return true
        whenever the user agent supports one or more of the specified payment methods, even if those
        payment methods do not have active instruments.

        Change WebKit's implementation of canMakePayment() for Apple Pay to resolve with the value
        of ApplePaySession.canMakePayments() rather than ApplePaySession.canMakePaymentsWithActiveCard().

        Added a test case to http/tests/paymentrequest/payment-request-canmakepayment-method.https.html.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::canMakePayment):
        (WebCore::shouldDiscloseApplePayCapability): Deleted.
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::canMakePayments):
        (WebCore::MockPaymentCoordinator::canMakePaymentsWithActiveCard):
        * testing/MockPaymentCoordinator.h:
        * testing/MockPaymentCoordinator.idl:

2018-10-30  Sihui Liu  <sihui_liu@apple.com>

        Add a deprecation warning to console for Web SQL
        https://bugs.webkit.org/show_bug.cgi?id=190936

        Reviewed by Ryosuke Niwa.

        No new tests. Just adding a console message.

        * Modules/webdatabase/DOMWindowWebDatabase.cpp:
        (WebCore::DOMWindowWebDatabase::openDatabase):

2018-10-30  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: iteration of cursors skip records if updated or deleted
        https://bugs.webkit.org/show_bug.cgi?id=190917
        <rdar://problem/35250410>

        Reviewed by Chris Dumez.

        When object store has changes, we cleared cached records and reset the SQLite statement, 
        updating the boundary to the next key in cursor's direction. Therefore, the cursor could 
        jump to the next key after update or deletion.
        We should cache those records before changing the statement.

        Test: storage/indexeddb/cursor-update-while-iterating.html

        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::objectStoreRecordsChanged):
        (WebCore::IDBServer::SQLiteIDBCursor::fetch):
        * Modules/indexeddb/server/SQLiteIDBCursor.h:

2018-10-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Introduce InlineFormattingContextGeometry class
        https://bugs.webkit.org/show_bug.cgi?id=191054

        Reviewed by Antti Koivisto.

        This is in preparation for inline-block support.

        Move float and inline-block elements layout to layoutFormattingContextRoot().
        computeWidthAndHeightForInlineBox takes care of replaced elements.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndHeightForInlineBox const):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndHeight const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp: Added.
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin):
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockHeightAndMargin):

2018-10-28  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement the update animations and send events procedure
        https://bugs.webkit.org/show_bug.cgi?id=191013
        <rdar://problem/45620495>

        Reviewed by Dean Jackson.

        While we implemented the various parts of what the Web Animations specification refers to as the "update animations and send events"
        procedure, we did not implement it as one function and in the correct order, specifically updating animations and sending events in
        two separate tasks. We now have a single method on DocumentTimeline which runs as the DisplayRefreshMonitor fires to update each
        "relevant" animation with the current time, perform a microtask checkpoint and dispatch events.

        Implementing this procedure allowed us to make several enhancements:

        1. We introduce the concept of a "relevant" animation, which is essentially an animation that is either pending or playing. All animations
        in a different state are no longer owned by the DocumentTimeline and can thus be destroyed if the developer doesn't hold references in JS.
        Maintaining such a list guarantees that we're only updating animations that would have changed state since the last time the "update animations
        and send events" procedure was run. Note that DeclarativeAnimation instances are also considered to be relevant if they have queued DOM events
        to dispatch as they could otherwise be destroyed before they can fully dispatch them.

        2. We no longer conflate the timing model and effects. Until now the way we would update animations was to go through all elements for which
        we had a registered animation, invalidate their style and finally forcing a style update on the document. We had a separate data structure where
        we help animations without targets so we update these as well in a separate pass, in order to make sure that promises and events would fire for
        them as expected. We now let the "update animations and send events" procedure update the timing of all relevant animations and let individual
        animation effects invalidate their style as needed, the document style invalidation happening naturally without DocumentTimeline forcing it. 

        3. We use a single step to schedule the update of animations, which is to register for a display refresh monitor update provided a "relevant"
        animation is known since the previous update. Until now we first had an "timing model invalidation" task scheduled upon any change of an animation's
        timing model, which would then create a timer to the earliest moment any listed animation would require an update, finally registering a display
        refresh monitor update, which used at least GenericTaskQueue<Timer> and potentially two, whereas we use none right now.

        4. We allow for a display refresh monitor update to be canceled should the number of "relevant" animations since the last update goes back to 0.

        To facilitate all of this, we have changed the m_animations ListHashSet to contain only the "relevant" animations, and no longer every animation created
        that has this DocumentTimeline set as their "timeline" property. To keep this list current, every single change that changes a given animation's timing
        ends up calling AnimationTimeline::animationTimingDidChange() passing the animation as the sole parameter and adding this animation to m_animations. We
        immediately schedule a display refresh monitor update if one wasn't already scheduled. Then, when running the "update animations and send events"
        procedure, we call a new WebAnimation::tick() method on each of those animations, which updates this animation's effect and relevance, using the newly
        computed relevance to identify whether this animation should be kept in the m_animations ListHashSet.

        This is only the first step towards a more efficient update and ownership model of animations by the document timeline since animations created as CSS
        Animations and CSS Transitions are committed through CSS have dedicated data structures that are not updated in this particular patch, but this will be
        addressed in a followup to keep this already significant patch smaller. Another issue that will be addressed later is the ability to not schedule display
        refresh monitor udpates when only accelerated animations are running.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::animationTimingDidChange): Called by animations when any aspect of their timing model changes. The provided animation is then
        added to the m_animations list unless its timeline is no longer this timeline.
        (WebCore::AnimationTimeline::removeAnimation): Remove the provided animation from m_animations and remove any animation registered on the element-specific
        animation lists if this animation has an effect with a target.
        (WebCore::AnimationTimeline::animationWasAddedToElement): We no longer need to worry about the m_animationsWithoutTarget data structure since we removed it.
        (WebCore::removeCSSTransitionFromMap): Fix a bug where we would remove any CSSTransition in the provided map that had a matching transition-property instead
        of checking the CSSTransition registered for this transition-property was indeed the provided CSSTransition. The other code changes in this patch made this
        code now cause regressions in the Web Platform Tests.
        (WebCore::AnimationTimeline::animationWasRemovedFromElement): Stop updating m_animationsWithoutTarget since it no longer exists.
        (WebCore::AnimationTimeline::elementWasRemoved):
        (WebCore::AnimationTimeline::updateCSSAnimationsForElement): Fix a small error that caused a regression in the Web Platform Tests where we could attempt to
        call setBackingAnimation() on a nullptr instead of a valid CSSAnimation.
        (WebCore::AnimationTimeline::cancelOrRemoveDeclarativeAnimation):
        (WebCore::AnimationTimeline::addAnimation): Deleted.
        * animation/AnimationTimeline.h:
        (WebCore::AnimationTimeline::hasElementAnimations const): Deleted.
        (WebCore::AnimationTimeline:: const): Deleted.
        (WebCore::AnimationTimeline::elementToAnimationsMap): Deleted.
        (WebCore::AnimationTimeline::elementToCSSAnimationsMap): Deleted.
        (WebCore::AnimationTimeline::elementToCSSTransitionsMap): Deleted.
        * animation/CSSTransition.cpp:
        (WebCore::CSSTransition::canBeListed const): Deleted.
        * animation/CSSTransition.h:
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::tick): Call the superclass's method and queue any necessary DOM events reflecting the timing model changes.
        (WebCore::DeclarativeAnimation::needsTick const): Call the superclass's method and return true also if we have pending events since otherwise this animation
        could be removed from m_animations on its AnimationTimeline and potentially destroyed before the GenericEventQueue had a chance to dispatch all events.
        (WebCore::DeclarativeAnimation::startTime const): We removed the custom binding for this IDL property and renamed the method from bindingsStartTime to startTime.
        (WebCore::DeclarativeAnimation::setStartTime): We removed the custom binding for this IDL property and renamed the method from setBindingsStartTime to setStartTime.
        (WebCore::DeclarativeAnimation::bindingsStartTime const): Deleted.
        (WebCore::DeclarativeAnimation::setBindingsStartTime): Deleted.
        * animation/DeclarativeAnimation.h:
        * animation/DocumentAnimationScheduler.cpp:
        (WebCore::DocumentAnimationScheduler::unscheduleWebAnimationsResolution): Add a method to mark that we no longer need a display refresh monitor update for this
        document's animation timeline. This is called when m_animations becomes empty.
        * animation/DocumentAnimationScheduler.h:
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::DocumentTimeline):
        (WebCore::DocumentTimeline::detachFromDocument): Stop clearing two task queues and a timer that no longer exist and instead only clear the task queue to clear
        the cached current time, which we queue any time we generate a new one (see DocumentTimeline::currentTime).
        (WebCore::DocumentTimeline::getAnimations const): Use isRelevant() instead of canBeListed().
        (WebCore::DocumentTimeline::updateThrottlingState):
        (WebCore::DocumentTimeline::suspendAnimations):
        (WebCore::DocumentTimeline::resumeAnimations):
        (WebCore::DocumentTimeline::numberOfActiveAnimationsForTesting const):
        (WebCore::DocumentTimeline::currentTime): Queue a task in the new m_currentTimeClearingTaskQueue task queue to clear the current time that we've generated and cached
        in the next run loop (provided all pending JS execution has also completed). 
        (WebCore::DocumentTimeline::maybeClearCachedCurrentTime):
        (WebCore::DocumentTimeline::scheduleAnimationResolutionIfNeeded): Schedule a display refresh monitor update if we are not suspended and have "relevant" animations.
        (WebCore::DocumentTimeline::animationTimingDidChange): Call scheduleAnimationResolutionIfNeeded() after calling the superclass's implementation.
        (WebCore::DocumentTimeline::removeAnimation): Call unscheduleAnimationResolution() if the list of "relevant" animations is now empty.
        (WebCore::DocumentTimeline::unscheduleAnimationResolution): Unschedule a pending display refresh monitor update.
        (WebCore::DocumentTimeline::animationResolutionTimerFired):
        (WebCore::DocumentTimeline::updateAnimationsAndSendEvents): Implement the "update animations and send events" procedure as specified by the Web Animations spec.
        During this procedure, we call tick() on all animations listed in m_animations and create a list of animations to remove from that list if this animation is no
        longer relevant following the call to tick().
        (WebCore::DocumentTimeline::enqueueAnimationPlaybackEvent):
        (WebCore::DocumentTimeline::timingModelDidChange): Deleted.
        (WebCore::DocumentTimeline::scheduleInvalidationTaskIfNeeded): Deleted.
        (WebCore::DocumentTimeline::performInvalidationTask): Deleted.
        (WebCore::DocumentTimeline::updateAnimationSchedule): Deleted.
        (WebCore::DocumentTimeline::animationScheduleTimerFired): Deleted.
        (WebCore::DocumentTimeline::updateAnimations): Deleted.
        (WebCore::compareAnimationPlaybackEvents): Deleted.
        (WebCore::DocumentTimeline::performEventDispatchTask): Deleted.
        * animation/DocumentTimeline.h:
        * animation/WebAnimation.cpp: The majority of the changes to this class is that we call the new timingDidChange() method when any code that modifies the timing model
        is run. We also remove methods to set the pending play and pause tasks as well as the animation's start time and hold time since any time we're changing these instance
        variables, we later already have a call to update the timing model and we were doing more work than needed. As a result we no longer need an internal method to set the
        start time and can stop requiring a custom IDL binding for the "startTime" property.
        (WebCore::WebAnimation::effectTimingPropertiesDidChange):
        (WebCore::WebAnimation::setEffect):
        (WebCore::WebAnimation::setEffectInternal):
        (WebCore::WebAnimation::setTimeline):
        (WebCore::WebAnimation::setTimelineInternal):
        (WebCore::WebAnimation::startTime const):
        (WebCore::WebAnimation::setStartTime):
        (WebCore::WebAnimation::silentlySetCurrentTime):
        (WebCore::WebAnimation::setCurrentTime):
        (WebCore::WebAnimation::setPlaybackRate):
        (WebCore::WebAnimation::cancel):
        (WebCore::WebAnimation::resetPendingTasks):
        (WebCore::WebAnimation::finish):
        (WebCore::WebAnimation::timingDidChange): New method called any time a timing property changed where we run the "update the finished state" procedure and notify the
        animation's timeline that its timing changed so that it can be considered the next time the "update animations and send events" procedure runs.
        (WebCore::WebAnimation::invalidateEffect):
        (WebCore::WebAnimation::updateFinishedState): Update the animation's relevance after running the procedure as specified.
        (WebCore::WebAnimation::play):
        (WebCore::WebAnimation::runPendingPlayTask):
        (WebCore::WebAnimation::pause):
        (WebCore::WebAnimation::runPendingPauseTask):
        (WebCore::WebAnimation::needsTick const):
        (WebCore::WebAnimation::tick): New method called during the "update animations and send events" procedure where we run the "update the finished state" procedure and run
        the pending play and pause tasks.
        (WebCore::WebAnimation::resolve):
        (WebCore::WebAnimation::updateRelevance):
        (WebCore::WebAnimation::computeRelevance):
        (WebCore::WebAnimation::timingModelDidChange): Deleted.
        (WebCore::WebAnimation::setHoldTime): Deleted.
        (WebCore::WebAnimation::bindingsStartTime const): Deleted.
        (WebCore::WebAnimation::setBindingsStartTime): Deleted.
        (WebCore::WebAnimation::setTimeToRunPendingPlayTask): Deleted.
        (WebCore::WebAnimation::setTimeToRunPendingPauseTask): Deleted.
        (WebCore::WebAnimation::updatePendingTasks): Deleted.
        (WebCore::WebAnimation::timeToNextRequiredTick const): Deleted.
        (WebCore::WebAnimation::runPendingTasks): Deleted.
        (WebCore::WebAnimation::canBeListed const): Deleted.
        * animation/WebAnimation.h:
        (WebCore::WebAnimation::isRelevant const):
        (WebCore::WebAnimation::hasPendingPlayTask const):
        (WebCore::WebAnimation::isEffectInvalidationSuspended):
        * animation/WebAnimation.idl:
        * dom/Element.cpp:
        (WebCore::Element::getAnimations): Use isRelevant() instead of canBeListed().

2018-10-30  Youenn Fablet  <youenn@apple.com>

        LibWebRTCRtpReceiverBackend::getSynchronizationSources should use Vector::append
        https://bugs.webkit.org/show_bug.cgi?id=191026

        Reviewed by Eric Carlson.

        Covered by updated test.

        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.cpp:
        (WebCore::LibWebRTCRtpReceiverBackend::getSynchronizationSources const):

2018-10-30  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK][WPE] Fixes to the PublicSuffix implementation
        https://bugs.webkit.org/show_bug.cgi?id=191031

        Reviewed by Michael Catanzaro.

        Covered by existing tests.

        Downcase hostnames before passing it on to the underlying
        libsoup API. Special case localhost and fix a mixed-up
        libsoup GError checks. This fixes most of the failures.

        * platform/soup/PublicSuffixSoup.cpp:
        (WebCore::isPublicSuffix):
        (WebCore::topPrivatelyControlledDomain):

2018-10-29  Zalan Bujtas  <zalan@apple.com>

        Missing from r237549

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::precomputeVerticalPositionForFormattingRootIfNeeded const):
        (WebCore::Layout::hasPrecomputedMarginTop):

2018-10-29  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed speculative build fix for AppleWin after r237559.

        * PlatformAppleWin.cmake:

2018-10-29  Justin Michaud  <justin_michaud@apple.com>

        Revert r237347 registered custom properties... https://bugs.webkit.org/show_bug.cgi?id=190039
        https://bugs.webkit.org/show_bug.cgi?id=190919

        Reviewed by Michael Saboff.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::customPropertyValue):
        * css/CSSCustomPropertyValue.cpp:
        (WebCore::CSSCustomPropertyValue::customCSSText const):
        (WebCore::CSSCustomPropertyValue::tokens const):
        (WebCore::CSSCustomPropertyValue::checkVariablesForCycles const):
        (WebCore::CSSCustomPropertyValue::resolveVariableReferences const):
        (WebCore::CSSCustomPropertyValue::setResolvedTypedValue):
        (WebCore::CSSCustomPropertyValue::equals const): Deleted.
        * css/CSSCustomPropertyValue.h:
        * css/CSSRegisteredCustomProperty.cpp:
        (WebCore::CSSRegisteredCustomProperty::CSSRegisteredCustomProperty):
        * css/CSSRegisteredCustomProperty.h:
        * css/CSSVariableData.cpp:
        (WebCore::CSSVariableData::consumeAndUpdateTokens):
        (WebCore::CSSVariableData::CSSVariableData):
        (WebCore::CSSVariableData::checkVariablesForCycles const):
        (WebCore::CSSVariableData::checkVariablesForCyclesWithRange const):
        (WebCore::CSSVariableData::resolveVariableFallback const):
        (WebCore::CSSVariableData::resolveVariableReference const):
        (WebCore::CSSVariableData::resolveVariableReferences const):
        (WebCore::CSSVariableData::resolveTokenRange const):
        * css/CSSVariableData.h:
        (WebCore::CSSVariableData::create):
        (WebCore::CSSVariableData::createResolved):
        (WebCore::CSSVariableData::needsVariableResolution const):
        (WebCore::CSSVariableData::CSSVariableData):
        * css/CSSVariableReferenceValue.cpp:
        (WebCore::CSSVariableReferenceValue::checkVariablesForCycles const):
        (WebCore::resolveVariableFallback): Deleted.
        (WebCore::resolveVariableReference): Deleted.
        (WebCore::resolveTokenRange): Deleted.
        (WebCore::CSSVariableReferenceValue::resolveVariableReferences const): Deleted.
        * css/CSSVariableReferenceValue.h:
        (WebCore::CSSVariableReferenceValue::create):
        (WebCore::CSSVariableReferenceValue::variableDataValue const):
        (WebCore::CSSVariableReferenceValue::equals const):
        * css/DOMCSSRegisterCustomProperty.cpp:
        (WebCore::DOMCSSRegisterCustomProperty::registerProperty):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::setProperty):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialCustomProperty):
        (WebCore::StyleBuilderCustom::applyValueCustomProperty):
        * css/StyleProperties.cpp:
        (WebCore::MutableStyleProperties::setCustomProperty):
        * css/StyleProperties.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::setStyle):
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::applyMatchedProperties):
        (WebCore::StyleResolver::applyPropertyToCurrentStyle):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::resolvedVariableValue const):
        (WebCore::StyleResolver::CascadedProperties::applyDeferredProperties):
        (WebCore::StyleResolver::CascadedProperties::Property::apply):
        (WebCore::StyleResolver::applyCascadedProperties):
        (WebCore::StyleResolver::applyCascadedCustomProperty): Deleted.
        * css/StyleResolver.h:
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseValueWithVariableReferences):
        * css/parser/CSSParser.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::CSSPropertyParser):
        (WebCore::CSSPropertyParser::parseValueStart):
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::CSSPropertyParser::canParseTypedCustomPropertyValue): Deleted.
        (WebCore::CSSPropertyParser::parseTypedCustomPropertyValue): Deleted.
        (WebCore::CSSPropertyParser::collectParsedCustomPropertyValueDependencies): Deleted.
        * css/parser/CSSPropertyParser.h:
        * css/parser/CSSVariableParser.cpp:
        (WebCore::CSSVariableParser::parseDeclarationValue):
        * dom/ConstantPropertyMap.cpp:
        (WebCore::ConstantPropertyMap::setValueForProperty):
        (WebCore::variableDataForPositivePixelLength):
        (WebCore::variableDataForPositiveDuration):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::checkVariablesInCustomProperties):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setInheritedCustomPropertyValue):
        (WebCore::RenderStyle::setNonInheritedCustomPropertyValue):
        * rendering/style/StyleCustomPropertyData.h:
        (WebCore::StyleCustomPropertyData::operator== const):
        (WebCore::StyleCustomPropertyData::setCustomPropertyValue):
        (WebCore::StyleCustomPropertyData::StyleCustomPropertyData):

2018-10-29  Youenn Fablet  <youenn@apple.com>

        Handle MDNS resolution of candidates through libwebrtc directly
        https://bugs.webkit.org/show_bug.cgi?id=190681

        Reviewed by Eric Carlson.

        Remove the previous MDNS resolution mechanism.
        Instead, add support for the AsyncResolver mechanism added to libwebrtc.
        Covered by current mdns webrtc test that is unflaked.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::addIceCandidate):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::createPeerConnection):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::MockLibWebRTCPeerConnectionFactory::CreatePeerConnection):
        * testing/MockLibWebRTCPeerConnection.h:

2018-10-29  Devin Rousso  <drousso@apple.com>

        Web Inspector: increase size limits for NetworkResourceData
        https://bugs.webkit.org/show_bug.cgi?id=191034
        <rdar://problem/45529852>

        Reviewed by Joseph Pecoraro.

        No tests since no new functionality.

        * inspector/NetworkResourcesData.cpp:
        All resources: 100MB => 200MB
        Each resource:  10MB =>  50MB

2018-10-29  Tim Horton  <timothy_horton@apple.com>

        Modernize WebKit nibs and lprojs for localization's sake
        https://bugs.webkit.org/show_bug.cgi?id=190911
        <rdar://problem/45349466>

        Reviewed by Dan Bernstein.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * PlatformWin.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * en.lproj/Localizable.strings: Renamed from Source/WebCore/English.lproj/Localizable.strings.
        * en.lproj/Localizable.stringsdict: Renamed from Source/WebCore/English.lproj/Localizable.stringsdict.
        * en.lproj/mediaControlsLocalizedStrings.js: Renamed from Source/WebCore/English.lproj/mediaControlsLocalizedStrings.js.
        * en.lproj/modern-media-controls-localized-strings.js: Renamed from Source/WebCore/English.lproj/modern-media-controls-localized-strings.js.
        English->en

2018-10-29  Tim Horton  <timothy_horton@apple.com>

        Make FindOptionsShowOverlay work on iOS
        https://bugs.webkit.org/show_bug.cgi?id=190551

        Reviewed by Andy Estes.

        * platform/graphics/GraphicsContext.h:
        Export some more GraphicsContext methods.

2018-10-29  Youenn Fablet  <youenn@apple.com>

        Invalid ssrc value in the stats of type 'inbound-rtp'
        https://bugs.webkit.org/show_bug.cgi?id=190826
        <rdar://problem/45487435>

        Reviewed by Eric Carlson.

        Value was not initialized in WebCore if missing from libwebrtc.
        Change value to an optional so that it will not appear if libwebrtc does not expose it.
        Move integer/boolean values from being initialized to be optional so
        that we do not expose them to JS if not exposed by libwebrtc.

        Covered by updated tests.

        * Modules/mediastream/RTCStatsReport.h:

2018-10-29  Jer Noble  <jer.noble@apple.com>

        CRASH in CoreGraphics: ERROR_CGDataProvider_BufferIsNotBigEnough
        https://bugs.webkit.org/show_bug.cgi?id=190954

        Reviewed by Simon Fraser.

        Crash analyitics show that WebProcess will crash in ERROR_CGDataProvider_BufferIsNotBigEnough,
        which attempts to fetch the last byte in the image buffer in order to verify that the entire
        buffer is readable. Unfortunately, the stack trace generated by this crash does not identify
        what CGDataProvider is responsible for the not-big-enough buffer. In order to identify which
        CGDataProvider created by WebKit is responsible (if any), we will add our own version of
        ERROR_CGDataProvider_BufferIsNotBigEnough, called at CGDataProvider creation time, which should
        generate a crash within the responsible stack frame.

        (This assumes that the issue is the wrong sized buffer at CGDataProvider creation time, and not
        that the buffer itself is reclaimed between creation time and access.)

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::paintToCanvas):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::toCFData const):
        (WebCore::cfData):
        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer copyImageSnapshotWithColorSpace:]):
        * platform/graphics/cv/PixelBufferConformerCV.cpp:
        (WebCore::CVPixelBufferGetBytePointerCallback):
        (WebCore::PixelBufferConformerCV::createImageFromPixelBuffer):
        * platform/graphics/cg/ImageUtilitiesCG.h: Added.
        (WebCore::verifyImageBufferIsBigEnough):

2018-10-29  David Kilzer  <ddkilzer@apple.com>

        Fix clang static analyzer warning in StyleBuilderConverter.h
        <https://webkit.org/b/190907>

        Reviewed by Antti Koivisto.

        Fix the following clang static warning in StyleBuilderConverter.h:
            Value stored to 'autoFlow' during its initialization is never read

        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertGridAutoFlow): Move
        assignment of RenderStyle::initialGridAutoFlow() to `default`
        case.  Make `CSSValueDense` consistent with other cases by
        assigning value to `autoFlow` instead of returning early.

2018-10-29  Youenn Fablet  <youenn@apple.com>

        Guard H264 simulcast with a runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=191025

        Reviewed by Eric Carlson.

        Add a runtime flag for H264 simulcast and enable libwebrtc field trial based on it.
        Covered by existing test.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::LibWebRTCMediaEndpoint):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webRTCH264SimulcastEnabled const):
        (WebCore::RuntimeEnabledFeatures::setWebRTCH264SimulcastEnabled):

2018-10-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Compute estimated margin top for inline formatting root's ancestors
        https://bugs.webkit.org/show_bug.cgi?id=191018

        Reviewed by Antti Koivisto.

        <div><img style="float: left"></div>
        This inline formatting context (root -> div) inherits the floating context from the parent block formatting context.
        Floats are added to the floating context relative to the floating context's root. In order to position this float properly we
        need to precompute the ancestor's margin top (stop at the block formatting root boundary).

        Test: fast/inline/simple-intruding-floats3.html

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::precomputeVerticalPositionForFormattingRootIfNeeded const):

2018-10-29  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add support for inflow non replaced content height when the box is an inline formatting root.
        https://bugs.webkit.org/show_bug.cgi?id=191011

        Reviewed by Antti Koivisto.

        // 10.6.3 Block-level non-replaced elements in normal flow when 'overflow' computes to 'visible'
        // Height is the bottom edge of the last line box, if the box establishes a inline formatting context with one or more lines

        This is temporary until after inline runs transition to the display tree.

        Test: fast/inline/simple-intruding-floats2.html

        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        * layout/inlineformatting/InlineRun.h:
        (WebCore::Layout::InlineRun::logicalLeft const):
        (WebCore::Layout::InlineRun::logicalRight const):
        (WebCore::Layout::InlineRun::logicalTop const):
        (WebCore::Layout::InlineRun::logicalBottom const):
        (WebCore::Layout::InlineRun::width const):
        (WebCore::Layout::InlineRun::height const):
        (WebCore::Layout::InlineRun::setWidth):
        (WebCore::Layout::InlineRun::setLogicalLeft):
        (WebCore::Layout::InlineRun::setLogicalRight):
        (WebCore::Layout::InlineRun::moveHorizontally):
        (WebCore::Layout::InlineRun::InlineRun):
        * layout/inlineformatting/Line.cpp:
        (WebCore::Layout::InlineFormattingContext::Line::appendContent):

2018-10-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for simple intruding floats.
        https://bugs.webkit.org/show_bug.cgi?id=190998

        Reviewed by Antti Koivisto.

        In order to be able to figure out whether a float is intruding on a line, we need to provide the line's final vertical position.
        This vertical position must be in the same coordinate system as the float's position is. In case of intruding float,
        it is the parent block formatting root's coordinate system (that's where the float lives.)

        Test: fast/inline/simple-intruding-float1.html

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginTopForAncestors const):
        (WebCore::Layout::BlockFormattingContext::precomputeVerticalPositionForFormattingRootIfNeeded const):
        (WebCore::Layout::BlockFormattingContext::computeFloatingPosition const):
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats const):
        (WebCore::Layout::BlockFormattingContext::computeVerticalPositionForFloatClear const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::constraints const):

2018-10-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Inline layout produces separate runs when float is present.
        https://bugs.webkit.org/show_bug.cgi?id=190980

        Reviewed by Antti Koivisto.

        <div>foo<img src="foobar.jpg" style="float: left">bar</div> produces 2 inline boxes (foo) and (bar) -> current inline code
        while it is really just one continuous run (foobar) -> LFC
        Adjust verification code to check for such runs.

        * layout/Verification.cpp:
        (WebCore::Layout::checkForMatchingNonTextRuns):
        (WebCore::Layout::checkForMatchingTextRuns):
        (WebCore::Layout::outputMismatchingComplexLineInformationIfNeeded):
        * layout/inlineformatting/InlineRun.h:
        (WebCore::Layout::InlineRun::textContext const):

2018-10-29  Youenn Fablet  <youenn@apple.com>

        [WebRTC] Enable VP8 by default
        https://bugs.webkit.org/show_bug.cgi?id=190672
        <rdar://problem/43663785>

        Reviewed by Eric Carlson.

        No change of behavior.

        * page/RuntimeEnabledFeatures.h: Set default value to true.

2018-10-28  Andy Estes  <aestes@apple.com>

        [Payment Request] Implement MerchantValidationEvent.methodName
        https://bugs.webkit.org/show_bug.cgi?id=190058

        Reviewed by Darin Adler.

        Implemented MerchantValidationEvent's methodName attribute and MerchantValidationEventInit's
        methodName property as specified in the Payment Request API W3C Editor's Draft of
        27 September 2018.

        Covered by web-platform-tests/payment-request/MerchantValidationEvent/constructor.https.html.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::validateMerchant): Passed the payment method identifier
        (as a string) to MerchantValidationEvent::create()
        * Modules/paymentrequest/MerchantValidationEvent.cpp:
        (WebCore::MerchantValidationEvent::create): Validated the methodName before constructing the
        event, throwing a RangeError on failure.
        (WebCore::MerchantValidationEvent::MerchantValidationEvent):
        * Modules/paymentrequest/MerchantValidationEvent.h:
        * Modules/paymentrequest/MerchantValidationEvent.idl:

2018-10-27  Antoine Quint  <graouts@apple.com>

        [Web Animations] Remove WebAnimation::description()
        https://bugs.webkit.org/show_bug.cgi?id=190995

        Reviewed by Dean Jackson.

        This method is never used.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::description): Deleted.
        * animation/WebAnimation.h:

2018-10-27  Antoine Quint  <graouts@apple.com>

        [Web Animations] Move the logic of Document::getAnimations() to DocumentTimeline
        https://bugs.webkit.org/show_bug.cgi?id=190994

        Reviewed by Dean Jackson.

        It would be cleaner to have the logic of document.getAnimations() on the DocumentTimeline instead of the Document, keep more
        animation-related code compartmentalized in the animation directory. No change in behavior, so no test update.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::getAnimations const):
        * animation/DocumentTimeline.h:
        * dom/Document.cpp:
        (WebCore::Document::getAnimations):

2018-10-27  Antoine Quint  <graouts@apple.com>

        [Web Animations] Move bindings methods requiring style flush from CSSAnimation to DeclarativeAnimation
        https://bugs.webkit.org/show_bug.cgi?id=190996

        Reviewed by Dean Jackson.

        Moving all of the IDL bindings methods that require flushing style from CSSAnimation to its superclass
        DeclarativeAnimation so we follow the same route in CSSTransition. Note that there was code in
        CSSAnimation::bindingsCurrentTime() that was not moved as it proved to not be necessary.

        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::bindingsPlay):
        (WebCore::CSSAnimation::bindingsPause):
        (WebCore::CSSAnimation::bindingsStartTime const): Deleted.
        (WebCore::CSSAnimation::setBindingsStartTime): Deleted.
        (WebCore::CSSAnimation::bindingsCurrentTime const): Deleted.
        (WebCore::CSSAnimation::setBindingsCurrentTime): Deleted.
        (WebCore::CSSAnimation::bindingsPlayState const): Deleted.
        (WebCore::CSSAnimation::bindingsPending const): Deleted.
        (WebCore::CSSAnimation::bindingsReady): Deleted.
        (WebCore::CSSAnimation::bindingsFinished): Deleted.
        (WebCore::CSSAnimation::flushPendingStyleChanges const): Deleted.
        * animation/CSSAnimation.h:
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::bindingsStartTime const):
        (WebCore::DeclarativeAnimation::setBindingsStartTime):
        (WebCore::DeclarativeAnimation::bindingsCurrentTime const):
        (WebCore::DeclarativeAnimation::setBindingsCurrentTime):
        (WebCore::DeclarativeAnimation::bindingsPlayState const):
        (WebCore::DeclarativeAnimation::bindingsPending const):
        (WebCore::DeclarativeAnimation::bindingsReady):
        (WebCore::DeclarativeAnimation::bindingsFinished):
        (WebCore::DeclarativeAnimation::bindingsPlay):
        (WebCore::DeclarativeAnimation::bindingsPause):
        (WebCore::DeclarativeAnimation::flushPendingStyleChanges const):
        * animation/DeclarativeAnimation.h:

2018-10-27  Charlie Turner  <cturner@igalia.com>

        [EME] Add a logging macro
        https://bugs.webkit.org/show_bug.cgi?id=190984

        Reviewed by Xabier Rodriguez-Calvar.

        No tests since no new functionality.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::MediaKeySession):
        (WebCore::MediaKeySession::generateRequest):
        (WebCore::MediaKeySession::update):
        (WebCore::MediaKeySession::close):
        (WebCore::MediaKeySession::remove):
        (WebCore::MediaKeySession::sessionClosed):
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::createSession):
        * Modules/encryptedmedia/NavigatorEME.cpp:
        (WebCore::NavigatorEME::requestMediaKeySystemAccess):
        * platform/Logging.h:

2018-10-27  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][EME] Post key received to bus should be done before waking up other threads
        https://bugs.webkit.org/show_bug.cgi?id=190822

        Reviewed by Philippe Normand.

        Notify after posting message to bus.

        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (webkitMediaCommonEncryptionDecryptSinkEventHandler):

2018-10-27  Charlie Turner  <cturner@igalia.com>

        Fix release build with -DLOG_DISABLED=0
        https://bugs.webkit.org/show_bug.cgi?id=190866

        Reviewed by Xabier Rodriguez-Calvar.

        No new tests since no functionality changed.

        * platform/graphics/Font.cpp:
        * platform/graphics/Font.h:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        * platform/graphics/win/FontPlatformDataWin.cpp:

2018-10-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237458.
        https://bugs.webkit.org/show_bug.cgi?id=190973

        broke internal iOS builds (Requested by zalan on #webkit).

        Reverted changeset:

        "Adopt -setOverrideRouteSharingPolicy:routingContextUID: SPI"
        https://bugs.webkit.org/show_bug.cgi?id=190951
        https://trac.webkit.org/changeset/237458

2018-10-26  Antoine Quint  <graouts@apple.com>

        [Web Animations] Remove useless internals methods
        https://bugs.webkit.org/show_bug.cgi?id=190968

        Reviewed by Dean Jackson.

        We had a few internals methods added early on in the Web Animations implementation that are no longer
        relevant now that the full API is implemented. We can safely remove them now.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::setCurrentTime): Deleted.
        (WebCore::AnimationTimeline::description): Deleted.
        * animation/AnimationTimeline.h:
        (WebCore::AnimationTimeline::currentTime):
        (WebCore::AnimationTimeline::pause): Deleted.
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::currentTime):
        (WebCore::DocumentTimeline::pause): Deleted.
        * animation/DocumentTimeline.h:
        * testing/Internals.cpp:
        (WebCore::Internals::timelineDescription): Deleted.
        (WebCore::Internals::pauseTimeline): Deleted.
        (WebCore::Internals::setTimelineCurrentTime): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2018-10-26  Antoine Quint  <graouts@apple.com>

        Web Inspector: Crash in http/tests/inspector/network/resource-response-source-memory-cache-revalidate-expired-only.html
        https://bugs.webkit.org/show_bug.cgi?id=190955

        Reviewed by Dean Jackson.

        We can get in situations when running tests where runtime flags are not consistent throughout the time a test is run since
        showing the Web Inspector can cause flags to be re-set after the initial test was loaded. As such, to avoid crashes due to
        the ASSERT(!frame().animation().hasAnimations()) in FrameView::didDestroyRenderTree(), we now cancel animations upon teardown
        no matter what the value of the runtime flag for the Web Animations CSS Integration on both the DocumentTimeline (if it exists)
        and the CSSAnimationController.

        * dom/Element.cpp:
        (WebCore::Element::removedFromAncestor):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::clearHostElement):
        * page/FrameView.cpp:
        (WebCore::FrameView::didDestroyRenderTree):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderers):

2018-10-26  Timothy Hatcher  <timothy@apple.com>

        Use dark appearance scrollbar when page background is dark or document supports dark mode.
        https://bugs.webkit.org/show_bug.cgi?id=190937
        rdar://problem/41225839

        Reviewed by Beth Dakin.

        * page/FrameView.cpp:
        (WebCore::FrameView::useDarkAppearance const): Added. Ask the document.
        (WebCore::FrameView::paintScrollCorner): Set LocalDefaultSystemAppearance based
        on the scrollbar overlay style too.
        * page/FrameView.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::useDarkAppearance const): Added. Default to false.
        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollerImpDelegate effectiveAppearanceForScrollerImp:]): Added.
        Ask the ScrollableArea if a dark appearance is desired.

2018-10-26  Antti Koivisto  <antti@apple.com>

        Use random() instead of begin() to limit cache sizes
        https://bugs.webkit.org/show_bug.cgi?id=190957

        Reviewed by Chris Dumez.

        We currently use cache.remove(cache.begin()) pattern to limit sized of various caches.
        This is a bad pattern for tables that never rehash (because they have fixed maximum size) as most of the
        keys get permanently stuck in the table.

        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createColorValue):
        (WebCore::CSSValuePool::createFontFamilyValue):
        (WebCore::CSSValuePool::createFontFaceValue):
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::createSheet):
        * dom/SelectorQuery.cpp:
        * platform/graphics/FontCascade.cpp:
        (WebCore::retrieveOrAddCachedFonts):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::shouldAutoActivateFontIfNeeded):
        * platform/mac/PublicSuffixMac.mm:
        (WebCore::topPrivatelyControlledDomain):

2018-10-26  Jer Noble  <jer.noble@apple.com>

        Adopt -setOverrideRouteSharingPolicy:routingContextUID: SPI
        https://bugs.webkit.org/show_bug.cgi?id=190951
        <rdar://problem/45213065>

        Reviewed by Alex Christensen.

        Request the correct route policy and context from the VideoFullscreenModel.

        * platform/cocoa/VideoFullscreenModel.h:
        (WebCore::VideoFullscreenModel::requestRouteSharingPolicyAndContextUID):
        * platform/cocoa/VideoFullscreenModelVideoElement.h:
        * platform/cocoa/VideoFullscreenModelVideoElement.mm:
        (WebCore::VideoFullscreenModelVideoElement::requestRouteSharingPolicyAndContextUID):
        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerViewController setWebKitOverrideRouteSharingPolicy:routingContextUID:]):
        (VideoFullscreenInterfaceAVKit::setVideoFullscreenModel):
        (VideoFullscreenInterfaceAVKit::doSetup):

2018-10-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add more inline information to outputLayoutTree
        https://bugs.webkit.org/show_bug.cgi?id=190945

        Reviewed by Antti Koivisto.

        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::outputInlineRuns):
        (WebCore::Layout::outputLayoutBox):

2018-10-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Layout floats as part of the inline content
        https://bugs.webkit.org/show_bug.cgi?id=190942

        Reviewed by Antti Koivisto.

        Add float handling to InlineFormattingContext::layoutInlineContent.
        Note that floats don't actually generate inline runs.

        Test: fast/block/basic/inline-content-with-floating-image.html

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        * layout/floats/FloatAvoider.cpp:
        (WebCore::Layout::FloatAvoider::FloatAvoider): Check if any mapping is needed.
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::isTrimmableContent):
        (WebCore::Layout::InlineFormattingContext::layoutInlineContent const):
        (WebCore::Layout::trimLeadingRun): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::Line::isClosed const):
        * layout/inlineformatting/Line.cpp:
        (WebCore::Layout::InlineFormattingContext::Line::init):
        (WebCore::Layout::InlineFormattingContext::Line::adjustLogicalLeft):
        (WebCore::Layout::InlineFormattingContext::Line::adjustLogicalRight):
        (WebCore::Layout::InlineFormattingContext::Line::appendContent):
        (WebCore::Layout::InlineFormattingContext::Line::close):

2018-10-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Adjust current line with float constraints.
        https://bugs.webkit.org/show_bug.cgi?id=190940

        Reviewed by Antti Koivisto.

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::initializeNewLine const):
        (WebCore::Layout::InlineFormattingContext::layoutInlineContent const):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineRun.h:
        (WebCore::Layout::InlineRun::moveHorizontally):
        * layout/inlineformatting/Line.cpp:
        (WebCore::Layout::InlineFormattingContext::Line::adjustLogicalLeft):
        (WebCore::Layout::InlineFormattingContext::Line::adjustLogicalRight):

2018-10-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Compute float box size and position
        https://bugs.webkit.org/show_bug.cgi?id=190938

        Reviewed by Antti Koivisto.

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeWidthAndHeight const):
        (WebCore::Layout::InlineFormattingContext::computeFloatPosition const):
        * layout/inlineformatting/InlineFormattingContext.h:

2018-10-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add line logical top and bottom
        https://bugs.webkit.org/show_bug.cgi?id=190934

        Reviewed by Antti Koivisto.

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::initializeNewLine const):
        (WebCore::Layout::InlineFormattingContext::layoutInlineContent const):
        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::Line::isFirstLine const):
        (WebCore::Layout::InlineFormattingContext::Line::logicalTop const):
        (WebCore::Layout::InlineFormattingContext::Line::logicalBottom const):
        * layout/inlineformatting/Line.cpp:
        (WebCore::Layout::InlineFormattingContext::Line::init):
        (WebCore::Layout::InlineFormattingContext::Line::contentLogicalRight):
        (WebCore::Layout::InlineFormattingContext::Line::close):

2018-10-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Find floating constraints for a given vertical position
        https://bugs.webkit.org/show_bug.cgi?id=190928

        Reviewed by Antti Koivisto.

        https://www.w3.org/TR/CSS22/visuren.html#inline-formatting

        "In general, the left edge of a line box touches the left edge of its containing block and the right edge touches the right edge of its containing block.
        However, floating boxes may come between the containing block edge and the line box edge.
        Thus, although line boxes in the same inline formatting context generally have the same width
        (that of the containing block), they may vary in width if available horizontal space is reduced due to floats."

        This patch adds support for retrieving left/right constraints for a given line (vertical position).

        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::constraints const):
        * layout/floats/FloatingState.h:

2018-10-26  Zalan Bujtas  <zalan@apple.com>

        [LFC] Inline formatting context has higher priority than block
        https://bugs.webkit.org/show_bug.cgi?id=190924

        Reviewed by Antti Koivisto.

        When an element establishes both inline and block formatting contexts, we need to pick one to
        create (and we choose the content driven formatting type (inline)). See example below:

        <div style="overflow: hidden">This text should be inside an inlines formatting context.</div>

        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::formattingContext const):

2018-10-26  Ali Juma  <ajuma@chromium.org>

        REGRESSION (r237255): Text selection is broken in form fields
        https://bugs.webkit.org/show_bug.cgi?id=190899

        Reviewed by Ryosuke Niwa.

        Fix missing negation when checking for a fully-clipped-out rect. This was causing
        RenderObject::computeVisibleRectInContainer to incorrectly early-out.

        Test: fast/repaint/text-selection-overflow-hidden.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::computeVisibleRectInContainer const):

2018-10-25  Chris Dumez  <cdumez@apple.com>

        [PSON] Navigating cross-site with locked history but unlocked back/forward list fails to create a new BackForwardListItem
        https://bugs.webkit.org/show_bug.cgi?id=190915
        <rdar://problem/45059069>

        Reviewed by Geoffrey Garen.

        * history/PageCache.cpp:
        (WebCore::canCacheFrame):
        Make sure we do not put into PageCache a page whose main frame is showing the initial empty document.
        We usually do not try to put those into PageCache because we do not have a HistoryItem to save the
        PageCache entry on. However, when we process-swap on a navigation with the history locked, the new
        process has a HistoryItem and is initially showing the initial empty document before continuing
        the load from the previous process. Note that saving the initial empty document in PageCache would
        lead to crashes later on previous the initial empty document's Window is taken and reused for the
        next load.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        Stop assuming that we're continuing a client-side redirect when lockHistory is Yes. It is
        lockBackForwardList that is actually Yes when we're doing a client-side redirect.

        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        Stop using calling the completion handler with an invalid URL when the policy decision is 'Suspend' and
        use 'about:blank' instead. Without this change, FrameLoader::continueLoadAfterNavigationPolicy() would
        not load 'about:blank' when its AllowNavigationToInvalidURL parameter is No.

2018-10-25  Devin Rousso  <drousso@apple.com>

        Fix build after r237431 for platforms that don't support FULLSCREEN_API

        Reviewed by Joseph Pecoraro.

        No new tests. No change in behavior.

        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::addEventListenersToNode):

2018-10-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: display fullscreen enter/exit events in Timelines and Network node waterfalls
        https://bugs.webkit.org/show_bug.cgi?id=189874
        <rdar://problem/44700000>

        Reviewed by Joseph Pecoraro.

        Updated existing test: http/tests/inspector/dom/didFireEvent.html

        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::EventFiredCallback::handleEvent):
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMAgent::addEventListenersToNode):
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::eventDidResetAfterDispatch): Added.
        Prevent the same event from being sent to the frontend more than once.

        * dom/Event.cpp:
        (WebCore::Event::resetAfterDispatch):

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

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::eventDidResetAfterDispatch): Added.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::eventDidResetAfterDispatchImpl): Added.

2018-10-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, silence a -Wreturn-type warning

        When every return is supposed to be covered by a switch statement, a release assert or CRASH
        is required by GCC.

        * Modules/mediastream/libwebrtc/LibWebRTCCertificateGenerator.cpp:
        (WebCore::LibWebRTCCertificateGenerator::keyParamsFromCertificateType):

2018-10-25  Antoine Quint  <graouts@apple.com>

        [Web Animations] Turn Web Animations CSS Integration off by default
        https://bugs.webkit.org/show_bug.cgi?id=190901

        Reviewed by Dean Jackson.

        * page/RuntimeEnabledFeatures.h:

2018-10-25  Jon Davis  <jond@apple.com>

        Changed "Under Development" status to use "In Development" instead
        https://bugs.webkit.org/show_bug.cgi?id=187615

        Reviewed by Joseph Pecoraro.

        * features.json: Updated CSS Painting API Level 1 and CSS Properties and Values API Level 1.

2018-10-25  Chris Dumez  <cdumez@apple.com>

        REGRESSION (236779) scandinaviandesigns.com product pages auto redirect to product image
        https://bugs.webkit.org/show_bug.cgi?id=190891
        <rdar://problem/45296796>

        Reviewed by Antti Koivisto.

        When a radio element gets clicked, we should only fire the 'input' and 'change' if the checked state
        of the radio element has changed.

        Test: fast/dom/HTMLInputElement/radio-element-fires-change-event-only-when-checked-state-changes.html

        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::didDispatchClick):

2018-10-25  Joseph Pecoraro  <pecoraro@apple.com>

        InspectorCanvas is not getting cleared properly for OffscreenCanvas
        https://bugs.webkit.org/show_bug.cgi?id=190894
        <rdar://problem/45498435>

        Reviewed by Simon Fraser.

        Covered by existing tests not crashing with guard malloc.

        InspectorCanvasAgents tracks all CanvasRenderingContexts and needs to
        remove its reference when the containing CanvasBase goes away. It does
        this by registering as a notification observer, but if it can't map
        from the CanvasBase back to the rendering context we were failing to
        remove our reference. Enforce CanvasBase classes to notify observers
        of destruction while they still have their CanvasRenderingContext.

        * html/CanvasBase.cpp:
        (WebCore::CanvasBase::~CanvasBase):
        (WebCore::CanvasBase::notifyObserversCanvasDestroyed):
        * html/CanvasBase.h:
        Assert that subclasses notify observers of the canvas being destroyed,
        since they will need to do this before m_context is cleared.

        * html/CustomPaintCanvas.cpp:
        (WebCore::CustomPaintCanvas::~CustomPaintCanvas):
        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::~OffscreenCanvas):
        Follow the new expected pattern of notifying observers before clearing
        the context. HTMLCanvasElement already followed this pattern.

        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::canvasDestroyed):
        Add an assertion that would catch this earlier.

2018-10-24  Alexey Proskuryakov  <ap@apple.com>

        Clean up some obsolete macOS version guards
        https://bugs.webkit.org/show_bug.cgi?id=190887

        Reviewed by Dan Bernstein.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::maximumDurationToCacheMediaTime const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::didPassCORSAccessCheck const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wouldTaintOrigin const):

2018-10-24  Tim Horton  <timothy_horton@apple.com>

        Attachment filenames with RTL characters should format similar to Finder
        https://bugs.webkit.org/show_bug.cgi?id=190736
        <rdar://problem/44735946>

        Reviewed by Dan Bernstein.

        Test: fast/attachment/attachment-title-with-rtl.html

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::attachmentTitleForDisplay const):
        * html/HTMLAttachmentElement.h:
        Add attachmentTitleForDisplay(), which wraps the non-extension part of
        attachmentTitle in BiDi isolates, matching Finder's behavior.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderAttachmentInfo::buildWrappedLines):
        (WebCore::RenderAttachmentInfo::RenderAttachmentInfo):
        * rendering/RenderThemeMac.mm:
        (WebCore::AttachmentLayout::layOutTitle):
        Adopt attachmentTitleForDisplay, and ask CoreText to use a subrange of
        the original string for the last line, instead of splitting the string
        ourselves. This ensures that BiDi control characters are respected
        even in the last line of the string.

2018-10-24  Megan Gardner  <megan_gardner@apple.com>

        Turn on Conic Gradients
        https://bugs.webkit.org/show_bug.cgi?id=190810

        Reviewed by Tim Horton.

        Added tests previously, only switching feature from experimental to always avaiable.

        * Configurations/FeatureDefines.xcconfig:
        * css/parser/CSSParserContext.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        * css/parser/CSSParserContext.h:
        (WebCore::CSSParserContextHash::hash):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeConicGradient):
        * page/Settings.yaml:

2018-10-11  Jiewen Tan  <jiewen_tan@apple.com>

        Only report resource timing to parent frame for the first iframe load
        https://bugs.webkit.org/show_bug.cgi?id=190498
        <rdar://problem/44347398>

        Reviewed by Youenn Fablet.

        Only the first iframe navigation or the first iframe navigation after about:blank should be reported.
        https://www.w3.org/TR/resource-timing-2/#resources-included-in-the-performanceresourcetiming-interface

        Test: http/tests/misc/resource-timing-navigation-in-restored-iframe.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadWithDocumentLoader):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::shouldReportResourceTimingToParentFrame):
        (WebCore::FrameLoader::setShouldReportResourceTimingToParentFrame): Deleted.
        * loader/ResourceTimingInformation.cpp:
        (WebCore::ResourceTimingInformation::addResourceTiming):

2018-10-24  Brent Fulgham  <bfulgham@apple.com>

        Cure Windows Direct2D Backend of a nasty case of bitrot
        https://bugs.webkit.org/show_bug.cgi?id=190875
        <rdar://problem/45523268>
        
        Reviewed by Zalan Bujtas.

        The Direct2D backend has drifted out of date with the rest of WebKit.
        This patch updates things so we can get a runnable build.
        
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::create):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageDecoder.h:
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::setTargetContext):
        * platform/graphics/opentype/OpenTypeMathData.cpp:
        (WebCore::OpenTypeMathData::OpenTypeMathData): Need non-default constructor to make Visual
        Studio happy.
        * platform/graphics/win/GradientDirect2D.cpp:
        (WebCore::Gradient::generateGradient):
        * platform/graphics/win/GraphicsContextDirect2D.cpp: Update for new display list implementation.
        (WebCore::GraphicsContextPlatformPrivate::setAlpha):
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::GraphicsContext::drawPattern):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::platformFillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::clipBounds const):
        (WebCore::GraphicsContext::beginPlatformTransparencyLayer):
        (WebCore::GraphicsContext::endPlatformTransparencyLayer):
        (WebCore::GraphicsContext::setMiterLimit):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineDash):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::setCTM):
        (WebCore::GraphicsContext::getCTM const):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::drawLinesForText):
        (WebCore::GraphicsContext::setURLForRect):
        (WebCore::GraphicsContext::setIsCALayerContext):
        (WebCore::GraphicsContext::isCALayerContext const):
        (WebCore::GraphicsContext::setIsAcceleratedContext):
        (WebCore::GraphicsContext::isAcceleratedContext const):
        (WebCore::GraphicsContext::setPlatformShouldAntialias):
        (WebCore::GraphicsContext::setPlatformShouldSmoothFonts):
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        (WebCore::GraphicsContext::platformFillEllipse):
        (WebCore::GraphicsContext::platformStrokeEllipse):
        * platform/graphics/win/GraphicsLayerDirect2D.cpp:
        (WebCore::GraphicsLayer::create):
        (): Deleted.
        * platform/graphics/win/ImageBufferDataDirect2D.cpp:
        (WebCore::ImageBufferData::putData):
        * platform/graphics/win/ImageBufferDataDirect2D.h:
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        (WebCore::ImageBuffer::createCompatibleBuffer):
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        (WebCore::ImageDecoderDirect2D::bytesDecodedToDetermineProperties const):
        (WebCore::ImageDecoderDirect2D::encodedDataStatus const):
        (WebCore::ImageDecoderDirect2D::repetitionCount const):
        (WebCore::ImageDecoderDirect2D::frameOrientationAtIndex const):
        (WebCore::ImageDecoderDirect2D::frameDurationAtIndex const):
        (WebCore::ImageDecoderDirect2D::frameAllowSubsamplingAtIndex const):
        (WebCore::ImageDecoderDirect2D::frameHasAlphaAtIndex const):
        (WebCore::ImageDecoderDirect2D::createFrameImageAtIndex):
        (WebCore::ImageDecoderDirect2D::setData):
        (WebCore::ImageDecoderDirect2D::bytesDecodedToDetermineProperties): Deleted.
        (WebCore::ImageDecoderDirect2D::createFrameImageAtIndex const): Deleted.
        * platform/graphics/win/ImageDecoderDirect2D.h:
        * platform/graphics/win/ImageDirect2D.cpp:
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/win/PatternDirect2D.cpp:
        (WebCore::Pattern::createPlatformPattern const):

2018-10-24  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Cleanup: MIMETypeRegistry functions
        https://bugs.webkit.org/show_bug.cgi?id=190838

        Reviewed by Simon Fraser.

        Modernize the initialization of the lists in MIMETypeRegistry. Make the
        functions that return these list be self-contained. Use NeverDestroy<> to
        allocate the local static variable. Use std::initializer_list() and
        makeNeverDestroyed() to initialize NeverDestroy<> variables only once.

        supportedImageResourceMIMETypes will be deleted and all the calls to it 
        will be replaced by supportedImageMIMETypes because they are identical.

        * loader/archive/ArchiveFactory.cpp:
        (WebCore::ArchiveFactory::registerKnownArchiveMIMETypes): This function
        is called while initializing the supportedNonImageMIMETypes(). So it
        should not have a direct call to it. Instead, supportedNonImageMIMETypes
        is passed to it.
        * loader/archive/ArchiveFactory.h:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::supportedImageMIMETypes):
        (WebCore::supportedImageMIMETypesForEncoding):
        (WebCore::supportedJavaScriptMIMETypes):
        (WebCore::MIMETypeRegistry::supportedNonImageMIMETypes):
        (WebCore::MIMETypeRegistry::supportedMediaMIMETypes):
        (WebCore::pdfMIMETypes):
        (WebCore::MIMETypeRegistry::unsupportedTextMIMETypes):
        (WebCore::MIMETypeRegistry::isSupportedImageMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedImageMIMETypeForEncoding):
        (WebCore::MIMETypeRegistry::isSupportedJavaScriptMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedNonImageMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedMediaMIMEType):
        (WebCore::MIMETypeRegistry::isUnsupportedTextMIMEType):
        (WebCore::MIMETypeRegistry::isPDFMIMEType):
        (WebCore::MIMETypeRegistry::systemPreviewMIMETypes):
        (WebCore::MIMETypeRegistry::isSystemPreviewMIMEType):
        (WebCore::initializeSupportedImageMIMETypes): Deleted.
        (WebCore::initializeSupportedImageMIMETypesForEncoding): Deleted.
        (WebCore::initializeSupportedJavaScriptMIMETypes): Deleted.
        (WebCore::initializePDFMIMETypes): Deleted.
        (WebCore::initializeSupportedNonImageMimeTypes): Deleted.
        (WebCore::initializeSupportedMediaMIMETypes): Deleted.
        (WebCore::initializeUnsupportedTextMIMETypes): Deleted.
        (WebCore::MIMETypeRegistry::isSupportedImageResourceMIMEType): Deleted.
        (WebCore::MIMETypeRegistry::getSupportedImageMIMETypes): Deleted.
        (WebCore::MIMETypeRegistry::getSupportedImageResourceMIMETypes): Deleted.
        (WebCore::MIMETypeRegistry::getSupportedNonImageMIMETypes): Deleted.
        (WebCore::MIMETypeRegistry::getSupportedMediaMIMETypes): Deleted.
        (WebCore::MIMETypeRegistry::getPDFMIMETypes): Deleted.
        (WebCore::MIMETypeRegistry::getUnsupportedTextMIMETypes): Deleted.
        (WebCore::MIMETypeRegistry::getSystemPreviewMIMETypes): Deleted.
        * platform/MIMETypeRegistry.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::supportsType):
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoderCG::encodedDataStatus const):
        * platform/graphics/cg/UTIRegistry.cpp:
        (WebCore::supportedDefaultImageSourceTypes):
        (WebCore::isSupportImageSourceType):
        (WebCore::allowedImageUTIs): Deleted.
        (WebCore::isAllowedImageUTI): Deleted.
        * platform/graphics/cg/UTIRegistry.h:
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::write):

2018-10-24  Chris Dumez  <cdumez@apple.com>

        [PSON] When navigating back and forth, 'about:blank' shows up in the back/forward list
        https://bugs.webkit.org/show_bug.cgi?id=190846
        <rdar://problem/45058938>

        Reviewed by Antti Koivisto.

        When a page gets suspended after a process-swap, we navigate it to about:blank from inside the navigation
        policy handler, by overriding the request URL. This normally works fine because we usually process-swap
        on standard navigation. However, when we would process-swap on a back/forward navigation, we would end
        up using the back/forward navigation load type to do the about:blank load. This would have repercussions
        because history navigations update the current history item with the new URL (in this case 'about:blank').
        To avoid the issue, switch to a standard load type whenever the client asks us to suspend and we load
        'about:blank' as a result.

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

2018-10-24  Andy Estes  <aestes@apple.com>

        [macOS Debug WK2] Layout Test http/tests/ssl/applepay/ApplePayShippingAddressChangeEventErrorsV3.https.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=190650
        <rdar://problem/45341914>

        Reviewed by Alex Christensen.

        In computeErrors, we intend to ignore errors when computing paymentMethodErrors. But we
        weren't clearing exceptions generated from calling convert(), so they would end up being
        logged as unhandled promise rejections.

        Changed ApplePayPaymentHandler::computeErrors() to use a CatchScope to clear exceptions when
        decoding paymentMethodErrors.

        Also changed ApplePayShippingAddressChangeEventErrorsV3.https.html to catch promise
        rejections from calling PaymentRequest.abort().

        Covered by existing test.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::computeErrors const):

2018-10-22  Antti Koivisto  <antti@apple.com>

        topPrivatelyControlledDomain is slow
        https://bugs.webkit.org/show_bug.cgi?id=190792

        Reviewed by Alex Christensen and Chris Dumez.

        It calls into some slowish CFNetwork code and ends up showing up in profiles.

        * platform/mac/PublicSuffixMac.mm:
        (WebCore::topPrivatelyControlledDomain):

        Add a cache that avoids calls into frameworks.

2018-10-22  Jer Noble  <jer.noble@apple.com>

        Use WeakPtr and GenericTaskQueue within ObjC classes used by MediaPlayerPrivateAVFoundationObjC
        https://bugs.webkit.org/show_bug.cgi?id=190790

        Reviewed by Alex Christensen.

        Move towards using WeakPtr callbacks instead of raw pointers within the utility objects used by
        MediaPlayerPrivateAVFoundationObjC. Additionally, accessing WeakPtr off the thread which created
        the pointer is not allowed, so use a GenericTaskQueue to schedule callbacks instead. Make 
        GenericTaskQueue<Timer> thread-safe by locking around access to m_pendingTasks, and by making 
        incrementing the pending task count atomic.

        * platform/GenericTaskQueue.cpp:
        (WebCore::TaskDispatcher<Timer>::postTask):
        (WebCore::TaskDispatcher<Timer>::sharedLock):
        (WebCore::TaskDispatcher<Timer>::sharedTimerFired):
        (WebCore::TaskDispatcher<Timer>::dispatchOneTask):
        (WebCore::TaskDispatcher<Timer>::pendingDispatchers):
        * platform/GenericTaskQueue.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::~MediaPlayerPrivateAVFoundationObjC):
        (-[WebCoreAVFMovieObserver initWithPlayer:]):
        (-[WebCoreAVFMovieObserver disconnect]):
        (-[WebCoreAVFMovieObserver metadataLoaded]):
        (-[WebCoreAVFMovieObserver didEnd:]):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[WebCoreAVFMovieObserver legibleOutput:didOutputAttributedStrings:nativeSampleBuffers:forItemTime:]):
        (-[WebCoreAVFMovieObserver outputSequenceWasFlushed:]):
        (-[WebCoreAVFLoaderDelegate initWithPlayer:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForLoadingOfRequestedResource:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:didCancelLoadingRequest:]):
        (-[WebCoreAVFPullDelegate initWithPlayer:]):
        (-[WebCoreAVFPullDelegate outputMediaDataWillChange:]):
        (-[WebCoreAVFMovieObserver initWithCallback:]): Deleted.
        (-[WebCoreAVFLoaderDelegate initWithCallback:]): Deleted.
        (-[WebCoreAVFLoaderDelegate setCallback:]): Deleted.
        (-[WebCoreAVFPullDelegate initWithCallback:]): Deleted.
        (-[WebCoreAVFPullDelegate setCallback:]): Deleted.

2018-10-23  Jer Noble  <jer.noble@apple.com>

        TextTrack cues should be updated more often than every 250ms.
        https://bugs.webkit.org/show_bug.cgi?id=190827

        Reviewed by Eric Carlson.

        Test: media/track/track-cue-timing.html

        TextTracks cues are recalculated on the playback timer, which fires at least every 250ms.
        In addition to this timer, add a method to MediaPlayer to provide a task which will be
        performed at a particular media time, and use this new method to request cues be updated
        at the next interesting media time. The next interesting time would be either when the
        soonest current cue will end, or when the next non-current cue will start, whichever is
        earlier.

        (Determining the "next non-current cue" requires new API on PODIntervalTree, as that class
        does not have iterators per-se.)

        * html/HTMLMediaElement.cpp:
        (WebCore::compareCueIntervalEndTime):
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        * platform/PODIntervalTree.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::performTaskAtMediaTime):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::performTaskAtMediaTime):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::performTaskAtMediaTime):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::performTaskAtMediaTime):

2018-10-23  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Assertion fails while destructing local static AtomicString of FontCache::lastResortFallbackFont
        https://bugs.webkit.org/show_bug.cgi?id=190748

        Reviewed by Myles C. Maxfield.

        FontCache::lastResortFallbackFont had local static AtomicString
        variables which are not capsuled by NeverDestroyed. Hence, those
        variables are destructed on IPC thread when WebProcess exits.

        Changed those AtomicString to NeverDestroyed<AtomicString> not to
        be destructed on exit.

        This change can't be tested automatically because WebKitTestRunner
        doesn't support Windows port yet.

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::lastResortFallbackFont): Changed
        fallbackFonts's type from AtomicString array to
        NeverDestroyed<AtomicString> array.

2018-10-23  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Rename old GPU* implementation files to GPULegacy* for WebMetal
        https://bugs.webkit.org/show_bug.cgi?id=190817

        Reviewed by Dean Jackson.

        No new tests. No change in behavior.

        * [Large list of refactored classes and renamed files]: GPU* is now GPULegacy*

2018-10-23  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r237261.

        The layout test for this change crashes under GuardMalloc.

        Reverted changeset:

        "Handle MDNS resolution of candidates through libwebrtc
        directly"
        https://bugs.webkit.org/show_bug.cgi?id=190681
        https://trac.webkit.org/changeset/237261

2018-10-23  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r237357.

        API test is now failing on all platforms.

        Reverted changeset:

        "topPrivatelyControlledDomain is slow"
        https://bugs.webkit.org/show_bug.cgi?id=190792
        https://trac.webkit.org/changeset/237357

2018-10-23  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r237350.

        Caused several Crashes cross multiple tests and platforms.

        Reverted changeset:

        "Use WeakPtr and GenericTaskQueue within ObjC classes used by
        MediaPlayerPrivateAVFoundationObjC"
        https://bugs.webkit.org/show_bug.cgi?id=190790
        https://trac.webkit.org/changeset/237350

2018-10-23  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r237280.

        Causes fast/box-shadow/box-shadow-with-zero-radius.html to
        fail on iOS Simulator.

        Reverted changeset:

        "[CG] Adopt CG SPI for non-even cornered rounded rects"
        https://bugs.webkit.org/show_bug.cgi?id=190155
        https://trac.webkit.org/changeset/237280

2018-10-23  Antti Koivisto  <antti@apple.com>

        topPrivatelyControlledDomain is slow
        https://bugs.webkit.org/show_bug.cgi?id=190792

        Reviewed by Alex Christensen.

        It calls into some slowish CFNetwork code and ends up showing up in profiles.

        * platform/mac/PublicSuffixMac.mm:
        (WebCore::topPrivatelyControlledDomain):

        Add a cache that avoids calls into frameworks.

2018-10-23  Chris Dumez  <cdumez@apple.com>

        [PSON] Add support for cross-site client-side redirects
        https://bugs.webkit.org/show_bug.cgi?id=190806
        <rdar://problem/45047344>

        Reviewed by Geoffrey Garen.

        Add support for cross-site client-side redirects so that it swaps process and so that the back
        forward list looks as expected. To support this, the following changes had to be done:
        - The NavigationAction now provides additional information so that the WebProcess can communicate
          things about the client-side redirect to the UIProcess: lockHistory / lockBackForwardList and
          clientRedirectSourceForHistory.
        - If the UIProcess decides to process-swap on a client-side redirect, we pass the client-side
          redirect information to the new WebContent process via LoadRequest struct. WebCore then takes
          care of setting things up using this information so that it recognizes that it is continuing
          a load that is a client side redirect.
        - We also need to pass the current BackForwardListItem / HistoryItem to the new WebContent
          process so that the new process can truly lock history and keep updating the *current*
          HistoryItem, instead of creating a new HistoryItem.
        - After a process swap, when we re-construct the WebFrameProxy for the main frame in the new
          process, we now set the frame's URL in the UIProcess to the URL it had before we swapped.
          Clients such as Safari, rely on the main frame's URL being the expected value (the last
          committed load URL) until the next load is committed when receiving didPerformRedirect
          calls. Because we are destroying the main frame on process-swapping, we were losing the
          last committed URL and Safari would hit assertions.

        With this model, the willPerformClientRedirect IPC is still sent from the previous WebProcess
        and the didPerformClientRedirect IPC is now sent by the new WebProcess. No change should be
        observable from the client's point of view.

        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::setLockHistory):
        (WebCore::FrameLoadRequest::setlockBackForwardList):
        (WebCore::FrameLoadRequest::clientRedirectSourceForHistory const):
        (WebCore::FrameLoadRequest::setClientRedirectSourceForHistory):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateForRedirectWithLockedBackForwardList):
        * loader/HistoryController.h:
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::lockHistory const):
        (WebCore::NavigationAction::setLockHistory):
        (WebCore::NavigationAction::lockBackForwardList const):
        (WebCore::NavigationAction::setLockBackForwardList):

2018-10-23  Jer Noble  <jer.noble@apple.com>

        Use WeakPtr and GenericTaskQueue within ObjC classes used by MediaPlayerPrivateAVFoundationObjC
        https://bugs.webkit.org/show_bug.cgi?id=190790

        Reviewed by Alex Christensen.

        Move towards using WeakPtr callbacks instead of raw pointers within the utility objects used by
        MediaPlayerPrivateAVFoundationObjC. Additionally, accessing WeakPtr off the thread which created
        the pointer is not allowed, so use a GenericTaskQueue to schedule callbacks instead. Make 
        GenericTaskQueue<Timer> thread-safe by locking around access to m_pendingTasks, and by making 
        incrementing the pending task count atomic.

        * platform/GenericTaskQueue.cpp:
        (WebCore::TaskDispatcher<Timer>::postTask):
        (WebCore::TaskDispatcher<Timer>::sharedLock):
        (WebCore::TaskDispatcher<Timer>::sharedTimerFired):
        (WebCore::TaskDispatcher<Timer>::dispatchOneTask):
        (WebCore::TaskDispatcher<Timer>::pendingDispatchers):
        * platform/GenericTaskQueue.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::~MediaPlayerPrivateAVFoundationObjC):
        (-[WebCoreAVFMovieObserver initWithPlayer:]):
        (-[WebCoreAVFMovieObserver disconnect]):
        (-[WebCoreAVFMovieObserver metadataLoaded]):
        (-[WebCoreAVFMovieObserver didEnd:]):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[WebCoreAVFMovieObserver legibleOutput:didOutputAttributedStrings:nativeSampleBuffers:forItemTime:]):
        (-[WebCoreAVFMovieObserver outputSequenceWasFlushed:]):
        (-[WebCoreAVFLoaderDelegate initWithPlayer:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForLoadingOfRequestedResource:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:didCancelLoadingRequest:]):
        (-[WebCoreAVFPullDelegate initWithPlayer:]):
        (-[WebCoreAVFPullDelegate outputMediaDataWillChange:]):
        (-[WebCoreAVFMovieObserver initWithCallback:]): Deleted.
        (-[WebCoreAVFLoaderDelegate initWithCallback:]): Deleted.
        (-[WebCoreAVFLoaderDelegate setCallback:]): Deleted.
        (-[WebCoreAVFPullDelegate initWithCallback:]): Deleted.
        (-[WebCoreAVFPullDelegate setCallback:]): Deleted.

2018-10-22  Justin Michaud  <justin_michaud@apple.com>

        Registered custom properties should support syntax parameter for <length> and *
        https://bugs.webkit.org/show_bug.cgi?id=190039

        Reviewed by Antti Koivisto.

        Refactor code so that:
        - All properties applied in StyleResolver::applyMatchedProperties are only applied once. 
        - Custom properties are only resolved once, in StyleResolver, when they are applied to the RenderStyle. They were previously resolved
          every time they were referenced, and again in RenderStyle.
        - The font-size property is applied after its variable references, but before custom properties that depend on it.
        - Cycles are detected at the same time as resolution.
        - MutableStyleProperties' custom properties cannot be set from Javascript or WebKitLegacy if they do not parse for the property's type.
          If they contain var(--...) references, however, then they can be set because we cannot check if the references are valid from setProperty.
          This behaviour matches chrome, but is not documented in the spec. 
        - Custom property values have more explicit resolved/unresolved state.
        - RenderStyle only ever holds resolved custom properties, and StyleResolver::CascadedProperties only holds unresolved properties.

        Tests: css-custom-properties-api/crash.html
               css-custom-properties-api/cycles.html
               css-custom-properties-api/inline.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::customPropertyValue):
        * css/CSSCustomPropertyValue.cpp:
        (WebCore::CSSCustomPropertyValue::equals const):
        (WebCore::CSSCustomPropertyValue::customCSSText const):
        (WebCore::CSSCustomPropertyValue::tokens const):
        (WebCore::CSSCustomPropertyValue::checkVariablesForCycles const): Deleted.
        (WebCore::CSSCustomPropertyValue::resolveVariableReferences const): Deleted.
        (WebCore::CSSCustomPropertyValue::setResolvedTypedValue): Deleted.
        * css/CSSCustomPropertyValue.h:
        * css/CSSRegisteredCustomProperty.cpp:
        (WebCore::CSSRegisteredCustomProperty::CSSRegisteredCustomProperty):
        * css/CSSRegisteredCustomProperty.h:
        * css/CSSStyleSheet.h:
        * css/CSSVariableData.cpp:
        (WebCore::CSSVariableData::CSSVariableData):
        (WebCore::CSSVariableData::consumeAndUpdateTokens): Deleted.
        (WebCore::CSSVariableData::checkVariablesForCycles const): Deleted.
        (WebCore::CSSVariableData::checkVariablesForCyclesWithRange const): Deleted.
        (WebCore::CSSVariableData::resolveVariableFallback const): Deleted.
        (WebCore::CSSVariableData::resolveVariableReference const): Deleted.
        (WebCore::CSSVariableData::resolveVariableReferences const): Deleted.
        (WebCore::CSSVariableData::resolveTokenRange const): Deleted.
        * css/CSSVariableData.h:
        (WebCore::CSSVariableData::create):
        (WebCore::CSSVariableData::createResolved): Deleted.
        (WebCore::CSSVariableData::needsVariableResolution const): Deleted.
        (WebCore::CSSVariableData::CSSVariableData): Deleted.
        * css/CSSVariableReferenceValue.cpp:
        (WebCore::resolveVariableFallback):
        (WebCore::resolveVariableReference):
        (WebCore::resolveTokenRange):
        (WebCore::CSSVariableReferenceValue::resolveVariableReferences const):
        (WebCore::CSSVariableReferenceValue::checkVariablesForCycles const): Deleted.
        * css/CSSVariableReferenceValue.h:
        (WebCore::CSSVariableReferenceValue::create):
        (WebCore::CSSVariableReferenceValue::equals const):
        (WebCore::CSSVariableReferenceValue::variableDataValue const): Deleted.
        * css/DOMCSSRegisterCustomProperty.cpp:
        (WebCore::DOMCSSRegisterCustomProperty::registerProperty):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::setProperty):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialCustomProperty):
        (WebCore::StyleBuilderCustom::applyValueCustomProperty):
        * css/StyleProperties.cpp:
        (WebCore::MutableStyleProperties::setCustomProperty):
        * css/StyleProperties.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::setStyle):
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::applyMatchedProperties):
        (WebCore::StyleResolver::applyPropertyToCurrentStyle):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::resolvedVariableValue const):
        (WebCore::StyleResolver::CascadedProperties::applyDeferredProperties):
        (WebCore::StyleResolver::CascadedProperties::Property::apply):
        (WebCore::StyleResolver::applyCascadedCustomProperty):
        (WebCore::StyleResolver::applyCascadedProperties):
        * css/StyleResolver.h:
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseValueWithVariableReferences):
        * css/parser/CSSParser.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::CSSPropertyParser):
        (WebCore::CSSPropertyParser::canParseTypedCustomPropertyValue):
        (WebCore::CSSPropertyParser::parseTypedCustomPropertyValue):
        (WebCore::CSSPropertyParser::collectParsedCustomPropertyValueDependencies):
        (WebCore::CSSPropertyParser::parseValueStart):
        (WebCore::CSSPropertyParser::parseSingleValue):
        * css/parser/CSSPropertyParser.h:
        * css/parser/CSSVariableParser.cpp:
        (WebCore::CSSVariableParser::parseDeclarationValue):
        * dom/ConstantPropertyMap.cpp:
        (WebCore::ConstantPropertyMap::setValueForProperty):
        (WebCore::variableDataForPositivePixelLength):
        (WebCore::variableDataForPositiveDuration):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::checkVariablesInCustomProperties): Deleted.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setInheritedCustomPropertyValue):
        (WebCore::RenderStyle::setNonInheritedCustomPropertyValue):
        * rendering/style/StyleCustomPropertyData.h:
        (WebCore::StyleCustomPropertyData::operator== const):
        (WebCore::StyleCustomPropertyData::setCustomPropertyValue):
        (WebCore::StyleCustomPropertyData::StyleCustomPropertyData):
        (): Deleted.

2018-10-22  Justin Michaud  <justin_michaud@apple.com>

        CSS Paint API should give a 2d rendering context
        https://bugs.webkit.org/show_bug.cgi?id=190762

        Reviewed by Dean Jackson.

        Add a new type of canvas and 2d rendering context to support the CSS Painting API.
        Make many of the methods from HTMLCanvasElement virtual functions on CanvasBase, and
        remove many of the downcasts in CanvasRenderingContext2DBase as a result.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSPaintRenderingContext2DCustom.cpp: Copied from Source/WebCore/css/CSSPaintCallback.h.
        (WebCore::root):
        (WebCore::JSPaintRenderingContext2DOwner::isReachableFromOpaqueRoots):
        (WebCore::JSPaintRenderingContext2D::visitAdditionalChildren):
        * bindings/js/WebCoreBuiltinNames.h:
        * css/CSSPaintCallback.h:
        * css/CSSPaintCallback.idl:
        * html/CanvasBase.cpp:
        (WebCore::CanvasBase::~CanvasBase):
        * html/CanvasBase.h:
        (WebCore::CanvasBase::isCustomPaintCanvas const):
        * html/CustomPaintCanvas.cpp: Added.
        (WebCore::CustomPaintCanvas::create):
        (WebCore::CustomPaintCanvas::CustomPaintCanvas):
        (WebCore::CustomPaintCanvas::~CustomPaintCanvas):
        (WebCore::CustomPaintCanvas::width const):
        (WebCore::CustomPaintCanvas::setWidth):
        (WebCore::CustomPaintCanvas::height const):
        (WebCore::CustomPaintCanvas::setHeight):
        (WebCore::CustomPaintCanvas::size const):
        (WebCore::CustomPaintCanvas::setSize):
        (WebCore::CustomPaintCanvas::getContext):
        (WebCore::CustomPaintCanvas::copiedImage const):
        (WebCore::CustomPaintCanvas::drawingContext const):
        (WebCore::CustomPaintCanvas::existingDrawingContext const):
        (WebCore::CustomPaintCanvas::makeRenderingResultsAvailable):
        * html/CustomPaintCanvas.h: Copied from Source/WebCore/html/OffscreenCanvas.h.
        * html/HTMLCanvasElement.h:
        * html/OffscreenCanvas.h:
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::wouldTaintOrigin):
        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::isPaint const):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::DisplayListDrawingContext::DisplayListDrawingContext):
        (WebCore::CanvasRenderingContext2DBase::unwindStateStack):
        (WebCore::CanvasRenderingContext2DBase::isAccelerated const):
        (WebCore::CanvasRenderingContext2DBase::setStrokeStyle):
        (WebCore::CanvasRenderingContext2DBase::setFillStyle):
        (WebCore::CanvasRenderingContext2DBase::resetTransform):
        (WebCore::CanvasRenderingContext2DBase::clearCanvas):
        (WebCore::CanvasRenderingContext2DBase::transformAreaToDevice const):
        (WebCore::CanvasRenderingContext2DBase::rectContainsCanvas const):
        (WebCore::CanvasRenderingContext2DBase::calculateCompositingBufferRect):
        (WebCore::CanvasRenderingContext2DBase::compositeBuffer):
        (WebCore::CanvasRenderingContext2DBase::createPattern):
        (WebCore::CanvasRenderingContext2DBase::didDrawEntireCanvas):
        (WebCore::CanvasRenderingContext2DBase::didDraw):
        (WebCore::CanvasRenderingContext2DBase::paintRenderingResultsToCanvas):
        (WebCore::CanvasRenderingContext2DBase::drawingContext const):
        * html/canvas/CanvasRenderingContext2DBase.h:
        * html/canvas/PaintRenderingContext2D.cpp: Copied from Source/WebCore/css/CSSPaintCallback.h.
        (WebCore::PaintRenderingContext2D::create):
        (WebCore::PaintRenderingContext2D::PaintRenderingContext2D):
        * html/canvas/PaintRenderingContext2D.h: Copied from Source/WebCore/css/CSSPaintCallback.h.
        * html/canvas/PaintRenderingContext2D.idl: Copied from Source/WebCore/css/CSSPaintCallback.idl.
        * html/canvas/WebMetalRenderPassAttachmentDescriptor.h:
        * platform/graphics/CustomPaintImage.cpp:
        (WebCore::CustomPaintImage::doCustomPaint):

2018-10-22  Keith Rollin  <krollin@apple.com>

        Use Location = "Relative to Build Products" rather than "Relative to Group"
        https://bugs.webkit.org/show_bug.cgi?id=190781

        Reviewed by Alexey Proskuryakov.

        Almost all Derived Files are included in Xcode projects with the
        Location attribute set to "Relative to Group". While this currently
        works, the Derived Files can no longer be found when enabling XCBuild
        (which has stricter requirements). Fix this by setting the Location
        attribute to "Relative to Build Products".

        No new tests -- no changed functionality.

        * WebCore.xcodeproj/project.pbxproj:

2018-10-22  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add justify text-align support.
        https://bugs.webkit.org/show_bug.cgi?id=190779

        Reviewed by Antti Koivisto.

        Collect expansion opportunities and adjust runs accordingly.

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutInlineContent const):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineRun.h:
        (WebCore::Layout::InlineRun::expansionOpportunity):
        (WebCore::Layout::InlineRun::TextContext::setStart):
        (WebCore::Layout::InlineRun::TextContext::setLength):
        (WebCore::Layout::InlineRun::setTextContext):
        (WebCore::Layout::InlineRun::createRun): Deleted.
        (WebCore::Layout::InlineRun::createTextRun): Deleted.
        * layout/inlineformatting/Line.cpp:
        (WebCore::Layout::InlineFormattingContext::Line::Line):
        (WebCore::Layout::InlineFormattingContext::Line::init):
        (WebCore::Layout::InlineFormattingContext::Line::computeExpansionOpportunities):
        (WebCore::Layout::InlineFormattingContext::Line::appendContent):
        (WebCore::Layout::InlineFormattingContext::Line::justifyRuns):
        (WebCore::Layout::InlineFormattingContext::Line::close):
        (WebCore::Layout::isNonCollapsedText): Deleted.

2018-10-22  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add (right, center)text-align support.
        https://bugs.webkit.org/show_bug.cgi?id=190745

        Reviewed by Antti Koivisto.

        Adjust the logical left of each run while closing the line.

        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingSimpleLineInformationIfNeeded):
        (WebCore::Layout::outputMismatchingComplexLineInformationIfNeeded):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::trimLeadingRun):
        (WebCore::Layout::InlineFormattingContext::layoutInlineContent const):
        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::Line::hasContent const):
        (WebCore::Layout::InlineFormattingContext::Line::contentLogicalLeft const): Deleted.
        * layout/inlineformatting/InlineLineBreaker.cpp:
        (WebCore::Layout::InlineLineBreaker::nextRun):
        (WebCore::Layout::InlineLineBreaker::splitRun):
        * layout/inlineformatting/InlineLineBreaker.h:
        * layout/inlineformatting/InlineRun.h:
        (WebCore::Layout::InlineRun::setLogicalLeft):
        (WebCore::Layout::InlineRun::TextContext::start const):
        (WebCore::Layout::InlineRun::createRun):
        (WebCore::Layout::InlineRun::createTextRun):
        (WebCore::Layout::InlineRun::InlineRun):
        (WebCore::Layout::InlineRun::TextContext::TextContext):
        (WebCore::Layout::InlineRun::TextContext::position const): Deleted.
        * layout/inlineformatting/Line.cpp:
        (WebCore::Layout::InlineFormattingContext::Line::Line):
        (WebCore::Layout::InlineFormattingContext::Line::init):
        (WebCore::Layout::adjustedLineLogicalLeft):
        (WebCore::Layout::InlineFormattingContext::Line::contentLogicalRight):
        (WebCore::Layout::InlineFormattingContext::Line::appendContent):
        (WebCore::Layout::InlineFormattingContext::Line::close):
        (WebCore::Layout::InlineFormattingContext::Line::setConstraints): Deleted.
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::outputInlineRuns):

2018-10-22  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Implement Replaced helper class.
        https://bugs.webkit.org/show_bug.cgi?id=190719

        Reviewed by Antti Koivisto.

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::Box):
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::replaced const):
        * layout/layouttree/LayoutReplaced.cpp:
        (WebCore::Layout::Replaced::Replaced):
        (WebCore::Layout::Replaced::hasIntrinsicWidth const):
        (WebCore::Layout::Replaced::hasIntrinsicHeight const):
        (WebCore::Layout::Replaced::hasIntrinsicRatio const):
        (WebCore::Layout::Replaced::intrinsicWidth const):
        (WebCore::Layout::Replaced::intrinsicHeight const):
        (WebCore::Layout::Replaced::intrinsicRatio const):
        * layout/layouttree/LayoutReplaced.h:
        (WebCore::Layout::Replaced::hasIntrinsicWidth const): Deleted.
        (WebCore::Layout::Replaced::hasIntrinsicHeight const): Deleted.
        (WebCore::Layout::Replaced::hasIntrinsicRatio const): Deleted.
        (WebCore::Layout::Replaced::intrinsicWidth const): Deleted.
        (WebCore::Layout::Replaced::intrinsicHeight const): Deleted.
        (WebCore::Layout::Replaced::intrinsicRatio const): Deleted.
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createSubTree):

2018-10-22  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Block formatting context roots avoid floats.
        https://bugs.webkit.org/show_bug.cgi?id=190723

        Reviewed by Antti Koivisto.

        Inline formatting context roots don't avoid floats (unless they also establish block formatting context).

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):

2018-10-20  YUHAN WU  <yuhan_wu@apple.com>

        MediaRecorder should fire a stop event when all tracks are ended
        https://bugs.webkit.org/show_bug.cgi?id=190642

        Reviewed by Youenn Fablet.

        This patch only implements to fire the stop event when all tracks are ended.
        We will need to fire a dataavailable event when all tracks are ended.

        Test: imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-stop.html

        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::MediaRecorder):
        (WebCore::MediaRecorder::~MediaRecorder):
        (WebCore::MediaRecorder::trackEnded):
        * Modules/mediarecorder/MediaRecorder.h:
        * Modules/mediarecorder/MediaRecorder.idl:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.h:

2018-10-19  Stephan Szabo  <stephan.szabo@sony.com>

        [WinCairo] Search terms are not saved for <input type="search">
        https://bugs.webkit.org/show_bug.cgi?id=188174

        Reviewed by Fujii Hironori.

        No new tests, should be covered by existing tests of search 
        inputs.

        Add support for saving the search terms for <input
        type="search"> to a SQLite database, replacing the
        CF-based implementation for Windows and adding support
        for non-legacy WebKit.

        * PlatformWin.cmake:
        * platform/win/SearchPopupMenuDB.cpp: Added.
        (WebCore::SearchPopupMenuDB::singleton):
        (WebCore::SearchPopupMenuDB::SearchPopupMenuDB):
        (WebCore::SearchPopupMenuDB::~SearchPopupMenuDB):
        (WebCore::SearchPopupMenuDB::saveRecentSearches):
        (WebCore::SearchPopupMenuDB::loadRecentSearches):
        (WebCore::SearchPopupMenuDB::checkDatabaseValidity): Use
        quick_check pragma to test database status.
        (WebCore::SearchPopupMenuDB::deleteAllDatabaseFiles):
        (WebCore::SearchPopupMenuDB::openDatabase):
        (WebCore::SearchPopupMenuDB::closeDatabase):
        (WebCore::SearchPopupMenuDB::verifySchemaVersion): Check
        schema version and update for schema changes.
        (WebCore::SearchPopupMenuDB::checkSQLiteReturnCode): Check
        for error codes that indicate database errors and remove and
        recreate the database.
        (WebCore::SearchPopupMenuDB::executeSimpleSql):
        (WebCore::SearchPopupMenuDB::createPreparedStatement):
        * platform/win/SearchPopupMenuDB.h: Added.
        * platform/win/SearchPopupMenuWin.cpp:
        (WebCore::SearchPopupMenuWin::enabled): Always enable support
        for search term popup
        (WebCore::SearchPopupMenuWin::saveRecentSearches): Switch from
        CF implementation to SQLite database implementation
        (WebCore::SearchPopupMenuWin::loadRecentSearches): Switch from
        CF implementation to SQLite database implementation
        (WebCore::autosaveKey): Deleted.

2018-10-19  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Add stubs for WebGPUSwapChain and WebGPURenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=190742

        Reviewed by Dean Jackson.

        Test: updated webgpu-enabled.html to check for WebGPURenderingContext.

        Implement support for creating a "webgpu" context from an HTML canvas.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/webgpu/WebGPURenderingContext.cpp: Added.
        (WebCore::WebGPURenderingContext::create):
        (WebCore::WebGPURenderingContext::WebGPURenderingContext):
        * Modules/webgpu/WebGPURenderingContext.h: Added.
        * Modules/webgpu/WebGPURenderingContext.idl: Added.
        * Modules/webgpu/WebGPUSwapChain.cpp: Added.
        (WebCore::WebGPUSwapChain::configure):
        (WebCore::WebGPUSwapChain::present):
        (WebCore::WebGPUSwapChain::reshape):
        (WebCore::WebGPUSwapChain::markLayerComposited):
        * Modules/webgpu/WebGPUSwapChain.h: Added.
        (WebCore::WebGPUSwapChain::WebGPUSwapChain):
        * Modules/webgpu/WebGPUSwapChain.idl: Added.
        * Modules/webgpu/WebGPUSwapChainDescriptor.h: Added.
        * Modules/webgpu/WebGPUSwapChainDescriptor.idl: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/Document.cpp:
        (WebCore::Document::getCSSCanvasContext):
        * dom/Document.h:
        * dom/Document.idl:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::isWebGPUType):
        (WebCore::HTMLCanvasElement::createContextWebGPU):
        (WebCore::HTMLCanvasElement::getContextWebGPU):
        * html/HTMLCanvasElement.h:
        * html/HTMLCanvasElement.idl:
        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::isWebGPU const):

2018-10-19  John Wilander  <wilander@apple.com>

        Only cap lifetime of persistent cookies created client-side through document.cookie when resource load statistics is enabled
        https://bugs.webkit.org/show_bug.cgi?id=190687
        <rdar://problem/45349024>

        Reviewed by Alex Christensen.

        Test: http/tests/resourceLoadStatistics/capped-lifetime-for-cookie-set-in-js.html

        NetworkStorageSession::setCookiesFromDOM() now consults the new
        m_shouldCapLifetimeForClientSideCookies member variable before
        capping the lifetime of cookies.

        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::toString const):
        (WebCore::ResourceLoadStatistics::merge):
            Removal of the isMarkedForCookieBlocking member.
        * loader/ResourceLoadStatistics.h:
            Removal of the isMarkedForCookieBlocking member.
        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::setShouldCapLifetimeForClientSideCookies):
        (WebCore::NetworkStorageSession::setPrevalentDomainsToBlockCookiesFor):
            No longer takes the boolean clearFirst parameter and now always clears first.
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::filterCookies):
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):

2018-10-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] RenderReplaced renderer should create InlineBox
        https://bugs.webkit.org/show_bug.cgi?id=190720

        Reviewed by Antti Koivisto.

        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createSubTree):

2018-10-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Inline replaced width should default to 300px only if width is auto.
        https://bugs.webkit.org/show_bug.cgi?id=190722

        Reviewed by Antti Koivisto.

        See #5

        // 5. Otherwise, if 'width' has a computed value of 'auto', but none of the conditions above are met, then the used value of 'width' becomes 300px.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):

2018-10-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add inline runs to showLayoutTree
        https://bugs.webkit.org/show_bug.cgi?id=190718

        Reviewed by Antti Koivisto.

        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::outputInlineRuns):
        (WebCore::Layout::outputLayoutBox):
        (WebCore::Layout::outputLayoutTree):

2018-10-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Remove the previous version of inline content handling.
        https://bugs.webkit.org/show_bug.cgi?id=190716

        Reviewed by Antti Koivisto.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/Verification.cpp:
        (WebCore::Layout::areEssentiallyEqual):
        (WebCore::Layout::outputMismatchingSimpleLineInformationIfNeeded):
        (WebCore::Layout::outputMismatchingComplexLineInformationIfNeeded):
        * layout/inlineformatting/InlineFormattingState.h:
        (WebCore::Layout::InlineFormattingState::inlineContent):
        (WebCore::Layout::InlineFormattingState::addLayoutRuns): Deleted.
        (WebCore::Layout::InlineFormattingState::layoutRuns const): Deleted.
        * layout/inlineformatting/text/TextUtil.cpp: Renamed from Source/WebCore/layout/inlineformatting/textlayout/TextUtil.cpp.
        (WebCore::Layout::TextUtil::TextUtil):
        (WebCore::Layout::TextUtil::width const):
        (WebCore::Layout::TextUtil::hyphenPositionBefore const):
        (WebCore::Layout::TextUtil::textWidth const):
        (WebCore::Layout::TextUtil::fixedPitchWidth const):
        * layout/inlineformatting/text/TextUtil.h: Renamed from Source/WebCore/layout/inlineformatting/textlayout/TextUtil.h.
        * layout/inlineformatting/textlayout/Runs.h: Removed.
        * layout/inlineformatting/textlayout/TextContentProvider.cpp: Removed.
        * layout/inlineformatting/textlayout/TextContentProvider.h: Removed.
        * layout/inlineformatting/textlayout/simple/SimpleLineBreaker.cpp: Removed.
        * layout/inlineformatting/textlayout/simple/SimpleLineBreaker.h: Removed.
        * layout/inlineformatting/textlayout/simple/SimpleTextRunGenerator.cpp: Removed.
        * layout/inlineformatting/textlayout/simple/SimpleTextRunGenerator.h: Removed.

2018-10-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add generic inline content handling.
        https://bugs.webkit.org/show_bug.cgi?id=190713

        Reviewed by Antti Koivisto.

        layoutInlineContent turns InlineLineBreaker::Run objects into final inline runs by
        resolving heading/trailing whitespace, aligment, expansion opportunities etc.
        These inline runs are input to the display tree construction.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/displaytree/DisplayBox.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        (WebCore::Layout::trimLeadingRun):
        (WebCore::Layout::InlineFormattingContext::layoutInlineContent const):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndHeight const):
        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::Line::hasContent const):
        (WebCore::Layout::InlineFormattingContext::Line::contentLogicalLeft const):
        (WebCore::Layout::InlineFormattingContext::Line::availableWidth const):
        * layout/inlineformatting/InlineFormattingState.h:
        (WebCore::Layout::InlineFormattingState::inlineRuns):
        (WebCore::Layout::InlineFormattingState::appendInlineRun):
        * layout/inlineformatting/InlineLineBreaker.cpp:
        (WebCore::Layout::InlineLineBreaker::nextRun):
        (WebCore::Layout::InlineLineBreaker::nextLayoutRun): Deleted.
        * layout/inlineformatting/InlineLineBreaker.h:
        * layout/inlineformatting/InlineRun.h: Added.
        (WebCore::Layout::InlineRun::logicalLeft const):
        (WebCore::Layout::InlineRun::logicalRight const):
        (WebCore::Layout::InlineRun::width const):
        (WebCore::Layout::InlineRun::setWidth):
        (WebCore::Layout::InlineRun::setLogicalRight):
        (WebCore::Layout::InlineRun::TextContext::position const):
        (WebCore::Layout::InlineRun::TextContext::length const):
        (WebCore::Layout::InlineRun::TextContext::setLength):
        (WebCore::Layout::InlineRun::textContext):
        (WebCore::Layout::InlineRun::inlineItem const):
        (WebCore::Layout::InlineRun::InlineRun):
        (WebCore::Layout::InlineRun::TextContext::TextContext):
        * layout/inlineformatting/Line.cpp: Added.
        (WebCore::Layout::InlineFormattingContext::Line::Line):
        (WebCore::Layout::InlineFormattingContext::Line::setConstraints):
        (WebCore::Layout::isNonCollapsedText):
        (WebCore::Layout::isTrimmableContent):
        (WebCore::Layout::InlineFormattingContext::Line::appendContent):
        (WebCore::Layout::InlineFormattingContext::Line::close):

2018-10-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add generic inline line breaker
        https://bugs.webkit.org/show_bug.cgi?id=190698

        Reviewed by Antti Koivisto.

        InlineLineBreaker takes the inline runs and applies the appropriate line breaking rules on them.
        InlineRunProvider::Run objects ->

            <foobar><image box><hello>< ><world>

        InlineLineBreaker::Run ->

            <foobar><image box><hello world>

        InlineLineBreaker::Run also contains information whether the run is at the beginning or at the end of the line.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/LayoutContext.h:
        (WebCore::Layout::LayoutContext::hasDisplayBox const):
        * layout/inlineformatting/InlineLineBreaker.cpp: Added.
        (WebCore::Layout::InlineLineBreaker::InlineLineBreaker):
        (WebCore::Layout::InlineLineBreaker::nextLayoutRun):
        (WebCore::Layout::InlineLineBreaker::isAtContentEnd const):
        (WebCore::Layout::InlineLineBreaker::lineBreakingBehavior):
        (WebCore::Layout::InlineLineBreaker::runWidth const):
        (WebCore::Layout::InlineLineBreaker::splitRun):
        (WebCore::Layout::InlineLineBreaker::adjustSplitPositionWithHyphenation const):
        * layout/inlineformatting/InlineLineBreaker.h: Added.
        * layout/inlineformatting/textlayout/TextUtil.cpp: Added.
        (WebCore::Layout::TextUtil::TextUtil):
        (WebCore::Layout::TextUtil::width const):
        (WebCore::Layout::TextUtil::hyphenPositionBefore const):
        (WebCore::Layout::TextUtil::textWidth const):
        (WebCore::Layout::TextUtil::fixedPitchWidth const):
        * layout/inlineformatting/textlayout/TextUtil.h: Added.
        * layout/layouttree/LayoutBox.cpp:

2018-10-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add generic inline run generator.
        https://bugs.webkit.org/show_bug.cgi?id=190696

        Reviewed by Antti Koivisto.

        InlineRunProvider turns the following inline content ->

            <span>foo<span>bar</span></span>
            <img src="broken.jpg"><span>hello world</span>

        into a set of runs ->

            <foobar><image box><hello>< ><world>

        Note that a text run can overlap multiple inline elements. InlineRunProvider::Run only stores a reference to
        the first inline element (continuous content can be accessed by iterating through the InlineContent ListHashSet).
        These runs are the input to the line breaking algoritm.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        * layout/inlineformatting/InlineFormattingState.h:
        (WebCore::Layout::InlineFormattingState::inlineContent):
        * layout/inlineformatting/InlineItem.h: Added.
        (WebCore::Layout::InlineItem::layoutBox const):
        (WebCore::Layout::InlineItem::style const):
        (WebCore::Layout::InlineItemHashFunctions::hash):
        (WebCore::Layout::InlineItemHashFunctions::equal):
        (WebCore::Layout::InlineItemHashTranslator::hash):
        (WebCore::Layout::InlineItemHashTranslator::equal):
        (WebCore::Layout::InlineItem::InlineItem):
        (WebCore::Layout::InlineItem::type const):
        (WebCore::Layout::InlineItem::textContent const):
        * layout/inlineformatting/InlineRunProvider.cpp: Added.
        (WebCore::Layout::InlineRunProvider::InlineRunProvider):
        (WebCore::Layout::InlineRunProvider::append):
        (WebCore::Layout::InlineRunProvider::insertBefore):
        (WebCore::Layout::InlineRunProvider::remove):
        (WebCore::Layout::isWhitespace):
        (WebCore::Layout::isSoftLineBreak):
        (WebCore::Layout::InlineRunProvider::isContinousContent):
        (WebCore::Layout::InlineRunProvider::processInlineTextItem):
        (WebCore::Layout::InlineRunProvider::moveToNextNonWhitespacePosition):
        (WebCore::Layout::InlineRunProvider::moveToNextBreakablePosition):
        * layout/inlineformatting/InlineRunProvider.h: Added.
        (WebCore::Layout::InlineRunProvider::Run::type const):
        (WebCore::Layout::InlineRunProvider::Run::isText const):
        (WebCore::Layout::InlineRunProvider::Run::isWhitespace const):
        (WebCore::Layout::InlineRunProvider::Run::isNonWhitespace const):
        (WebCore::Layout::InlineRunProvider::Run::isLineBreak const):
        (WebCore::Layout::InlineRunProvider::Run::isBox const):
        (WebCore::Layout::InlineRunProvider::Run::isFloat const):
        (WebCore::Layout::InlineRunProvider::Run::TextContext::start const):
        (WebCore::Layout::InlineRunProvider::Run::TextContext::length const):
        (WebCore::Layout::InlineRunProvider::Run::TextContext::isCollapsed const):
        (WebCore::Layout::InlineRunProvider::Run::TextContext::setStart):
        (WebCore::Layout::InlineRunProvider::Run::TextContext::setLength):
        (WebCore::Layout::InlineRunProvider::Run::textContext const):
        (WebCore::Layout::InlineRunProvider::Run::style const):
        (WebCore::Layout::InlineRunProvider::Run::inlineItem const):
        (WebCore::Layout::InlineRunProvider::runs const):
        (WebCore::Layout::InlineRunProvider::Run::createBoxRun):
        (WebCore::Layout::InlineRunProvider::Run::createFloatRun):
        (WebCore::Layout::InlineRunProvider::Run::createSoftLineBreakRun):
        (WebCore::Layout::InlineRunProvider::Run::createHardLineBreakRun):
        (WebCore::Layout::InlineRunProvider::Run::createWhitespaceRun):
        (WebCore::Layout::InlineRunProvider::Run::createNonWhitespaceRun):
        (WebCore::Layout::InlineRunProvider::Run::Run):
        (WebCore::Layout::InlineRunProvider::Run::TextContext::TextContext):
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::isLineBreakBox const):
        * layout/layouttree/LayoutInlineBox.cpp:
        (WebCore::Layout::InlineBox::InlineBox):
        * layout/layouttree/LayoutInlineBox.h:
        (WebCore::Layout::InlineBox::hasTextContent const):
        (WebCore::Layout::InlineBox::textContent const):
        * layout/layouttree/LayoutLineBreakBox.cpp: Copied from Source/WebCore/layout/layouttree/LayoutInlineBox.cpp.
        (WebCore::Layout::LineBreakBox::LineBreakBox):
        * layout/layouttree/LayoutLineBreakBox.h: Copied from Source/WebCore/layout/layouttree/LayoutInlineBox.cpp.

2018-10-19  Ali Juma  <ajuma@chromium.org>

        [IntersectionObserver] Handle zero-area intersections
        https://bugs.webkit.org/show_bug.cgi?id=189624

        Reviewed by Simon Fraser.

        Use edge-inclusive intersection when applying clips and intersecting with the
        root, so that two rects that touch each other are considered intersecting even
        if the area of their intersection is 0.

        Covered by rebased tests in imported/w3c/web-platform-tests/intersection-observer.

        * dom/Document.cpp:
        (WebCore::computeIntersectionState):
        (WebCore::Document::updateIntersectionObservations):
        (WebCore::computeIntersectionRects): Deleted.

2018-10-18  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Allow ports to optionally do screen capture in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=190728
        <rdar://problem/45376824>

        Reviewed by Jer Noble and Tim Horton.

        No new tests, covered by existing tests.

        * Sources.txt: Add RemoteVideoSample.cpp.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/MediaSample.h:
        (WebCore::MediaSample::videoPixelFormat const):

        * platform/graphics/RemoteVideoSample.cpp: Added.
        (WebCore::RemoteVideoSample::~RemoteVideoSample):
        (WebCore::RemoteVideoSample::create):
        (WebCore::RemoteVideoSample::RemoteVideoSample):
        (WebCore::RemoteVideoSample::surface):
        * platform/graphics/RemoteVideoSample.h: Added.
        (WebCore::RemoteVideoSample::time const):
        (WebCore::RemoteVideoSample::videoFormat const):
        (WebCore::RemoteVideoSample::size const):
        (WebCore::RemoteVideoSample::encode const):
        (WebCore::RemoteVideoSample::decode):
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h:
        * platform/graphics/cv/ImageTransferSessionVT.h:

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::remoteVideoSampleAvailable): Call observers.
        * platform/mediastream/RealtimeMediaSource.h:

        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::dispatchMediaSampleToObservers): Dispatch remote samples without
        resizing, resize local samples if necessary.
        * platform/mediastream/RealtimeVideoSource.h:

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::captureOutputDidOutputSampleBufferFromConnection): Don't resize
        samples, it will be done in the base class if necessary.

        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        (WebCore::DisplayCaptureSourceCocoa::emitFrame): Don't resize samples when running in the UI
        process, it will be done in the web process.

        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp: Remove unneeded include.

2018-10-18  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [CG] Adopt CG SPI for non-even cornered rounded rects
        https://bugs.webkit.org/show_bug.cgi?id=190155

        Reviewed by Simon Fraser.

        Instead of creating bezier curves for the non-even corners of the rounded
        rects, we should use the optimized SPI provided by CG.

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::platformAddPathForRoundedRect):

2018-10-18  Justin Michaud  <justin_michaud@apple.com>

        Add new image type for CSS painting API
        https://bugs.webkit.org/show_bug.cgi?id=190697

        Reviewed by Dean Jackson.

        Add a new image type for the CSS painting API, and hook it up so it can be drawn.
        For now, it uses a WebGL rendering context from OfflineCanvas because that was
        easy to hook up. The spec actually calls for a RenderingContext2D, which can be
        handled in another patch.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::image):
        (WebCore::CSSImageGeneratorValue::isFixedSize const):
        (WebCore::CSSImageGeneratorValue::fixedSize):
        (WebCore::CSSImageGeneratorValue::isPending const):
        (WebCore::CSSImageGeneratorValue::knownToBeOpaque const):
        (WebCore::CSSImageGeneratorValue::loadSubimages):
        * css/CSSPaintCallback.h:
        * css/CSSPaintCallback.idl:
        * css/CSSPaintImageValue.cpp:
        (WebCore::CSSPaintImageValue::image):
        * css/CSSPaintImageValue.h:
        * platform/graphics/CustomPaintImage.cpp: Added.
        (WebCore::CustomPaintImage::CustomPaintImage):
        (WebCore::CustomPaintImage::doCustomPaint):
        (WebCore::CustomPaintImage::draw):
        (WebCore::CustomPaintImage::drawPattern):
        * platform/graphics/CustomPaintImage.h: Copied from Source/WebCore/css/CSSPaintCallback.h.
        * platform/graphics/Image.h:
        (WebCore::Image::isCustomPaintImage const):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cairo/CairoOperations.cpp:

2018-10-18  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r237272.

        Broke on device iOS builds and Windows builds

        Reverted changeset:

        "[MediaStream] Allow ports to optionally do screen capture in
        the UI process"
        https://bugs.webkit.org/show_bug.cgi?id=190728
        https://trac.webkit.org/changeset/237272

2018-10-18  Jer Noble  <jer.noble@apple.com>

        [MSE] timestampOffset can introduce floating-point rounding errors to incoming samples
        https://bugs.webkit.org/show_bug.cgi?id=190590
        <rdar://problem/45275626>

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-timestampoffset-rounding-error.html

        SourceBuffer.timestampOffset is a double property, which, when added to a MediaTime will
        result in a double-backed MediaTime as PTS & DTS. This can introduce rounding errors when
        these samples are appended as overlapping existing samples. Rather than converting a MediaTime
        to double-backed when adding the timestampOffset, convert the offset to a multiple of the
        sample's timeBase.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::setTimestampOffset):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):

2018-10-18  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Allow ports to optionally do screen capture in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=190728
        <rdar://problem/45376824>

        Reviewed by Jer Noble and Tim Horton.

        No new tests, covered by existing tests.

        * Sources.txt: Add RemoteVideoSample.cpp.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/MediaSample.h:
        (WebCore::MediaSample::videoPixelFormat const):

        * platform/graphics/RemoteVideoSample.cpp: Added.
        (WebCore::RemoteVideoSample::~RemoteVideoSample):
        (WebCore::RemoteVideoSample::create):
        (WebCore::RemoteVideoSample::RemoteVideoSample):
        (WebCore::RemoteVideoSample::surface):
        * platform/graphics/RemoteVideoSample.h: Added.
        (WebCore::RemoteVideoSample::time const):
        (WebCore::RemoteVideoSample::videoFormat const):
        (WebCore::RemoteVideoSample::size const):
        (WebCore::RemoteVideoSample::encode const):
        (WebCore::RemoteVideoSample::decode):
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h:
        * platform/graphics/cv/ImageTransferSessionVT.h:

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::remoteVideoSampleAvailable): Call observers.
        * platform/mediastream/RealtimeMediaSource.h:

        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::dispatchMediaSampleToObservers): Dispatch remote samples without
        resizing, resize local samples if necessary.
        * platform/mediastream/RealtimeVideoSource.h:

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::captureOutputDidOutputSampleBufferFromConnection): Don't resize
        samples, it will be done in the base class if necessary.

        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        (WebCore::DisplayCaptureSourceCocoa::emitFrame): Don't resize samples when running in the UI
        process, it will be done in the web process.

        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp: Remove unneeded include.

2018-10-18  Jer Noble  <jer.noble@apple.com>

        Safari is not able to adapt between H264 streams with EditList and without EditList
        https://bugs.webkit.org/show_bug.cgi?id=190638
        <rdar://problem/45342208>

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-append-overlapping-dts.html

        The MSE frame replacement algorithm does not take decode timestamps into account; this can
        lead to situations where the replacement algorithm may leave in place frames where the 
        presentationTimestamp is less than the replacement frame, but whose decodeTimestamp is
        after the replacement frame. When re-enqueuing these frames, they may cause a decode error
        if they break the group-of-pictures sequence of the replaced range.

        * Modules/mediasource/SampleMap.cpp:
        (WebCore::DecodeOrderSampleMap::findSamplesBetweenDecodeKeys):
        * Modules/mediasource/SampleMap.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):

2018-10-18  Per Arne Vollan  <pvollan@apple.com>

        [WebVTT] Region parameter and value should be separated by ':'
        https://bugs.webkit.org/show_bug.cgi?id=190735

        Reviewed by Eric Carlson.

        This is specified in https://w3c.github.io/webvtt/#region-settings.

        No new tests. Modified existing tests.

        * html/track/VTTRegion.cpp:
        (WebCore::VTTRegion::setRegionSettings):

2018-10-18  Jer Noble  <jer.noble@apple.com>

        Add support for MediaKeyEncryptionScheme
        https://bugs.webkit.org/show_bug.cgi?id=190173

        Reviewed by Eric Carlson.

        Added sub-tests to: media/encrypted-media/mock-navigator-requestMediaKeySystemAccess.html

        Add support for the MediaKeyEncryptionScheme extension to EME, as detailed here:
        <https://github.com/WICG/encrypted-media-encryption-scheme/blob/master/explainer.md>

        As the strings "cenc" and "cbcs" are explicitly lower-case, add support to the bindings generator to keep
        those strings as lower-case when converting from IDL.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/encryptedmedia/MediaKeyEncryptionScheme.h:
        * Modules/encryptedmedia/MediaKeyEncryptionScheme.idl:
        * Modules/encryptedmedia/MediaKeySystemMediaCapability.h:
        * Modules/encryptedmedia/MediaKeySystemMediaCapability.idl:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGenerator.pm:
        (WK_ucfirst):
        * platform/encryptedmedia/CDMEncryptionScheme.h: Copied from Source/WebCore/testing/MockCDMFactory.idl.
        * platform/encryptedmedia/CDMMediaCapability.h:
        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        (WebCore::CDMPrivateFairPlayStreaming::supportsConfiguration const):
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::supportsMediaCapability):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::initializeWithConfiguration):
        * testing/MockCDMFactory.cpp:
        (WebCore::m_supportedEncryptionSchemes):
        (WebCore::MockCDM::supportsConfiguration const):
        * testing/MockCDMFactory.h:
        (WebCore::MockCDMFactory::supportedEncryptionSchemes const):
        (WebCore::MockCDMFactory::setSupportedEncryptionSchemes):
        * testing/MockCDMFactory.idl:

2018-10-18  Alexey Proskuryakov  <ap@apple.com>

        Switch from PLATFORM(IOS) to PLATFORM(IOS_FAMILY)
        https://bugs.webkit.org/show_bug.cgi?id=190729

        Reviewed by Tim Horton.

        * DerivedSources.make:
        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
        (WebCore::subLocality):
        (WebCore::setSubLocality):
        (WebCore::subAdministrativeArea):
        (WebCore::setSubAdministrativeArea):
        * Modules/encryptedmedia/legacy/LegacyCDMPrivateMediaPlayer.cpp:
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::isRequestFromIBooks):
        * Modules/geolocation/GeolocationPosition.h:
        * Modules/geolocation/NavigatorGeolocation.cpp:
        * Modules/geolocation/NavigatorGeolocation.h:
        * Modules/geolocation/ios/GeolocationPositionIOS.mm:
        * Modules/mediasession/WebMediaSessionManager.cpp:
        * Modules/mediasession/WebMediaSessionManager.h:
        * Modules/mediastream/MediaDevicesRequest.cpp:
        (WebCore::MediaDevicesRequest::filterDeviceList):
        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::JSQuickTimePluginReplacement::timedMetaData const):
        (WebCore::JSQuickTimePluginReplacement::accessLog const):
        (WebCore::JSQuickTimePluginReplacement::errorLog const):
        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::SpeechSynthesis):
        (WebCore::SpeechSynthesis::speak):
        * Modules/speech/SpeechSynthesis.h:
        * Modules/webaudio/AudioContext.cpp:
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::performOpenAndVerify):
        * Modules/webdatabase/DatabaseContext.h:
        * Modules/webdatabase/DatabaseManagerClient.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        * Modules/webdatabase/DatabaseTracker.h:
        * WebCorePrefix.h:
        * accessibility/AXObjectCache.cpp:
        (WebCore::createFromRenderer):
        * accessibility/AccessibilityMediaObject.cpp:
        * accessibility/AccessibilityMediaObject.h:
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::press):
        (WebCore::AccessibilityMenuList::isCollapsed const):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isAccessibilityObjectSearchMatchAtIndex):
        (WebCore::AccessibilityObject::press):
        (WebCore::AccessibilityObject::actionVerb const):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::stringValue const):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::actionVerb const):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::computeAccessibilityIsIgnored const):
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::computeAccessibilityIsIgnored const):
        * accessibility/ios/AXObjectCacheIOS.mm:
        * accessibility/ios/AccessibilityObjectIOS.mm:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        * bindings/js/CommonVM.cpp:
        (WebCore::commonVMSlow):
        * bindings/js/JSCallbackData.h:
        (WebCore::JSCallbackData::~JSCallbackData):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::shouldInterruptScriptBeforeTimeout):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::initializeThreading):
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::fieldNamed const):
        * crypto/CommonCryptoUtilities.h:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        * crypto/mac/SerializedCryptoKeyWrapMac.mm:
        (WebCore::masterKeyAccountNameForCurrentApplication):
        (WebCore::createAndStoreMasterKey):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSProperties.json:
        * css/CSSStyleDeclaration.cpp:
        * css/CSSValueKeywords.in:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::prefersReducedMotionEvaluate):
        * css/StyleBuilderConverter.h:
        * css/html.css:
        (video):
        (input, textarea, keygen, select, button):
        (#if defined(WTF_PLATFORM_IOS_FAMILY) && WTF_PLATFORM_IOS_FAMILY):
        (#if defined(ENABLE_INPUT_TYPE_DATE) && ENABLE_INPUT_TYPE_DATE):
        (#endif):
        (#if defined(ENABLE_DATALIST_ELEMENT) && ENABLE_DATALIST_ELEMENT):
        (textarea):
        (input:matches([type="radio"], [type="checkbox"])):
        (input:matches([type="button"], [type="submit"], [type="reset"]), input[type="file"]::-webkit-file-upload-button, button):
        (input[type="range"]::-webkit-slider-thumb, input[type="range"]::-webkit-media-slider-thumb):
        (#if !(defined(WTF_PLATFORM_IOS_FAMILY) && WTF_PLATFORM_IOS_FAMILY)):
        (input[type="checkbox"]):
        (#endif // defined(ENABLE_INPUT_TYPE_COLOR) && ENABLE_INPUT_TYPE_COLOR):
        (#if defined(WTF_PLATFORM_IOS) && WTF_PLATFORM_IOS): Deleted.
        (#if !(defined(WTF_PLATFORM_IOS) && WTF_PLATFORM_IOS)): Deleted.
        * css/parser/CSSParserContext.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::cssPropertyID):
        (WebCore::CSSPropertyParser::parseSingleValue):
        * css/parser/CSSPropertyParser.h:
        * css/svg.css:
        (#if defined(WTF_PLATFORM_IOS_FAMILY) && WTF_PLATFORM_IOS_FAMILY):
        (#if defined(WTF_PLATFORM_IOS) && WTF_PLATFORM_IOS): Deleted.
        * dom/DeviceMotionController.cpp:
        * dom/DeviceMotionController.h:
        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::DeviceOrientationController):
        * dom/DeviceOrientationController.h:
        * dom/DeviceOrientationData.cpp:
        * dom/DeviceOrientationData.h:
        * dom/DeviceOrientationEvent.cpp:
        * dom/DeviceOrientationEvent.h:
        * dom/DeviceOrientationEvent.idl:
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::suspendDeviceMotionAndOrientationUpdates):
        (WebCore::Document::resumeDeviceMotionAndOrientationUpdates):
        (WebCore::Document::platformSuspendOrStopActiveDOMObjects):
        * dom/Document.h:
        * dom/DocumentMarker.h:
        (WebCore::DocumentMarker::allMarkers):
        * dom/DocumentMarkerController.cpp:
        (WebCore::shouldInsertAsSeparateMarker):
        (WebCore::DocumentMarkerController::shiftMarkers):
        * dom/DocumentMarkerController.h:
        * dom/Element.cpp:
        (WebCore::Element::focus):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::willBeDeletedFrom):
        (WebCore::Node::moveNodeToNewDocument):
        (WebCore::tryAddEventListener):
        (WebCore::tryRemoveEventListener):
        (WebCore::Node::defaultEventHandler):
        (WebCore::Node::willRespondToMouseMoveEvents):
        (WebCore::Node::willRespondToMouseClickEvents):
        * dom/Range.cpp:
        * dom/Range.h:
        * dom/TreeScope.cpp:
        (WebCore::absolutePointIfNotClipped):
        * dom/ViewportArguments.cpp:
        (WebCore::setViewportFeature):
        * dom/ViewportArguments.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::unapply):
        (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/Editor.cpp:
        (WebCore::TemporarySelectionChange::TemporarySelectionChange):
        (WebCore::TemporarySelectionChange::~TemporarySelectionChange):
        (WebCore::Editor::handleTextEvent):
        (WebCore::Editor::Editor):
        (WebCore::Editor::clear):
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::setBaseWritingDirection):
        (WebCore::Editor::setComposition):
        (WebCore::Editor::showSpellingGuessPanel):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markMisspellingsOrBadGrammar):
        (WebCore::Editor::changeBackToReplacedString):
        (WebCore::Editor::updateMarkersForWordsAffectedByEditing):
        (WebCore::Editor::revealSelectionAfterEditingOperation):
        (WebCore::Editor::setIgnoreSelectionChanges):
        (WebCore::Editor::changeSelectionAfterCommand):
        (WebCore::Editor::shouldChangeSelection const):
        (WebCore::Editor::respondToChangedSelection):
        (WebCore::Editor::editorUIUpdateTimerFired):
        (WebCore::Editor::resolveTextCheckingTypeMask):
        * editing/Editor.h:
        * editing/FontAttributes.h:
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::FrameSelection):
        (WebCore::FrameSelection::updateDataDetectorsForSelection):
        (WebCore::FrameSelection::setSelectedRange):
        (WebCore::FrameSelection::updateAppearance):
        (WebCore::FrameSelection::shouldDeleteSelection const):
        (WebCore::FrameSelection::revealSelection):
        (WebCore::FrameSelection::setSelectionFromNone):
        (WebCore::FrameSelection::shouldChangeSelection const):
        * editing/FrameSelection.h:
        * editing/InsertIntoTextNodeCommand.cpp:
        * editing/InsertIntoTextNodeCommand.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::markMisspellingsAfterTyping):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * editing/TypingCommand.h:
        * editing/cocoa/DataDetection.h:
        * editing/cocoa/DataDetection.mm:
        * editing/cocoa/FontAttributesCocoa.mm:
        * editing/cocoa/FontShadowCocoa.mm:
        (WebCore::FontShadow::createShadow const):
        * editing/cocoa/HTMLConverter.h:
        * editing/cocoa/HTMLConverter.mm:
        (_fontForNameAndSize):
        (_shadowForShadowStyle):
        (HTMLConverter::computedAttributesForElement):
        (HTMLConverter::_addAttachmentForElement):
        (HTMLConverter::_processMetaElementWithName):
        (HTMLConverter::_processElement):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::attributesForAttributedStringConversion):
        (WebCore::WebContentReader::readURL):
        * editing/ios/DictationCommandIOS.cpp:
        * editing/ios/DictationCommandIOS.h:
        * editing/ios/EditorIOS.mm:
        * editing/mac/FrameSelectionMac.mm:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * fileapi/FileCocoa.mm:
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        (WebCore::CachedFrame::CachedFrame):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        * history/HistoryItem.h:
        * history/PageCache.cpp:
        (WebCore::canCachePage):
        * html/BaseDateAndTimeInputType.cpp:
        * html/BaseDateAndTimeInputType.h:
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::isKeyboardFocusable const):
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::updateWidget):
        * html/HTMLAttachmentElement.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::maxActivePixelMemory):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::collectStyleForPresentationAttribute):
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.cpp:
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        * html/HTMLInputElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::finishInitialization):
        (WebCore::HTMLMediaElement::registerWithDocument):
        (WebCore::HTMLMediaElement::unregisterWithDocument):
        (WebCore::HTMLMediaElement::setVolume):
        (WebCore::HTMLMediaElement::nextScanRate):
        (WebCore::HTMLMediaElement::sourceWasAdded):
        (WebCore::HTMLMediaElement::mediaEngineWasUpdated):
        (WebCore::HTMLMediaElement::updateVolume):
        (WebCore::HTMLMediaElement::userCancelledLoad):
        (WebCore::HTMLMediaElement::mediaSessionTitle const):
        (WebCore::HTMLMediaElement::purgeBufferedDataIfPossible):
        * html/HTMLMediaElement.h:
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::process):
        * html/HTMLObjectElement.cpp:
        * html/HTMLPlugInElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::usesMenuList const):
        (WebCore::HTMLSelectElement::createElementRenderer):
        (WebCore::HTMLSelectElement::childShouldCreateRenderer const):
        (WebCore::HTMLSelectElement::willRespondToMouseClickEvents):
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        (WebCore::HTMLSelectElement::scrollToSelection):
        (WebCore::HTMLSelectElement::setOptionsChangedOnRenderer):
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        (WebCore::HTMLSelectElement::defaultEventHandler):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::createInnerTextStyle):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::select):
        (WebCore::HTMLTextFormControlElement::adjustInnerTextStyle const):
        * html/HTMLTextFormControlElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::parseAttribute):
        (WebCore::HTMLVideoElement::supportsFullscreen const):
        * html/HTMLVideoElement.h:
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::ImageDocument):
        (WebCore::ImageDocument::createDocumentStructure):
        (WebCore::ImageDocument::imageUpdated):
        * html/ImageDocument.h:
        * html/InputType.cpp:
        * html/InputType.h:
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::clientDataBufferingTimerFired):
        (WebCore::MediaElementSession::showPlaybackTargetPicker):
        (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled const):
        (WebCore::MediaElementSession::setHasPlaybackTargetAvailabilityListeners):
        (WebCore::MediaElementSession::isPlayingToWirelessPlaybackTarget const):
        (WebCore::MediaElementSession::requiresFullscreenForVideoPlayback const):
        * html/MediaElementSession.h:
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleTouchEvent):
        * html/RangeInputType.h:
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::addSearchResult):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::isKeyboardFocusable const):
        (WebCore::TextFieldInputType::handleFocusEvent):
        (WebCore::TextFieldInputType::handleBlurEvent):
        (WebCore::TextFieldInputType::didSetValueByUserEdit):
        (WebCore::TextFieldInputType::listAttributeTargetChanged):
        * html/parser/HTMLParserScheduler.h:
        (WebCore::HTMLParserScheduler::shouldYieldBeforeToken):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processCharacterBufferForInBody):
        * html/parser/HTMLTreeBuilder.h:
        * html/shadow/MediaControlElements.cpp:
        * html/shadow/MediaControlElements.h:
        * html/shadow/MediaControls.h:
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::dragFrom):
        * html/shadow/SliderThumbElement.h:
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldResultsButtonElement::defaultEventHandler):
        (WebCore::SearchFieldCancelButtonElement::SearchFieldCancelButtonElement):
        * html/shadow/TextControlInnerElements.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setIndicating):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::platform):
        * inspector/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::runEventLoopWhilePaused):
        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::currentRunLoop):
        * loader/DocumentLoader.cpp:
        * loader/DocumentLoader.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequest):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDocument):
        * loader/EmptyClients.cpp:
        * loader/EmptyClients.h:
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkCompleted):
        (WebCore::FrameLoader::willLoadMediaElementURL):
        (WebCore::FrameLoader::stopForUserCancel):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::didFirstLayout):
        (WebCore::createWindow):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::saveScrollPositionAndViewStateToItem):
        (WebCore::HistoryController::restoreScrollPositionAndViewState):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init):
        (WebCore::ResourceLoader::willSendRequestInternal):
        * loader/ResourceLoader.h:
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadPlugin):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        (WebCore::SubresourceLoader::willCancel):
        (WebCore::SubresourceLoader::notifyDone):
        (WebCore::SubresourceLoader::releaseResources):
        * loader/SubresourceLoader.h:
        * loader/cache/CachedImage.cpp:
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::userCaptionPreferencesChangedNotificationCallback):
        * page/Chrome.cpp:
        (WebCore::Chrome::createColorChooser):
        (WebCore::Chrome::dispatchViewportPropertiesDidChange const):
        (WebCore::Chrome::didReceiveDocType):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::fired):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::outerHeight const):
        (WebCore::DOMWindow::outerWidth const):
        (WebCore::DOMWindow::clearTimeout):
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::resetAllGeolocationPermission):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):
        * page/DOMWindow.h:
        * page/DeprecatedGlobalSettings.cpp:
        (WebCore::DeprecatedGlobalSettings::globalConstRedeclarationShouldThrow):
        * page/DeprecatedGlobalSettings.h:
        * page/DragController.cpp:
        * page/EditorClient.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::startPanScrolling):
        (WebCore::EventHandler::handleMouseMoveEvent):
        * page/EventHandler.h:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::willDetachPage):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::clear):
        (WebCore::FrameView::effectiveFrameFlattening const):
        (WebCore::FrameView::flushCompositingStateForThisFrame):
        (WebCore::FrameView::scrollPositionRespectingCustomFixedPosition const):
        (WebCore::FrameView::viewportConstrainedVisibleContentRect const):
        (WebCore::FrameView::updateContentsSize):
        (WebCore::FrameView::computeScrollability const):
        (WebCore::FrameView::adjustTiledBackingCoverage):
        (WebCore::FrameView::calculateExtendedBackgroundMode const):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::sizeForResizeEvent const):
        (WebCore::FrameView::sendResizeEventIfNeeded):
        * page/FrameView.h:
        * page/FrameViewLayoutContext.cpp:
        (WebCore::FrameViewLayoutContext::layout):
        * page/MemoryRelease.cpp:
        (WebCore::releaseCriticalMemory):
        (WebCore::releaseMemory):
        * page/Navigator.cpp:
        * page/Navigator.h:
        * page/NavigatorBase.cpp:
        * page/Page.cpp:
        (WebCore::Page::setIsVisibleInternal):
        (WebCore::Page::showPlaybackTargetPicker):
        * page/Page.h:
        * page/PerformanceMonitor.cpp:
        (WebCore::PerformanceMonitor::measurePostLoadMemoryUsage):
        * page/ResourceUsageOverlay.cpp:
        (WebCore::ResourceUsageOverlay::initialize):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canDisplay const):
        * page/SettingsBase.cpp:
        * page/SettingsBase.h:
        * page/SettingsDefaultValues.h:
        (WebCore::editingBehaviorTypeForPlatform):
        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange):
        (WebCore::initializeIndicator):
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::textDocumentParameters):
        * page/cocoa/MemoryReleaseCocoa.mm:
        (WebCore::platformReleaseMemory):
        (WebCore::jettisonExpensiveObjectsOnTopLevelNavigation):
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::showText):
        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::vmPageSize):
        * page/cocoa/SettingsBaseCocoa.mm:
        * page/ios/EventHandlerIOS.mm:
        * page/ios/FrameIOS.mm:
        * page/mac/ChromeMac.mm:
        * page/mac/PageMac.mm:
        (WebCore::Page::platformInitialize):
        * page/mac/WebCoreFrameView.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::reconcileScrollingState):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ScrollingTreeScrollingNodeDelegate.cpp:
        * page/scrolling/ScrollingTreeScrollingNodeDelegate.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.mm:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm:
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * platform/ContentFilterUnblockHandler.h:
        * platform/Cursor.cpp:
        * platform/Cursor.h:
        * platform/DragImage.cpp:
        * platform/DragImage.h:
        * platform/FileChooser.cpp:
        * platform/FileChooser.h:
        * platform/HostWindow.h:
        * platform/LocalizedStrings.cpp:
        * platform/LocalizedStrings.h:
        * platform/LowPowerModeNotifier.cpp:
        * platform/LowPowerModeNotifier.h:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedNonImageMimeTypes):
        (WebCore::initializeUnsupportedTextMIMETypes):
        * platform/Pasteboard.h:
        * platform/PasteboardStrategy.h:
        * platform/PlatformKeyboardEvent.h:
        * platform/PlatformPasteboard.h:
        * platform/PlatformScreen.h:
        * platform/RemoteCommandListener.cpp:
        * platform/RuntimeApplicationChecks.h:
        * platform/ScrollAnimator.cpp:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::contentsScrollPosition const):
        (WebCore::ScrollView::setContentsScrollPosition):
        (WebCore::ScrollView::visibleContentRectInternal const):
        * platform/ScrollView.h:
        * platform/ScrollableArea.cpp:
        * platform/ScrollableArea.h:
        * platform/Scrollbar.cpp:
        * platform/Scrollbar.h:
        * platform/ThreadTimers.cpp:
        * platform/Timer.cpp:
        (WebCore::shouldSuppressThreadSafetyCheck):
        * platform/Timer.h:
        (WebCore::TimerBase::isActive const):
        * platform/ValidationBubble.h:
        * platform/Widget.h:
        * platform/audio/AudioHardwareListener.cpp:
        (WebCore::AudioHardwareListener::AudioHardwareListener):
        * platform/audio/PlatformMediaSession.h:
        * platform/audio/PlatformMediaSessionManager.h:
        * platform/audio/ios/AudioDestinationIOS.cpp:
        * platform/audio/ios/AudioDestinationIOS.h:
        * platform/audio/ios/AudioFileReaderIOS.cpp:
        * platform/audio/ios/AudioFileReaderIOS.h:
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::setCategory):
        (WebCore::AudioSession::routingContextUID const):
        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        * platform/cf/MainThreadSharedTimerCF.cpp:
        (WebCore::setupPowerObserver):
        (WebCore::MainThreadSharedTimer::setFireInterval):
        * platform/cf/URLCF.cpp:
        * platform/cocoa/ContentFilterUnblockHandlerCocoa.mm:
        (WebCore::ContentFilterUnblockHandler::wrapWithDecisionHandler):
        (WebCore::ContentFilterUnblockHandler::needsUIProcess const):
        (WebCore::ContentFilterUnblockHandler::encode const):
        (WebCore::ContentFilterUnblockHandler::decode):
        (WebCore::ContentFilterUnblockHandler::canHandleRequest const):
        (WebCore::dispatchToMainThread):
        (WebCore::ContentFilterUnblockHandler::requestUnblockAsync const):
        * platform/cocoa/DataDetectorsCoreSoftLink.h:
        * platform/cocoa/DataDetectorsCoreSoftLink.mm:
        * platform/cocoa/KeyEventCocoa.mm:
        * platform/cocoa/LocalizedStringsCocoa.mm:
        (WebCore::localizedNSString):
        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::initialize):
        * platform/cocoa/ParentalControlsContentFilter.mm:
        (WebCore::ParentalControlsContentFilter::unblockHandler const):
        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::Pasteboard::fileContentState):
        * platform/cocoa/PlatformView.h:
        * platform/cocoa/PlaybackSessionInterface.h:
        * platform/cocoa/PlaybackSessionModel.h:
        * platform/cocoa/PlaybackSessionModelMediaElement.h:
        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        * platform/cocoa/SystemVersion.mm:
        (WebCore::createSystemMarketingVersion):
        * platform/cocoa/VideoFullscreenChangeObserver.h:
        * platform/cocoa/VideoFullscreenModel.h:
        * platform/cocoa/VideoFullscreenModelVideoElement.h:
        * platform/cocoa/VideoFullscreenModelVideoElement.mm:
        * platform/gamepad/cocoa/GameControllerGamepad.h:
        * platform/gamepad/cocoa/GameControllerGamepad.mm:
        * platform/gamepad/cocoa/GameControllerGamepadProvider.h:
        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Color.h:
        * platform/graphics/ComplexTextController.cpp:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::createDefaultDisplayRefreshMonitor):
        * platform/graphics/FloatSize.h:
        * platform/graphics/Font.cpp:
        (WebCore::Font::Font):
        (WebCore::createAndFillGlyphPage):
        * platform/graphics/Font.h:
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::getCachedFontPlatformData):
        (WebCore::FontCache::fontForPlatformData):
        (WebCore::FontCache::purgeInactiveFontData):
        (WebCore::FontCache::inactiveFontCount):
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::FontCascade):
        * platform/graphics/FontCascadeFonts.h:
        * platform/graphics/FontDescription.h:
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::isEmoji const):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/Icon.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        (WebCore::Image::computeIntrinsicDimensions):
        * platform/graphics/Image.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::isAvailable):
        (WebCore::MediaPlayer::volumeChanged):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/NamedImageGeneratedImage.cpp:
        (WebCore::NamedImageGeneratedImage::draw):
        * platform/graphics/StringTruncator.cpp:
        (WebCore::centerTruncateToBuffer):
        (WebCore::rightTruncateToBuffer):
        (WebCore::rightClipToWordBuffer):
        * platform/graphics/TextTrackRepresentation.cpp:
        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp:
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:
        * platform/graphics/avfoundation/MediaPlaybackTargetMac.mm:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::supportsFullscreen const):
        (WebCore::MediaPlayerPrivateAVFoundation::rateChanged):
        * platform/graphics/avfoundation/WebMediaSessionManagerMac.cpp:
        * platform/graphics/avfoundation/WebMediaSessionManagerMac.h:
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateLegacyAVCF.cpp:
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateLegacyAVCF.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::supportsPersistentKeys):
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.h:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenMode):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVolume):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesLastModifiedTime const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::liveUpdateInterval const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::maximumDurationToCacheMediaTime const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::didPassCORSAccessCheck const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wouldTaintOrigin const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isCurrentPlaybackTargetWireless const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetType const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetName const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateDisableExternalPlayback):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldDisableSleep):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::supportsPictureInPicture const):
        * platform/graphics/avfoundation/objc/OutOfBandTextTrackPrivateAVF.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::flushCompositingState):
        (WebCore::GraphicsLayerCA::computeVisibleAndCoverageRect const):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::~TileController):
        (WebCore::TileController::adjustTileCoverageRect const):
        * platform/graphics/ca/TileController.h:
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::startedNewCohort):
        (WebCore::TileGrid::platformCALayerPaintContents):
        * platform/graphics/ca/TileGrid.h:
        * platform/graphics/ca/cocoa/LayerFlushSchedulerMac.cpp:
        (WebCore::currentRunLoop):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (-[WebAnimationDelegate animationDidStart:]):
        (-[WebAnimationDelegate animationDidStop:finished:]):
        (WebCore::PlatformCALayerCocoa::setContentsScale):
        (WebCore::layerContentsFormat):
        (WebCore::PlatformCALayer::drawLayerContents):
        (WebCore::PlatformCALayerCocoa::backingStoreBytesPerPixel const):
        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::paint):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::displayP3ColorSpaceRef):
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::drawPatternCallback):
        (WebCore::GraphicsContext::drawPattern):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::applyShadowOffsetWorkaroundIfNeeded):
        (WebCore::GraphicsContext::setURLForRect):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::jpegUTI):
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoderCG::createFrameImageAtIndex):
        * platform/graphics/cg/ImageSourceCGMac.mm:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        * platform/graphics/cocoa/ColorCocoa.h:
        * platform/graphics/cocoa/ColorCocoa.mm:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::similarFont):
        (WebCore::computeNecessarySynthesis):
        (WebCore::FontDatabase::fontForPostScriptName):
        (WebCore::variationCapabilitiesForFontDescriptor):
        (WebCore::lookupFallbackFont):
        (WebCore::FontCache::systemFallbackForCharacters):
        (WebCore::FontCache::lastResortFallbackFont):
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::drawGlyphs):
        (WebCore::FontCascade::fontForCombiningCharacterSequence const):
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformInit):
        (WebCore::Font::variantCapsSupportsCharacterForSynthesis const):
        (WebCore::Font::determinePitch):
        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::FontCascadeDescription::effectiveFamilyCount const):
        (WebCore::FontCascadeDescription::effectiveFamilyAt const):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::cascadeToLastResortAndVariationsFontDescriptor):
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::texImageIOSurface2D):
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::optionsForBiplanarSurface):
        (WebCore::optionsFor32BitSurface):
        (WebCore::IOSurface::maximumSize):
        (WebCore::IOSurface::surfaceID const):
        * platform/graphics/cocoa/SystemFontDatabaseCoreText.cpp:
        (WebCore::SystemFontDatabaseCoreText::cascadeList):
        * platform/graphics/cocoa/TextTrackRepresentationCocoa.h:
        * platform/graphics/cocoa/TextTrackRepresentationCocoa.mm:
        (-[WebCoreTextTrackRepresentationCocoaHelper observeValueForKeyPath:ofObject:change:context:]):
        * platform/graphics/cocoa/WebMetalLayer.h:
        * platform/graphics/cv/ImageTransferSessionVT.mm:
        (WebCore::cvPixelFormatOpenGLKey):
        (WebCore::ImageTransferSessionVT::ImageTransferSessionVT):
        * platform/graphics/cv/VideoTextureCopierCV.h:
        * platform/graphics/ios/DisplayRefreshMonitorIOS.h:
        * platform/graphics/ios/DisplayRefreshMonitorIOS.mm:
        * platform/graphics/ios/FontAntialiasingStateSaver.h:
        (WebCore::FontAntialiasingStateSaver::FontAntialiasingStateSaver):
        (WebCore::FontAntialiasingStateSaver::setup):
        (WebCore::FontAntialiasingStateSaver::restore):
        * platform/graphics/ios/FontCacheIOS.mm:
        * platform/graphics/ios/IconIOS.mm:
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/mac/FloatPointMac.mm:
        * platform/graphics/mac/FloatRectMac.mm:
        * platform/graphics/mac/FloatSizeMac.mm:
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/mac/ImageMac.mm:
        * platform/graphics/mac/IntPointMac.mm:
        * platform/graphics/mac/IntRectMac.mm:
        * platform/graphics/mac/IntSizeMac.mm:
        * platform/graphics/mac/WebKitNSImageExtras.h:
        * platform/graphics/mac/WebKitNSImageExtras.mm:
        * platform/graphics/mac/WebLayer.mm:
        (-[WebSimpleLayer display]):
        (-[WebSimpleLayer drawInContext:]):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::multiply):
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/ios/CursorIOS.cpp:
        * platform/ios/Device.cpp:
        * platform/ios/Device.h:
        * platform/ios/DeviceMotionClientIOS.h:
        * platform/ios/DeviceMotionClientIOS.mm:
        (WebCore::DeviceMotionClientIOS::motionChanged):
        * platform/ios/DeviceOrientationClientIOS.h:
        * platform/ios/DeviceOrientationClientIOS.mm:
        (WebCore::DeviceOrientationClientIOS::orientationChanged):
        * platform/ios/DragImageIOS.mm:
        * platform/ios/EventLoopIOS.mm:
        * platform/ios/KeyEventIOS.mm:
        * platform/ios/LegacyTileCache.h:
        * platform/ios/LegacyTileCache.mm:
        * platform/ios/LegacyTileGrid.h:
        * platform/ios/LegacyTileGrid.mm:
        * platform/ios/LegacyTileGridTile.h:
        * platform/ios/LegacyTileGridTile.mm:
        * platform/ios/LegacyTileLayer.h:
        * platform/ios/LegacyTileLayer.mm:
        * platform/ios/LegacyTileLayerPool.h:
        * platform/ios/LegacyTileLayerPool.mm:
        * platform/ios/LowPowerModeNotifierIOS.mm:
        * platform/ios/PasteboardIOS.mm:
        * platform/ios/PlatformEventFactoryIOS.h:
        * platform/ios/PlatformEventFactoryIOS.mm:
        * platform/ios/PlatformPasteboardIOS.mm:
        * platform/ios/PlatformScreenIOS.mm:
        * platform/ios/PlatformSpeechSynthesizerIOS.mm:
        * platform/ios/PlaybackSessionInterfaceAVKit.h:
        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        * platform/ios/RemoteCommandListenerIOS.h:
        * platform/ios/RemoteCommandListenerIOS.mm:
        * platform/ios/SSLKeyGeneratorIOS.cpp:
        * platform/ios/ScrollAnimatorIOS.h:
        * platform/ios/ScrollAnimatorIOS.mm:
        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::platformSetContentsSize):
        * platform/ios/ScrollbarThemeIOS.h:
        * platform/ios/ScrollbarThemeIOS.mm:
        * platform/ios/SystemMemoryIOS.cpp:
        (WebCore::systemMemoryLevel):
        * platform/ios/ThemeIOS.h:
        * platform/ios/ThemeIOS.mm:
        * platform/ios/TileControllerMemoryHandlerIOS.cpp:
        * platform/ios/TileControllerMemoryHandlerIOS.h:
        * platform/ios/UserAgentIOS.mm:
        (WebCore::deviceNameForUserAgent):
        * platform/ios/ValidationBubbleIOS.mm:
        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (WebCore::supportsPictureInPicture):
        * platform/ios/WebAVPlayerController.h:
        * platform/ios/WebAVPlayerController.mm:
        * platform/ios/WebBackgroundTaskController.h:
        * platform/ios/WebBackgroundTaskController.mm:
        * platform/ios/WebCoreMotionManager.h:
        * platform/ios/WebCoreMotionManager.mm:
        * platform/ios/WebEvent.h:
        * platform/ios/WebEvent.mm:
        * platform/ios/WebSQLiteDatabaseTrackerClient.h:
        * platform/ios/WebSQLiteDatabaseTrackerClient.mm:
        * platform/ios/WebVideoFullscreenControllerAVKit.h:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::requestUpdateInlineRect):
        (VideoFullscreenControllerContext::requestVideoContentLayer):
        (VideoFullscreenControllerContext::returnVideoContentLayer):
        (VideoFullscreenControllerContext::didSetupFullscreen):
        (VideoFullscreenControllerContext::didExitFullscreen):
        * platform/ios/WidgetIOS.mm:
        * platform/ios/wak/FloatingPointEnvironment.cpp:
        * platform/ios/wak/FloatingPointEnvironment.h:
        * platform/ios/wak/WAKAppKitStubs.m:
        * platform/ios/wak/WAKClipView.m:
        * platform/ios/wak/WAKResponder.m:
        * platform/ios/wak/WAKScrollView.mm:
        * platform/ios/wak/WAKView.mm:
        * platform/ios/wak/WAKWindow.mm:
        * platform/ios/wak/WKContentObservation.cpp:
        * platform/ios/wak/WKGraphics.mm:
        * platform/ios/wak/WKUtilities.c:
        * platform/ios/wak/WKView.mm:
        * platform/ios/wak/WebCoreThread.mm:
        * platform/ios/wak/WebCoreThreadRun.cpp:
        * platform/ios/wak/WebCoreThreadSystemInterface.cpp:
        * platform/mac/DragDataMac.mm:
        (WebCore::rtfPasteboardType):
        (WebCore::rtfdPasteboardType):
        (WebCore::stringPasteboardType):
        (WebCore::urlPasteboardType):
        (WebCore::htmlPasteboardType):
        (WebCore::colorPasteboardType):
        (WebCore::pdfPasteboardType):
        (WebCore::tiffPasteboardType):
        (WebCore::DragData::containsURL const):
        * platform/mac/MediaRemoteSoftLink.cpp:
        * platform/mac/MediaRemoteSoftLink.h:
        * platform/mac/SuddenTermination.mm:
        * platform/mac/WebCoreFullScreenPlaceholderView.mm:
        * platform/mac/WebCoreFullScreenWarningView.h:
        * platform/mac/WebCoreFullScreenWarningView.mm:
        * platform/mac/WebCoreFullScreenWindow.h:
        * platform/mac/WebCoreFullScreenWindow.mm:
        * platform/mac/WebNSAttributedStringExtras.mm:
        * platform/mediastream/RealtimeMediaSourceFactory.h:
        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::~RealtimeVideoSource):
        (WebCore::RealtimeVideoSource::prepareToProduceData):
        * platform/mediastream/ios/AVAudioSessionCaptureDevice.h:
        * platform/mediastream/ios/AVAudioSessionCaptureDevice.mm:
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.h:
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:
        * platform/mediastream/ios/CoreAudioCaptureSourceIOS.h:
        * platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm:
        * platform/mediastream/libwebrtc/LibWebRTCMacros.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::deviceIsAvailable):
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::AVMediaCaptureSource):
        (WebCore::AVMediaCaptureSource::stopProducingData):
        (-[WebCoreAVMediaCaptureSourceObserver addNotificationObservers]):
        (-[WebCoreAVMediaCaptureSourceObserver removeNotificationObservers]):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::AVVideoCaptureSource):
        (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource):
        (WebCore::AVVideoCaptureSource::stopProducingData):
        (WebCore::AVVideoCaptureSource::prefersPreset):
        (WebCore::sensorOrientation):
        (WebCore::AVVideoCaptureSource::setupCaptureSession):
        (WebCore::AVVideoCaptureSource::monitorOrientation):
        (-[WebCoreAVVideoCaptureSourceObserver addNotificationObservers]):
        (-[WebCoreAVVideoCaptureSourceObserver removeNotificationObservers]):
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        (WebCore::AudioTrackPrivateMediaStreamCocoa::createAudioUnit):
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::setupAudioUnit):
        (WebCore::CoreAudioCaptureSource::create):
        (WebCore::CoreAudioCaptureSource::CoreAudioCaptureSource):
        (WebCore::CoreAudioCaptureSource::~CoreAudioCaptureSource):
        (WebCore::CoreAudioCaptureSource::startProducingData):
        * platform/mediastream/mac/CoreAudioCaptureSource.h:
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        (WebCore::DisplayCaptureSourceCocoa::~DisplayCaptureSourceCocoa):
        (WebCore::DisplayCaptureSourceCocoa::startProducingData):
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferPool):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        * platform/mock/MediaPlaybackTargetMock.cpp:
        * platform/mock/MediaPlaybackTargetMock.h:
        * platform/mock/MediaPlaybackTargetPickerMock.cpp:
        * platform/mock/MediaPlaybackTargetPickerMock.h:
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::~MockRealtimeAudioSource):
        (WebCore::MockRealtimeAudioSource::startProducingData):
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        * platform/mock/MockRealtimeVideoSource.cpp:
        * platform/network/CredentialStorage.cpp:
        * platform/network/NetworkStateNotifier.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::builtinResourceHandleConstructorMap):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/ResourceRequestBase.cpp:
        * platform/network/ResourceRequestBase.h:
        * platform/network/cf/DNSResolveQueueCFNet.cpp:
        * platform/network/cf/ProxyServerCFNet.cpp:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::resourcePrioritiesEnabled):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::callbacksRunLoop):
        (WebCore::copyCONNECTProxyResponse):
        * platform/network/cocoa/CookieCocoa.mm:
        (WebCore::Cookie::operator NSHTTPCookie * _Nullable  const):
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::cookiesForURL):
        (WebCore::setHTTPCookiesForURL):
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        * platform/network/ios/NetworkStateNotifierIOS.mm:
        * platform/network/ios/WebCoreURLResponseIOS.h:
        * platform/network/ios/WebCoreURLResponseIOS.mm:
        * platform/network/mac/ResourceErrorMac.mm:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        * platform/network/mac/UTIUtilities.mm:
        * platform/sql/SQLiteDatabase.h:
        (WebCore::SQLiteDatabase::sqlite3Handle const):
        * platform/sql/SQLiteFileSystem.cpp:
        * platform/sql/SQLiteFileSystem.h:
        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::begin):
        (WebCore::SQLiteTransaction::commit):
        (WebCore::SQLiteTransaction::rollback):
        (WebCore::SQLiteTransaction::stop):
        * platform/text/PlatformLocale.cpp:
        * platform/text/PlatformLocale.h:
        * platform/text/ios/LocalizedDateCache.h:
        * platform/text/ios/LocalizedDateCache.mm:
        * platform/text/ios/TextEncodingRegistryIOS.mm:
        * platform/text/mac/LocaleMac.h:
        * platform/text/mac/LocaleMac.mm:
        * plugins/PluginViewBase.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintPlatformDocumentMarker):
        (WebCore::InlineTextBox::resolveStyleForMarkedText):
        (WebCore::InlineTextBox::collectMarkedTextsForDocumentMarkers):
        * rendering/MarkedText.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::allowMinMaxPercentagesInAutoHeightBlocksQuirk):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::decodingModeForImageDraw const):
        * rendering/RenderButton.cpp:
        * rendering/RenderButton.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):
        (WebCore::RenderElement::styleDidChange):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::allowsAcceleratedCompositing const):
        (WebCore::RenderEmbeddedObject::setPluginUnavailabilityReason):
        (WebCore::RenderEmbeddedObject::setPluginUnavailabilityReasonWithDescription):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::maxFilenameWidth const):
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::positionFrames):
        * rendering/RenderIFrame.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintAreaElementFocusRing):
        * rendering/RenderImage.h:
        * rendering/RenderInline.cpp:
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::canCreateStackingContext):
        (WebCore::RenderLayer::canUseAcceleratedTouchScrolling const):
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        (WebCore::RenderLayer::showsOverflowControls const):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::shouldClipCompositedBounds const):
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::RenderLayerBacking::computeParentGraphicsLayerRect const):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::paintsIntoWindow const):
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
        (WebCore::RenderLayerBacking::paintIntoLayer):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::visibleRectForLayerFlushing const):
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::updateCustomLayersAfterFlush):
        (WebCore::RenderLayerCompositor::didFlushChangesForLayer):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::setIsInWindow):
        (WebCore::RenderLayerCompositor::requiresCompositingForScrollableFrame const):
        (WebCore::RenderLayerCompositor::isAsyncScrollableStickyLayer const):
        (WebCore::RenderLayerCompositor::requiresCompositingForOverflowScrolling const):
        (WebCore::RenderLayerCompositor::contentsScaleMultiplierForNewTiles const):
        (WebCore::RenderLayerCompositor::ensureRootLayer):
        (WebCore::RenderLayerCompositor::computeStickyViewportConstraints const):
        (WebCore::RenderLayerCompositor::willRemoveScrollingLayerWithBacking):
        (WebCore::RenderLayerCompositor::didAddScrollingLayer):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::shouldPlaceBlockDirectionScrollbarOnLeft const):
        * rendering/RenderLineBreak.cpp:
        * rendering/RenderLineBreak.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::RenderMenuList):
        (WebCore::RenderMenuList::willBeDestroyed):
        (WebCore::RenderMenuList::adjustInnerStyle):
        (RenderMenuList::updateFromElement):
        (RenderMenuList::setTextFromOption):
        (RenderMenuList::hidePopup):
        (RenderMenuList::popupDidHide):
        * rendering/RenderMenuList.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shouldApplyCompositedContainerScrollsForRepaint):
        (WebCore::RenderObject::destroy):
        * rendering/RenderObject.h:
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::itemText const):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setRenderedText):
        * rendering/RenderText.h:
        * rendering/RenderTextControl.cpp:
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::getAverageCharWidth):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        (WebCore::RenderTextControlSingleLine::getAverageCharWidth):
        (WebCore::RenderTextControlSingleLine::preferredContentLogicalWidth const):
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::lineDirectionPointFitsInBox):
        (WebCore::RenderTextLineBoxes::positionForPoint const):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintBorderOnly):
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::arKitBundle):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::availableLogicalHeight const):
        (WebCore::RenderView::clientLogicalWidthForFixedPosition const):
        (WebCore::RenderView::clientLogicalHeightForFixedPosition const):
        (WebCore::RenderView::repaintViewRectangle const):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::willBeDestroyed):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::selectionTop const):
        (WebCore::RootInlineBox::selectionBottom const):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateElementRenderer):
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):
        * testing/Internals.cpp:
        (WebCore::Internals::getCurrentCursorInfo):
        (WebCore::Internals::isSelectPopupVisible):
        (WebCore::Internals::setQuickLookPassword):
        * testing/Internals.mm:
        (WebCore::Internals::userPrefersReducedMotion const):
        * testing/js/WebCoreTestSupportPrefix.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):

2018-10-18  Per Arne Vollan  <pvollan@apple.com>

        [WebVTT] The TextTrackLoader parameter in TextTrackLoaderClient virtual methods should be a reference
        https://bugs.webkit.org/show_bug.cgi?id=190730

        Reviewed by Chris Dumez.

        No new tests. No change in behavior.

        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::newCuesAvailable):
        (WebCore::LoadableTextTrack::cueLoadingCompleted):
        (WebCore::LoadableTextTrack::newRegionsAvailable):
        * html/track/LoadableTextTrack.h:
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::cueLoadTimerFired):
        (WebCore::TextTrackLoader::newRegionsParsed):
        * loader/TextTrackLoader.h:

2018-10-18  Alex Christensen  <achristensen@webkit.org>

        Clean up FrameLoader two-state enums
        https://bugs.webkit.org/show_bug.cgi?id=190731

        Reviewed by Chris Dumez.

        This patch does three things:
        1. Add an overload to EnumTraits so we do not need to list out the valid values of boolean enum classes.
        The valid values are always 0 and 1.  This is used when decoding from IPC.
        2. Add a 2-state enum class for NewLoadInProgress instad of a bool so we can understand the code better.
        3. Begin passing LockBackForwardList to the UIProcess.  We will need it soon for PSON.

        * history/CachedFrame.h:
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::provisionalLoadStarted):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::clientRedirectCancelledOrFinished):
        (WebCore::FrameLoader::clientRedirected):
        (WebCore::FrameLoader::receivedMainResourceError):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/FrameLoaderTypes.h:
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledNavigation::didStopTimer):
        (WebCore::NavigationScheduler::cancel):
        * loader/NavigationScheduler.h:
        * platform/network/StoredCredentialsPolicy.h:

2018-10-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [GTK] fast/css/pseudo-visited-background-color-on-input.html is failing since r237425
        https://bugs.webkit.org/show_bug.cgi?id=190712

        Reviewed by Tim Horton.

        Ensure that color inputs are enabled by default on GTK, and that color inputs have a `-webkit-appearance` of
        `color-well` by default. Fixes fast/css/pseudo-visited-background-color-on-input.html on GTK.

        * page/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::colorInputStyleSheet const):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::platformUsesColorWellAppearance const):
        (WebCore::RenderTheme::platformColorInputStyleSheet const): Deleted.

        Replace this with a platform hook that determines whether we want to use `-webkit-appearance: color-well;` by
        default for inputs of type color. For now, only iOS overrides this to return false; in the future, we should
        support `-webkit-appearance: color-well;` on iOS, and remove this platform hook entirely.

        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformColorInputStyleSheet const): Deleted.

2018-10-18  Youenn Fablet  <youenn@apple.com>

        Handle MDNS resolution of candidates through libwebrtc directly
        https://bugs.webkit.org/show_bug.cgi?id=190681

        Reviewed by Eric Carlson.

        Remove the previous MDNS resolution mechanism.
        Instead, add support for the AsyncResolver mechanism added to libwebrtc.
        Covered by current mdns webrtc test that is unflaked.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::addIceCandidate):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::createPeerConnection):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::MockLibWebRTCPeerConnectionFactory::CreatePeerConnection):
        * testing/MockLibWebRTCPeerConnection.h:

2018-10-18  Ali Juma  <ajuma@chromium.org>

        [IntersectionObserver] Factor out rect mapping and clipping logic from computeRectForRepaint
        https://bugs.webkit.org/show_bug.cgi?id=189833

        Reviewed by Simon Fraser.

        Factor out the rect mapping and clipping logic from computeRectForRepaint to a new
        computeVisibleRectInContainer method that computeRectForRepaint now calls. Make
        computeVisibleRectInContainer take a VisibleRectContext with options to use
        edge-inclusive intersection and to apply all clips and scrolls rather than only
        the clips and scrolls that are currently applied by the repaint logic. These
        options will be used by IntersectionObserver in a future patch.

        No new tests, no change in behavior.

        * platform/graphics/FloatRect.cpp:
        (WebCore::FloatRect::edgeInclusiveIntersect):
        * platform/graphics/FloatRect.h:
        * platform/graphics/LayoutRect.cpp:
        (WebCore::LayoutRect::edgeInclusiveIntersect):
        * platform/graphics/LayoutRect.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::applyCachedClipAndScrollPosition const):
        (WebCore::RenderBox::computeVisibleRectUsingPaintOffset const):
        (WebCore::RenderBox::computeVisibleRectInContainer const):
        (WebCore::RenderBox::applyCachedClipAndScrollPositionForRepaint const): Deleted.
        (WebCore::RenderBox::shouldApplyClipAndScrollPositionForRepaint const): Deleted.
        The iOS-specific logic in this method has moved to RenderObject::shouldApplyCompositedContainerScrollsForRepaint.
        (WebCore::RenderBox::computeRectForRepaint const): Deleted.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::computeRectForRepaint): Deleted.
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint const):
        (WebCore::RenderInline::computeVisibleRectUsingPaintOffset const):
        (WebCore::RenderInline::computeVisibleRectInContainer const):
        (WebCore::RenderInline::computeRectForRepaint const): Deleted.
        * rendering/RenderInline.h:
        (WebCore::RenderInline::computeRectForRepaint): Deleted.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shouldApplyCompositedContainerScrollsForRepaint):
        (WebCore::RenderObject::visibleRectContextForRepaint):
        (WebCore::RenderObject::computeRectForRepaint const):
        (WebCore::RenderObject::computeFloatRectForRepaint const):
        (WebCore::RenderObject::computeVisibleRectInContainer const):
        (WebCore::RenderObject::computeFloatVisibleRectInContainer const):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::computeAbsoluteRepaintRect const):
        (WebCore::RenderObject::VisibleRectContext::VisibleRectContext):
        (WebCore::RenderObject::RepaintContext::RepaintContext): Deleted.
        (WebCore::RenderObject::computeRectForRepaint): Deleted.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeVisibleRectInContainer const):
        (WebCore::RenderTableCell::computeRectForRepaint const): Deleted.
        * rendering/RenderTableCell.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::computeVisibleRectInContainer const):
        (WebCore::RenderView::computeRectForRepaint const): Deleted.
        * rendering/RenderView.h:
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::computeFloatVisibleRectInContainer const):
        (WebCore::RenderSVGForeignObject::computeVisibleRectInContainer const):
        (WebCore::RenderSVGForeignObject::computeFloatRectForRepaint const): Deleted.
        (WebCore::RenderSVGForeignObject::computeRectForRepaint const): Deleted.
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::computeFloatVisibleRectInContainer const):
        (WebCore::RenderSVGInline::computeFloatRectForRepaint const): Deleted.
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::computeFloatVisibleRectInContainer const):
        (WebCore::RenderSVGModelObject::computeFloatRectForRepaint const): Deleted.
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeFloatVisibleRectInContainer const):
        (WebCore::RenderSVGRoot::computeFloatRectForRepaint const): Deleted.
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::computeVisibleRectInContainer const):
        (WebCore::RenderSVGText::computeFloatVisibleRectInContainer const):
        (WebCore::RenderSVGText::computeRectForRepaint const): Deleted.
        (WebCore::RenderSVGText::computeFloatRectForRepaint const): Deleted.
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::clippedOverflowRectForRepaint):
        (WebCore::SVGRenderSupport::computeFloatVisibleRectInContainer):
        (WebCore::SVGRenderSupport::computeFloatRectForRepaint): Deleted.
        * rendering/svg/SVGRenderSupport.h:

2018-10-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Enable the datalist element by default on iOS and macOS
        https://bugs.webkit.org/show_bug.cgi?id=190594
        <rdar://problem/45281159>

        Reviewed by Ryosuke Niwa and Tim Horton.

        Rebaselined existing layout tests.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/js/WebCoreBuiltinNames.h:
        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement):
        * css/CSSDefaultStyleSheets.h:
        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::collectDocumentWrappers):
        * css/html.css:

        Remove color input and datalist style rules from the default UA stylesheet.

        (input[type="color"]::-webkit-color-swatch-wrapper): Deleted.
        * html/HTMLDataListElement.idl:

        Make HTMLDataListElement runtime-enabled.

        * html/HTMLTagNames.in:
        * html/RangeInputType.cpp:

        Make a slight adjustment here so that inputs of type range respect the list attribute. Fixes a few layout tests
        that add a datalist to an input of type range. See <https://bugs.webkit.org/show_bug.cgi?id=190613> for more
        details.

        (WebCore::RangeInputType::shouldRespectListAttribute):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::shouldRespectListAttribute):
        * page/RuntimeEnabledFeatures.h:

        Add a runtime-enabled feature for the datalist element. Additionally, make the runtime-enabled feature for input
        type color false by default, so that it's off in WebKitLegacy.

        (WebCore::RuntimeEnabledFeatures::dataListElementEnabled const):
        (WebCore::RuntimeEnabledFeatures::setDataListElementEnabled):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::colorInputStyleSheet const):

        Add new style-sheet hooks for datalist and input type color, so that style rules for color inputs and datalists
        can be added at runtime only if the feature is enabled. This ensures that in WebKitLegacy (or other ports where
        either or both elements are disabled), we don't still apply rules for datalist and input[type="color"]. Notably,
        this allows fallback content inside datalist elements to still work in WebKitLegacy (which would otherwise be
        hidden when using the default stylesheet since `display: none` is applied to datalist by default). This also
        prevents inputs of type color from having a smaller size, no outline, and the appearance of a color well on
        macOS.

        (WebCore::RenderTheme::dataListStyleSheet const):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::platformColorInputStyleSheet const):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformColorInputStyleSheet const):

2018-10-17  Justin Michaud  <justin_michaud@apple.com>

        Parse paint() and store paint callbacks for CSS Painting API
        https://bugs.webkit.org/show_bug.cgi?id=190657

        Reviewed by Dean Jackson.

        Implement support for parsing paint() images in css, and store CSS paint callback objects in the paint definition map.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSPaintWorkletGlobalScopeCustom.cpp:
        (WebCore::JSCSSPaintWorkletGlobalScope::visitAdditionalChildren):
        (WebCore::JSCSSPaintWorkletGlobalScope::registerPaint):
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::image):
        (WebCore::CSSImageGeneratorValue::isFixedSize const):
        (WebCore::CSSImageGeneratorValue::fixedSize):
        (WebCore::CSSImageGeneratorValue::isPending const):
        (WebCore::CSSImageGeneratorValue::knownToBeOpaque const):
        (WebCore::CSSImageGeneratorValue::loadSubimages):
        * css/CSSPaintImageValue.cpp: Added.
        (WebCore::CSSPaintImageValue::customCSSText const):
        * css/CSSPaintImageValue.h: Added.
        * css/CSSPaintWorkletGlobalScope.h:
        * css/CSSPaintWorkletGlobalScope.idl:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals const):
        (WebCore::CSSValue::cssText const):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isPaintImageValue const):
        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeCustomPaint):
        (WebCore::CSSPropertyParserHelpers::consumeGeneratedImage):
        (WebCore::CSSPropertyParserHelpers::isGeneratedImage):
        * platform/mediastream/mac/RealtimeVideoUtilities.h:

2018-10-17  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Consolidate all image conversion and resizing into one class
        https://bugs.webkit.org/show_bug.cgi?id=190519
        <rdar://problem/45224307>

        Try to fix the iOSMac build after r237236.

        * platform/graphics/cv/ImageTransferSessionVT.h:
        * platform/graphics/cv/ImageTransferSessionVT.mm:

2018-10-17  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Implement WebGPU bindings up through WebGPUDevice creation
        https://bugs.webkit.org/show_bug.cgi?id=190653

        Reviewed by Dean Jackson.

        Test: webgpu/webgpu-enabled.html

        Add WebGPU Sketch bindings for window.webgpu, WebGPUAdapter, WebGPUAdapterDescriptor,
        and WebGPUDevice creation. Based off IDL commit version b6c61ee. 
        https://github.com/gpuweb/gpuweb/blob/master/design/sketch.webidl

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/webgpu/DOMWindowWebGPU.cpp: Added.
        (WebCore::DOMWindowWebGPU::DOMWindowWebGPU):
        (WebCore::DOMWindowWebGPU::supplementName):
        (WebCore::DOMWindowWebGPU::from):
        (WebCore::DOMWindowWebGPU::webgpu):
        (WebCore::DOMWindowWebGPU::webgpu const):
        * Modules/webgpu/DOMWindowWebGPU.h: Added.
        * Modules/webgpu/DOMWindowWebGPU.idl: Added.
        * Modules/webgpu/WebGPU.cpp: Added.
        (WebCore::WebGPU::create):
        (WebCore::WebGPU::requestAdapter const):
        * Modules/webgpu/WebGPU.h: Added.
        * Modules/webgpu/WebGPU.idl: Added.
        * Modules/webgpu/WebGPUAdapter.cpp: Added.
        (WebCore::WebGPUAdapter::create):
        (WebCore::WebGPUAdapter::WebGPUAdapter):
        (WebCore::WebGPUAdapter::createDevice):
        * Modules/webgpu/WebGPUAdapter.h: Added.
        * Modules/webgpu/WebGPUAdapter.idl: Added.
        * Modules/webgpu/WebGPUAdapterDescriptor.h: Added.
        * Modules/webgpu/WebGPUAdapterDescriptor.idl: Added.
        * Modules/webgpu/WebGPUDevice.cpp: Added.
        (WebCore::WebGPUDevice::create):
        (WebCore::WebGPUDevice::WebGPUDevice):
        * Modules/webgpu/WebGPUDevice.h: Added.
        (WebCore::WebGPUDevice::adapter const):
        * Modules/webgpu/WebGPUDevice.idl: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2018-10-17  Andy Estes  <aestes@apple.com>

        [Apple Pay] Increment the API version to 5
        https://bugs.webkit.org/show_bug.cgi?id=190686
        <rdar://problem/45348523>

        Reviewed by Simon Fraser.

        Test: http/tests/ssl/applepay/ApplePaySessionV5.html

        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::supportsVersion):

2018-10-17  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Consolidate all image conversion and resizing into one class
        https://bugs.webkit.org/show_bug.cgi?id=190519
        <rdar://problem/45224307>

        Reviewed by Youenn Fablet.

        No new tests, no functional change.

        * SourcesCocoa.txt: Add ImageTransferSessionVT.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/MediaSample.h:
        (WebCore::MediaSample::videoPixelFormat const): New.

        * platform/cocoa/VideoToolboxSoftLink.cpp: Add new kVTPixelTransferProperty keys.
        * platform/cocoa/VideoToolboxSoftLink.h:

        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h:
        (WebCore::MediaSampleAVFObjC::create): Remove unimplemented variant.
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::videoPixelFormat const): New.

        * platform/graphics/cv/ImageTransferSessionVT.h: Added.
        (WebCore::ImageTransferSessionVT::create):
        * platform/graphics/cv/ImageTransferSessionVT.mm: Added.
        (WebCore::ImageTransferSessionVT::ImageTransferSessionVT):
        (WebCore::ImageTransferSessionVT::~ImageTransferSessionVT):
        (WebCore::ImageTransferSessionVT::setSize):
        (WebCore::ImageTransferSessionVT::createPixelBuffer):
        (WebCore::ImageTransferSessionVT::createCMSampleBuffer):
        (WebCore::roundUpToMacroblockMultiple):
        (WebCore::ImageTransferSessionVT::ioSurfacePixelBufferCreationOptions):
        (WebCore::ImageTransferSessionVT::createMediaSample):

        * platform/graphics/cv/PixelBufferResizer.h: Removed.
        * platform/graphics/cv/PixelBufferResizer.mm: Removed.

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::prefersPreset):
        (WebCore::AVVideoCaptureSource::captureOutputDidOutputSampleBufferFromConnection): Remove
        the resizing logic, it is handled by the base class.

        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        (WebCore::DisplayCaptureSourceCocoa::capabilities):
        (WebCore::DisplayCaptureSourceCocoa::settingsDidChange):
        (WebCore::DisplayCaptureSourceCocoa::setIntrinsicSize):
        (WebCore::DisplayCaptureSourceCocoa::emitFrame): Remove resizing logic, just use a transfer
        session to create an image from the capture source native output format.
        (WebCore::DisplayCaptureSourceCocoa::sampleBufferFromPixelBuffer): Deleted.
        (WebCore::roundUpToMacroblockMultiple): Deleted.
        (WebCore::DisplayCaptureSourceCocoa::pixelBufferFromIOSurface): Deleted.
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.h:

        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::updateSampleBuffer): Use image transfer session.
        (WebCore::MockRealtimeVideoSourceMac::CMSampleBufferFromPixelBuffer): Deleted.
        (WebCore::MockRealtimeVideoSourceMac::pixelBufferFromCGImage const): Deleted.
        (WebCore::MockRealtimeVideoSourceMac::setSizeAndFrameRateWithPreset): Deleted.

        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
        (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream):
        (WebCore::ScreenDisplayCaptureSourceMac::generateFrame): Return the IOSurface directly.

        * platform/mediastream/mac/WindowDisplayCaptureSourceMac.h:
        * platform/mediastream/mac/WindowDisplayCaptureSourceMac.mm:
        (WebCore::WindowDisplayCaptureSourceMac::generateFrame): Return the CGImage directly.
        (WebCore::WindowDisplayCaptureSourceMac::pixelBufferFromCGImage): Deleted.

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::capabilities): Only the camera supports device ID.
        (WebCore::MockRealtimeVideoSource::settings): Ditto.

2018-10-17  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Clean up capture source factory management
        https://bugs.webkit.org/show_bug.cgi?id=190502
        <rdar://problem/45212447>

        Reviewed by Youenn Fablet.

        No new tests, no functional change.

        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::setAudioFactory):
        (WebCore::RealtimeMediaSourceCenter::unsetAudioFactory):
        (WebCore::RealtimeMediaSourceCenter::audioFactory):
        (WebCore::RealtimeMediaSourceCenter::setVideoFactory):
        (WebCore::RealtimeMediaSourceCenter::unsetVideoFactory):
        (WebCore::RealtimeMediaSourceCenter::videoFactory):
        (WebCore::RealtimeMediaSourceCenter::setDisplayCaptureFactory):
        (WebCore::RealtimeMediaSourceCenter::unsetDisplayCaptureFactory):
        (WebCore::RealtimeMediaSourceCenter::displayCaptureFactory):
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        (WebCore::RealtimeMediaSourceCenter::setAudioFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenter::unsetAudioFactory): Deleted.
        (): Deleted.
        * platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp:
        (WebCore::RealtimeMediaSourceCenterLibWebRTC::audioFactoryPrivate):
        (WebCore::RealtimeMediaSourceCenterLibWebRTC::videoFactoryPrivate):
        (WebCore::RealtimeMediaSourceCenterLibWebRTC::displayCaptureFactoryPrivate):
        (WebCore::RealtimeMediaSourceCenterLibWebRTC::audioCaptureSourceFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenterLibWebRTC::audioFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenterLibWebRTC::videoFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenterLibWebRTC::displayCaptureFactory): Deleted.
        * platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.h:
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::audioFactoryPrivate):
        (WebCore::RealtimeMediaSourceCenterMac::videoFactoryPrivate):
        (WebCore::RealtimeMediaSourceCenterMac::displayCaptureFactoryPrivate):
        (WebCore::RealtimeMediaSourceCenterMac::videoCaptureSourceFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenterMac::displayCaptureSourceFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenterMac::audioCaptureSourceFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenterMac::audioFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenterMac::videoFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenterMac::displayCaptureFactory): Deleted.
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::audioFactoryPrivate):
        (WebCore::MockRealtimeMediaSourceCenter::videoFactoryPrivate):
        (WebCore::MockRealtimeMediaSourceCenter::displayCaptureFactoryPrivate):
        (WebCore::MockRealtimeMediaSourceCenter::audioFactory): Deleted.
        (WebCore::MockRealtimeMediaSourceCenter::videoFactory): Deleted.
        (WebCore::MockRealtimeMediaSourceCenter::displayCaptureFactory): Deleted.
        * platform/mock/MockRealtimeMediaSourceCenter.h:

2018-10-17  Alex Christensen  <achristensen@webkit.org>

        BackForwardClient needs to be able to support UIProcess-only back/forward lists
        https://bugs.webkit.org/show_bug.cgi?id=190675

        Reviewed by Chris Dumez.

        Return a RefPtr<HistoryItem> instead of a HistoryItem so that we will be able to return a
        HistoryItem that has been created instead of a pointer to a HistoryItem that is owned by something else.
        Also use unsigned for the back and forward list counts because they can never be negative.

        * history/BackForwardClient.h:
        * history/BackForwardController.cpp:
        (WebCore::BackForwardController::backItem):
        (WebCore::BackForwardController::currentItem):
        (WebCore::BackForwardController::forwardItem):
        (WebCore::BackForwardController::canGoBackOrForward const):
        (WebCore::BackForwardController::goBackOrForward):
        (WebCore::BackForwardController::goBack):
        (WebCore::BackForwardController::goForward):
        (WebCore::BackForwardController::count const):
        (WebCore::BackForwardController::backCount const):
        (WebCore::BackForwardController::forwardCount const):
        (WebCore::BackForwardController::itemAtIndex):
        * history/BackForwardController.h:
        (WebCore::BackForwardController::backItem): Deleted.
        (WebCore::BackForwardController::currentItem): Deleted.
        (WebCore::BackForwardController::forwardItem): Deleted.
        * loader/EmptyClients.cpp:
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::scheduleHistoryNavigation):

2018-10-17  Antoine Quint  <graouts@apple.com>

        [Web Animations] Do not create a DocumentTimeline to suspend or resume animations
        https://bugs.webkit.org/show_bug.cgi?id=190660

        Reviewed by Dean Jackson.

        We check that there is an existing timeline before trying to suspend or resume its animations, otherwise
        we're creating a DocumentTimeline when nothing requires for it to exist. We also have to check that we
        suspend animations when a DocumentTimeline is created while the page is not visible.

        No new tests as there is no change in behavior here.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::DocumentTimeline):
        * dom/Document.cpp:
        (WebCore::Document::didBecomeCurrentDocumentInFrame):
        (WebCore::Document::resume):
        * page/Frame.cpp:
        (WebCore::Frame::clearTimers):
        * page/Page.cpp:
        (WebCore::Page::setIsVisibleInternal):
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):

2018-10-17  Antti Koivisto  <antti@apple.com>

        Tiling CSS gradients is slow
        https://bugs.webkit.org/show_bug.cgi?id=190615

        Reviewed by Tim Horton.

        Painting blocks the main thread on CG rendering queue to make a copy of the backing store.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::drawPattern):

        Also use sinkIntoImage for bitmap image pattern drawing.

        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::drawPattern):

        Sink the gradient into an Image after generating it. Unlike ImageBuffer, painting it doesn't involve inefficient copies.
        Previous isCompatibleWithContext test is replaced with an equivalent scale factor test.

        * platform/graphics/GradientImage.h:

2018-10-17  Chris Dumez  <cdumez@apple.com>

        Update more DOMWindow getters to return references instead of raw pointers
        https://bugs.webkit.org/show_bug.cgi?id=190654

        Reviewed by Youenn Fablet.

        Update more DOMWindow getters to return references instead of raw pointers, since they
        can no longer return null after recent refactoring.

        * Modules/gamepad/GamepadManager.cpp:
        (WebCore::navigatorGamepadFromDOMWindow):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::heapSnapshot):
        * dom/Document.cpp:
        (WebCore::Document::location const):
        (WebCore::Document::dispatchPopstateEvent):
        * dom/Event.cpp:
        (WebCore::Event::timeStampForBindings const):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/ResourceTimingInformation.cpp:
        (WebCore::ResourceTimingInformation::addResourceTiming):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::screen):
        (WebCore::DOMWindow::history):
        (WebCore::DOMWindow::crypto const):
        (WebCore::DOMWindow::locationbar):
        (WebCore::DOMWindow::menubar):
        (WebCore::DOMWindow::personalbar):
        (WebCore::DOMWindow::scrollbars):
        (WebCore::DOMWindow::statusbar):
        (WebCore::DOMWindow::toolbar):
        (WebCore::DOMWindow::applicationCache):
        (WebCore::DOMWindow::navigator):
        (WebCore::DOMWindow::performance const):
        (WebCore::DOMWindow::nowTimestamp const):
        (WebCore::DOMWindow::location):
        (WebCore::DOMWindow::visualViewport):
        (WebCore::DOMWindow::styleMedia):
        * page/DOMWindow.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::updateLayoutViewport):
        * page/History.cpp:
        (WebCore::History::stateObjectAdded):
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::createTimestamp const):
        * page/PerformanceObserver.cpp:
        (WebCore::PerformanceObserver::PerformanceObserver):
        * platform/cocoa/VideoFullscreenModelVideoElement.mm:
        (WebCore::VideoFullscreenModelVideoElement::requestFullscreenMode):

2018-10-17  Chris Fleizach  <cfleizach@apple.com>

        AX: Certain tags should identify their context to iOS API
        https://bugs.webkit.org/show_bug.cgi?id=190622
        <rdar://problem/45308194>

        Reviewed by Zalan Bujtas.

        Convey the semantic meaning of <code> tag to the iOS API so VoiceOver can make use of it.

        Tests: accessibility/ios-simulator/text-context-attributes.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityTextualContext]):
        (AXAttributeStringSetStyle):

2018-10-17  Youenn Fablet  <youenn@apple.com>

        Remove unused code from RealtimeOutgoingVideoSourceCocoa
        https://bugs.webkit.org/show_bug.cgi?id=190666

        Reviewed by Eric Carlson.

        No change of behavior, removed no longer used code.

        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp:
        (): Deleted.

2018-10-17  Ali Juma  <ajuma@chromium.org>

        Flaky IntersectionObserver web platform tests involving style updates
        https://bugs.webkit.org/show_bug.cgi?id=189091

        Reviewed by Simon Fraser.

        Update intersection observations when flushing layers from the WebProcess
        to the UIProcess to make the timing of these updates more predictable, and
        more consistent with the IntersectionObserver spec, since the spec expects
        these updates to happen as part of the "Update the rendering" step in the
        HTML EventLoop.

        Getting a similar approach to work with WK1 seems to add more complexity than it's
        worth, since flushes don't happen for scrolls handled by platform widgets, and
        flushes for other invalidations only happen when in compositing mode.

        The only remaining timer-driven intersection observation update is for handling
        the initial observation on a newly added target, which needs to happen even if
        there are no changes triggering a flush.

        Tested by the following tests no longer being flaky:
            imported/w3c/web-platform-tests/intersection-observer/bounding-box.html
            imported/w3c/web-platform-tests/intersection-observer/display-none.html
            imported/w3c/web-platform-tests/intersection-observer/containing-block.html

        * dom/Document.cpp:
        (WebCore::Document::resolveStyle):
        (WebCore::Document::updateIntersectionObservations):
        (WebCore::Document::scheduleForcedIntersectionObservationUpdate):
        (WebCore::Document::scheduleIntersectionObservationUpdate): Deleted.
        * dom/Document.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::flushCompositingStateForThisFrame):
        (WebCore::FrameView::viewportContentsChanged):
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::observe):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::willDisplayPage):
        (WebCore::Page::addDocumentNeedingIntersectionObservationUpdate):
        (WebCore::Page::updateIntersectionObservations):
        (WebCore::Page::scheduleForcedIntersectionObservationUpdate):
        * page/Page.h:

2018-10-17  Charlie Turner  <cturner@igalia.com>

        [EME] Sanity check key ID length in the keyids init data format
        https://bugs.webkit.org/show_bug.cgi?id=190629

        Reviewed by Xabier Rodriguez-Calvar.

        Covered by web-platform-tests/encrypted-media/clearkey-generate-request-disallowed-input.https.html

        * Modules/encryptedmedia/InitDataRegistry.cpp:
        (WebCore::extractKeyIDsKeyids): Ensure the decoded key id length
        is at least 1 byte and no more than 512 bytes.

2018-10-16  Chris Dumez  <cdumez@apple.com>

        Regression(r236795) Check boxes are sometimes checked when they should not be
        https://bugs.webkit.org/show_bug.cgi?id=190651
        <rdar://problem/45319934>

        Reviewed by Ryosuke Niwa.

        r236795 mistakenly dropped the statement resetting m_reflectsCheckedAttribute to true
        in HTMLInputElement::parseAttribute() because it looked like a no-op given that we
        made sure it was true a couple of line above. However, I overlooked that calling
        HTMLInputElement::setChecked() sets m_reflectsCheckedAttribute to false.

        This patch thus re-introduces the statement. It also renames m_reflectsCheckedAttribute
        to m_dirtyCheckednessFlag and reverses its value in order to match the specification
        more closely:
        - https://html.spec.whatwg.org/#concept-input-checked-dirty-flag

        Test: fast/dom/HTMLInputElement/checkbox-dirty-checkedness-flag.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        (WebCore::HTMLInputElement::parseAttribute):
        (WebCore::HTMLInputElement::finishParsingChildren):
        (WebCore::HTMLInputElement::reset):
        (WebCore::HTMLInputElement::setChecked):
        (WebCore::HTMLInputElement::copyNonAttributePropertiesFromElement):
        * html/HTMLInputElement.h:

2018-10-16  Sihui Liu  <sihui_liu@apple.com>

        Add a switch for Web SQL
        https://bugs.webkit.org/show_bug.cgi?id=190271

        Reviewed by Ryosuke Niwa.

        Web SQL is still enabled by default.

        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * Modules/webdatabase/Database.idl:
        * Modules/webdatabase/SQLError.idl:
        * Modules/webdatabase/SQLResultSet.idl:
        * Modules/webdatabase/SQLResultSetRowList.idl:
        * bindings/js/WebCoreBuiltinNames.h:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebSQLDisabled):
        (WebCore::RuntimeEnabledFeatures::webSQLEnabled const):

2018-10-16  Chris Dumez  <cdumez@apple.com>

        window.performance should not become null after the window loses its browsing context
        https://bugs.webkit.org/show_bug.cgi?id=190636

        Reviewed by Ryosuke Niwa.

        window.performance should not become null after the window loses its browsing context. This
        WebKit behavior does not match the HTML specification nor the behavior of other browsers.

        Also note that the attribute is not nullable in the specification:
        - https://www.w3.org/TR/navigation-timing/#sec-window.performance-attribute

        No new tests, updated existing test.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::performance const):
        * page/Performance.cpp:
        (WebCore::Performance::Performance):
        * page/Performance.h:
        * platform/GenericTaskQueue.h:
        (WebCore::TaskDispatcher::TaskDispatcher):
        (WebCore::TaskDispatcher::postTask):
        (WebCore::GenericTaskQueue::GenericTaskQueue):
        (WebCore::GenericTaskQueue::isClosed const):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):

2018-10-16  Jer Noble  <jer.noble@apple.com>

        Refactoring: Convert HTMLMediaElement::scheduleDelayedAction() to individually schedulable & cancelable tasks
        https://bugs.webkit.org/show_bug.cgi?id=188208

        Reviewed by Eric Carlson.

        Rather than have a single, monolithic, zero-duration-timer based dispatch for
        a bunch of methods to be performed in a future run-loop, convert them all to
        use a DeferrableTask, which in turn is a kind of GenericTaskQueue which can
        enqueue only a single task at a time. Convert some other zero-duration-timer
        and GenericTaskQueue dispatches to this new DeferrableTask.

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::finishParsingChildren):
        (WebCore::HTMLMediaElement::scheduleCheckPlaybackTargetCompatability):
        (WebCore::HTMLMediaElement::checkPlaybackTargetCompatablity):
        (WebCore::HTMLMediaElement::prepareForLoad):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::seekWithTolerance):
        (WebCore::HTMLMediaElement::setMuted):
        (WebCore::HTMLMediaElement::mediaPlayerDidAddTextTrack):
        (WebCore::HTMLMediaElement::didAddTextTrack):
        (WebCore::HTMLMediaElement::scheduleConfigureTextTracks):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::scheduleMediaEngineWasUpdated):
        (WebCore::HTMLMediaElement::mediaEngineWasUpdated):
        (WebCore::HTMLMediaElement::mediaPlayerEngineUpdated):
        (WebCore::HTMLMediaElement::scheduleUpdatePlayState):
        (WebCore::HTMLMediaElement::updatePlayState):
        (WebCore::HTMLMediaElement::setPlaying):
        (WebCore::HTMLMediaElement::setPausedInternal):
        (WebCore::HTMLMediaElement::cancelPendingTasks):
        (WebCore::HTMLMediaElement::userCancelledLoad):
        (WebCore::HTMLMediaElement::clearMediaPlayer):
        (WebCore::HTMLMediaElement::contextDestroyed):
        (WebCore::HTMLMediaElement::stop):
        (WebCore::HTMLMediaElement::suspend):
        (WebCore::HTMLMediaElement::resume):
        (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged):
        (WebCore::HTMLMediaElement::dispatchEvent):
        (WebCore::HTMLMediaElement::removeEventListener):
        (WebCore::HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent):
        (WebCore::HTMLMediaElement::didBecomeFullscreenElement):
        (WebCore::HTMLMediaElement::markCaptionAndSubtitleTracksAsUnconfigured):
        (WebCore::HTMLMediaElement::scheduleUpdateMediaState):
        (WebCore::HTMLMediaElement::updateMediaState):
        (WebCore::HTMLMediaElement::playbackControlsManagerBehaviorRestrictionsTimerFired):
        (WebCore::setFlags): Deleted.
        (WebCore::clearFlags): Deleted.
        (WebCore::actionName): Deleted.
        (WebCore::HTMLMediaElement::scheduleDelayedAction): Deleted.
        (WebCore::HTMLMediaElement::pendingActionTimerFired): Deleted.
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElementEnums.h:
        * platform/DeferrableTask.h: Added.
        (WebCore::DeferrableTask::DeferrableTask):
        (WebCore::DeferrableTask::scheduleTask):
        (WebCore::DeferrableTask::close):
        (WebCore::DeferrableTask::cancelTask):
        (WebCore::DeferrableTask::hasPendingTask const):

2018-10-16  Timothy Hatcher  <timothy@apple.com>

        Add <meta name="supported-color-schemes"> to control what color schemes the page supports
        https://bugs.webkit.org/show_bug.cgi?id=190526
        rdar://problem/45230140

        Reviewed by Dean Jackson.

        Test: css-dark-mode/supported-color-schemes.html

        * dom/Document.cpp:
        (WebCore::isColorSchemeSeparator): Added.
        (WebCore::processColorSchemes): Added.
        (WebCore::Document::processSupportedColorSchemes): Added.
        (WebCore::Document::useDarkAppearance const): Take system appearance and document's
        suppoerted color shcemes into account.
        * dom/Document.h:
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::createFragment): Update use of LocalDefaultSystemAppearance.
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::process): Added supported-color-schemes behind runtime feature check.
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::paint): Update use of LocalDefaultSystemAppearance.
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageForLink): Update use of LocalDefaultSystemAppearance.
        * platform/mac/LocalDefaultSystemAppearance.h:
        * platform/mac/LocalDefaultSystemAppearance.mm:
        (WebCore::LocalDefaultSystemAppearance::LocalDefaultSystemAppearance):
        Drop the need for useSystemAppearance. This is accounted for in Document::useDarkAppearance.
        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::paint): Update use of LocalDefaultSystemAppearance.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents): Update use of LocalDefaultSystemAppearance.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::paintContents): Update use of LocalDefaultSystemAppearance.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint): Use document instead of page.
        * rendering/RenderThemeCocoa.mm:
        (WebCore::RenderThemeCocoa::drawLineForDocumentMarker): Update use of LocalDefaultSystemAppearance.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::documentViewFor const): Update use of LocalDefaultSystemAppearance.
        (WebCore::RenderThemeMac::platformActiveSelectionBackgroundColor const): Ditto.
        (WebCore::RenderThemeMac::platformInactiveSelectionBackgroundColor const): Ditto.
        (WebCore::RenderThemeMac::transformSelectionBackgroundColor const): Ditto.
        (WebCore::RenderThemeMac::supportsSelectionForegroundColors const): Ditto.
        (WebCore::RenderThemeMac::platformActiveSelectionForegroundColor const): Ditto.
        (WebCore::RenderThemeMac::platformInactiveSelectionForegroundColor const): Ditto.
        (WebCore::RenderThemeMac::platformActiveListBoxSelectionBackgroundColor const): Ditto.
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionBackgroundColor const): Ditto.
        (WebCore::RenderThemeMac::platformActiveListBoxSelectionForegroundColor const): Ditto.
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionForegroundColor const): Ditto.
        (WebCore::RenderThemeMac::platformActiveTextSearchHighlightColor const): Ditto.
        (WebCore::RenderThemeMac::colorCache const): Ditto.
        (WebCore::RenderThemeMac::systemColor const): Ditto.
        (WebCore::RenderThemeMac::paintCellAndSetFocusedElementNeedsRepaintIfNecessary): Ditto.
        (WebCore::RenderThemeMac::paintSliderThumb): Ditto.
        (WebCore::RenderThemeMac::usingDarkAppearance const): No need to limit to macOS here.
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw): Update use of LocalDefaultSystemAppearance.

2018-10-16  Rob Buis  <rbuis@igalia.com>

        Remove superfluous VIDEO build guard
        https://bugs.webkit.org/show_bug.cgi?id=190624

        Reviewed by Michael Catanzaro.

        Remove some instances where the VIDEO build guard is included within another VIDEO build guard.

        No new tests. No change in behavior.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::buildMediaEnginesVector):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:

2018-10-16  Youenn Fablet  <youenn@apple.com>

        Support RTCConfiguration.certificates
        https://bugs.webkit.org/show_bug.cgi?id=190603

        Reviewed by Eric Carlson.

        Update RTCConfiguration to have a certificates member.
        Add the conversion from RTCCertificate to libwebrtc certificates.
        Add check to ensure that certificates are not expired.
        Add check to ensure that certificates passed to setConfiguration were
        the same as the ones passed to RTCPeerConnection constructor.
        Once these checks are done, we reuse the certificates created at
        RCPeerConnection creation time when setting the configuration again.

        Covered by rebased WPT test.

        * Modules/mediastream/RTCConfiguration.h:
        * Modules/mediastream/RTCConfiguration.idl:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::certificatesFromConfiguration):
        (WebCore::RTCPeerConnection::initializeConfiguration):
        (WebCore::RTCPeerConnection::setConfiguration):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::setConfiguration):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::configurationFromMediaEndpointConfiguration):
        * platform/mediastream/MediaEndpointConfiguration.cpp:
        (WebCore::MediaEndpointConfiguration::MediaEndpointConfiguration):
        * platform/mediastream/MediaEndpointConfiguration.h:

2018-10-16  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r237163.

        Introduced layout test failures on iOS Simulator.

        Reverted changeset:

        "[CG] Adopt CG SPI for non-even cornered rounded rects"
        https://bugs.webkit.org/show_bug.cgi?id=190155
        https://trac.webkit.org/changeset/237163

2018-10-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: capture previously saved states and add them to the recording payload
        https://bugs.webkit.org/show_bug.cgi?id=190473

        Reviewed by Joseph Pecoraro.

        Updated existing tests: inspector/canvas/recording-2d.html
                                inspector/model/recording.html

        Instead of sending a single object of the current state of the context, send an array of
        objects, one for each restore point.

        * html/canvas/CanvasRenderingContext2DBase.h:
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::stateStack): Added.

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::stringIndexForKey): Added.
        (WebCore::InspectorCanvas::buildInitialState):

2018-10-16  Justin Michaud  <justin_michaud@apple.com>

        Implement feature flag and bindings for CSS Painting API
        https://bugs.webkit.org/show_bug.cgi?id=190237

        Reviewed by Ryosuke Niwa.

        Add feature flag and bindings for CSS Painting API. This adds a new property,
        CSS.paintWorkletGlobalScope, which will be a temporary way to access the paint
        worklet global scope untill CSS.paintWorklet is implemented.

        There are a few small changes, mostly adding headers and "using" declarations,
        that were required to get this to build. This is probably related to unified sources.

        Tests: fast/css-custom-paint/basic.html
               fast/css-custom-paint/registerPaintBindings.html

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSPaintWorkletGlobalScopeCustom.cpp: Added.
        (WebCore::throwInvalidModificationError):
        (WebCore::JSCSSPaintWorkletGlobalScope::registerPaint):
        * bindings/js/JSEventListener.cpp:
        * bindings/js/JSRemoteDOMWindowCustom.cpp:
        * bindings/js/JSWebMetalRenderPassAttachmentDescriptorCustom.cpp:
        * bindings/js/WebCoreBuiltinNames.h:
        * css/CSSPaintCallback.h: Copied from Source/WebCore/css/MediaQueryParserContext.cpp.
        (WebCore::CSSPaintCallback::~CSSPaintCallback):
        * css/CSSPaintCallback.idl: Added.
        * css/CSSPaintWorkletGlobalScope.cpp: Copied from Source/WebCore/css/MediaQueryParserContext.cpp.
        (WebCore::CSSPaintWorkletGlobalScope::create):
        (WebCore::CSSPaintWorkletGlobalScope::CSSPaintWorkletGlobalScope):
        (WebCore::CSSPaintWorkletGlobalScope::devicePixelRatio):
        (WebCore::CSSPaintWorkletGlobalScope::addRegisteredPaint):
        * css/CSSPaintWorkletGlobalScope.h: Copied from Source/WebCore/css/MediaQueryParserContext.cpp.
        (WebCore::CSSPaintWorkletGlobalScope::paintDefinitionMap):
        * css/CSSPaintWorkletGlobalScope.idl: Added.
        * css/DOMCSSPaintWorklet.cpp: Copied from Source/WebCore/css/MediaQueryParserContext.cpp.
        (WebCore::DOMCSSPaintWorklet::ensurePaintWorkletGlobalScope):
        (WebCore::DOMCSSPaintWorklet::from):
        (WebCore::DOMCSSPaintWorklet::supplementName):
        * css/DOMCSSPaintWorklet.h: Copied from Source/WebCore/css/MediaQueryParserContext.cpp.
        * css/DOMCSSPaintWorklet.idl: Added.
        * css/MediaQueryParserContext.cpp:
        * css/StyleBuilder.h:
        * dom/Document.cpp:
        (WebCore::Document::ensureCSSPaintWorkletGlobalScope):
        * dom/Document.h:
        * features.json:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setCSSPaintingAPIEnabled):
        (WebCore::RuntimeEnabledFeatures::cssPaintingAPIEnabled const):

2018-10-16  Per Arne Vollan  <pvollan@apple.com>

        [WebVTT] Support inline WebVTT styles
        https://bugs.webkit.org/show_bug.cgi?id=190369

        Reviewed by Eric Carlson.

        Add support for inline WebVTT styles, see https://w3c.github.io/webvtt/#styling. The parsed
        style strings from the VTT file are added to an optional vector of style strings in the
        TextTrack class. These styles are then added as HTMLStyleElement children to the parent of
        the cue span element.

        Test: media/track/track-cue-css.html

        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::newStyleSheetsParsed):
        * html/track/InbandGenericTextTrack.h:
        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::newStyleSheetsParsed):
        * html/track/InbandWebVTTTextTrack.h:
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::newStyleSheetsAvailable):
        * html/track/LoadableTextTrack.h:
        * html/track/TextTrack.h:
        (WebCore::TextTrack::styleSheets const):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::getDisplayTree):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::getNewCues):
        (WebCore::WebVTTParser::getStyleSheets):
        (WebCore::WebVTTParser::parse):
        (WebCore::WebVTTParser::collectWebVTTBlock):
        (WebCore::WebVTTParser::collectStyleSheet):
        (WebCore::WebVTTParser::checkStyleSheet):
        (WebCore::WebVTTParser::checkAndStoreStyleSheet):
        * html/track/WebVTTParser.h:
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::newStyleSheetsParsed):
        (WebCore::TextTrackLoader::getNewStyleSheets):
        * loader/TextTrackLoader.h:

2018-10-16  Chris Dumez  <cdumez@apple.com>

        window.navigator should not become null after the window loses its browsing context
        https://bugs.webkit.org/show_bug.cgi?id=190595

        Reviewed by Ryosuke Niwa.

        window.navigator should not become null after the window loses its browsing context.
        This does not match the HTML specification or the behavior of other browsers.

        No new tests, updated existing tests.

        * Modules/geolocation/NavigatorGeolocation.cpp:
        (WebCore::NavigatorGeolocation::geolocation const):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::navigator):
        * page/Navigator.cpp:
        (WebCore::Navigator::Navigator):
        * page/Navigator.h:
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::NavigatorBase):
        * page/NavigatorBase.h:
        * page/WorkerNavigator.cpp:
        (WebCore::WorkerNavigator::WorkerNavigator):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::ServiceWorkerContainer):
        * workers/service/ServiceWorkerContainer.h:

2018-10-16  Alex Christensen  <achristensen@webkit.org>

        Replace HistoryItem* with HistoryItem& where possible
        https://bugs.webkit.org/show_bug.cgi?id=190617

        Reviewed by Chris Dumez.

        * history/BackForwardClient.h:
        * history/BackForwardController.cpp:
        (WebCore::BackForwardController::setCurrentItem):
        * history/BackForwardController.h:
        * history/HistoryItem.cpp:
        (WebCore::defaultNotifyHistoryItemChanged):
        (WebCore::HistoryItem::setAlternateTitle):
        (WebCore::HistoryItem::setURLString):
        (WebCore::HistoryItem::setOriginalURLString):
        (WebCore::HistoryItem::setReferrer):
        (WebCore::HistoryItem::setTitle):
        (WebCore::HistoryItem::setTarget):
        (WebCore::HistoryItem::setShouldRestoreScrollPosition):
        (WebCore::HistoryItem::setStateObject):
        (WebCore::HistoryItem::notifyChanged):
        * history/HistoryItem.h:
        * loader/EmptyClients.cpp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::loadSameDocumentItem):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::goToItem):
        (WebCore::HistoryController::updateForCommit):
        (WebCore::HistoryController::recursiveUpdateForCommit):
        (WebCore::HistoryController::recursiveUpdateForSameDocumentNavigation):
        (WebCore::HistoryController::setCurrentItem):
        (WebCore::HistoryController::createItem):
        (WebCore::HistoryController::itemsAreClones const):
        (WebCore::HistoryController::currentFramesMatchItem const):
        * loader/HistoryController.h:

2018-10-16  Alex Christensen  <achristensen@webkit.org>

        Remove unused WebHistoryItem._transientPropertyForKey
        https://bugs.webkit.org/show_bug.cgi?id=190606

        Reviewed by Chris Dumez.

        This is unnecessary complexity in HistoryItem.

        * history/HistoryItem.h:
        * history/mac/HistoryItemMac.mm:
        (WebCore::HistoryItem::getTransientProperty const): Deleted.
        (WebCore::HistoryItem::setTransientProperty): Deleted.

2018-10-16  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Separate SSL Class for platform dependent way of setup.
        https://bugs.webkit.org/show_bug.cgi?id=190597

        Reviewed by Alex Christensen.

        SSL setup is very platform dependent. This patch separate the class to allow
        platform-dependent setup at the SSL handle instantiation.

        No new tests because there's no behaviro changes.

        * PlatformWinCairo.cmake:
        * platform/network/curl/CurlSSLHandle.cpp:
        (WebCore::CurlSSLHandle::CurlSSLHandle):
        (WebCore::CurlSSLHandle::getCACertPathEnv): Moved.
        * platform/network/curl/CurlSSLHandle.h:
        * platform/network/win/CurlSSLHandleWin.cpp:
        (WebCore::getCACertPathEnv):
        (WebCore::CurlSSLHandle::platformInitialize):

2018-10-15  Keith Miller  <keith_miller@apple.com>

        Support arm64 CPUs with a 32-bit address space
        https://bugs.webkit.org/show_bug.cgi?id=190273

        Reviewed by Michael Saboff.

        Fix missing namespace annotation.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateAddStyleRelation):

2018-10-15  Justin Fan  <justin_fan@apple.com>

        Add WebGPU 2018 feature flag and experimental feature flag
        https://bugs.webkit.org/show_bug.cgi?id=190509

        Reviewed by Dean Jackson.

        Re-add ENABLE_WEBGPU, an experimental feature flag, and a RuntimeEnabledFeature
        for the 2018 WebGPU prototype.

        * Configurations/FeatureDefines.xcconfig:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebGPUEnabled):
        (WebCore::RuntimeEnabledFeatures::webGPUEnabled const):

2018-10-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237162.
        https://bugs.webkit.org/show_bug.cgi?id=190612

        Broke Windows build (Requested by dolmstead on #webkit).

        Reverted changeset:

        "Add stub implementation for accessibility objects"
        https://bugs.webkit.org/show_bug.cgi?id=190608
        https://trac.webkit.org/changeset/237162

2018-10-15  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [CG] Adopt CG SPI for non-even cornered rounded rects
        https://bugs.webkit.org/show_bug.cgi?id=190155

        Reviewed by Simon Fraser.

        Instead of creating bezier curves for the non-even corners of the rounded
        rects, we should use the optimized SPI provided by CG.

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::platformAddPathForRoundedRect):

2018-10-15  Don Olmstead  <don.olmstead@sony.com>

        Add stub implementation for accessibility objects
        https://bugs.webkit.org/show_bug.cgi?id=190608

        Reviewed by Michael Catanzaro.

        No new tests. No change in behavior.

        Add default implementation to associated cpp file. Removes the WPE
        specific stubs.

        * SourcesWPE.txt:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::detachWrapper):
        (WebCore::AXObjectCache::attachWrapper):
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification):
        (WebCore::AXObjectCache::frameLoadingEventPlatformNotification):
        (WebCore::AXObjectCache::platformHandleFocusedUIElementChanged):
        (WebCore::AXObjectCache::handleScrolledToAnchor):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment const):
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject const):
        * accessibility/AccessibilityObject.h:
        * accessibility/wpe/AXObjectCacheWPE.cpp: Removed.
        * accessibility/wpe/AccessibilityObjectWPE.cpp: Removed.

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Modernize BackForwardClient.h
        https://bugs.webkit.org/show_bug.cgi?id=190610

        Reviewed by Chris Dumez.

        * editing/markup.cpp:
        (WebCore::createPageForSanitizingWebContent):
        * history/BackForwardClient.h:
        * history/BackForwardController.h:
        (WebCore::BackForwardController::client):
        (WebCore::BackForwardController::client const):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::overlayPage):
        * loader/EmptyClients.cpp:
        (WebCore::pageConfigurationWithEmptyClients):
        (WebCore::createEmptyFrameNetworkingContext): Deleted.
        (WebCore::fillWithEmptyClients): Deleted.
        (WebCore::createEmptyEditorClient): Deleted.
        * loader/EmptyClients.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/PageConfiguration.cpp:
        (WebCore::PageConfiguration::PageConfiguration):
        * page/PageConfiguration.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2018-10-15  Timothy Hatcher  <timothy@apple.com>

        Add support for prefers-color-scheme media query
        https://bugs.webkit.org/show_bug.cgi?id=190499
        rdar://problem/45212025

        Reviewed by Dean Jackson.

        Test: css-dark-mode/prefers-color-scheme.html

        * Configurations/FeatureDefines.xcconfig: Added ENABLE_DARK_MODE_CSS.
        * css/CSSValueKeywords.in: Added light and dark.
        * css/MediaFeatureNames.h: Added prefers-color-scheme.
        * css/MediaQueryEvaluator.cpp:
        (WebCore::prefersColorSchemeEvaluate): Added.
        * css/MediaQueryExpression.cpp:
        (WebCore::featureWithValidIdent): Added prefers-color-scheme.
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setDarkModeCSSEnabled): Added.
        (WebCore::RuntimeEnabledFeatures::darkModeCSSEnabled const): Added.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::resetToConsistentState): Reset setUseDarkAppearance.
        (WebCore::InternalSettings::setUseDarkAppearance): Added.
        * testing/InternalSettings.h: Added setUseDarkAppearance.
        * testing/InternalSettings.idl: Ditto.

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Remove unused WebView._globalHistoryItem
        https://bugs.webkit.org/show_bug.cgi?id=190601

        Reviewed by Chris Dumez.

        This was a hack to give the client a more reliable current back/forward item, but it hasn't been used for years
        and it's adding unnecessary complexity to the history code.

        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        * loader/FrameLoaderClient.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::goToItem):
        (WebCore::HistoryController::updateForStandardLoad):
        (WebCore::HistoryController::updateForRedirectWithLockedBackForwardList):

2018-10-15  Chris Dumez  <cdumez@apple.com>

        Experiment: target=_blank on anchors should imply rel=noopener
        https://bugs.webkit.org/show_bug.cgi?id=190481

        Reviewed by Alex Christensen.

        As an experiment, try and make it so that target=_blank on anchors implies `rel=noopener` for improved security.
        WebContent can then request an opener relationship by using `rel=opener` instead.

        This change was discussed at:
        - https://github.com/whatwg/html/issues/4078

        We want to attempt this change is STP to see if it is Web-compatible. Preliminary testing seems to indicate
        that OAuth workflows still work.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        (WebCore::HTMLAnchorElement::handleClick):
        (WebCore::HTMLAnchorElement::effectiveTarget const):
        * html/HTMLAnchorElement.h:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setBlankAnchorTargetImpliesNoOpenerEnabled):
        (WebCore::RuntimeEnabledFeatures::blankAnchorTargetImpliesNoOpenerEnabled const):

2018-10-15  Andy Estes  <aestes@apple.com>

        [Apple Pay] New shipping methods are ignored when updating after the shippingaddresschange event
        https://bugs.webkit.org/show_bug.cgi?id=190560
        <rdar://problem/44559075>

        Reviewed by Youenn Fablet.

        When a PaymentDetailsUpdate with shipping options was specified to updateWith() after the
        shippingaddresschange event fires, ApplePayPaymentHandler needs to convert the shipping
        options to ShippingMethods and add them to the ShippingContactUpdate so that the Apple Pay
        UI renders the new options.

        Added test cases to http/tests/ssl/applepay/ApplePayShippingAddressChangeEventErrors.https.html.

        * Modules/applepay/ApplePayShippingMethod.idl:
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::computeShippingMethods):
        (WebCore::ApplePayPaymentHandler::shippingAddressUpdated):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::convert):
        (WebCore::MockPaymentCoordinator::showPaymentUI):
        (WebCore::MockPaymentCoordinator::completeShippingContactSelection):
        * testing/MockPaymentCoordinator.h:
        * testing/MockPaymentCoordinator.idl:

2018-10-15  Youenn Fablet  <youenn@apple.com>

        RTCPeerConnection.generateCertificate is not a function
        https://bugs.webkit.org/show_bug.cgi?id=173541
        <rdar://problem/32638029>

        Reviewed by Eric Carlson.

        Add support for RTCCertificate generation through libwebrtc certificate generator.
        Make generation in the webrtc network thread.
        Support is as per spec (ECDSA and RSASSA_PKCS).

        Partially covered by WPT tests.

        * css/StyleBuilder.h: Fixing build.
        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/webauthn/PublicKeyCredential.cpp: Fixing build.
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::generateCertificate):
        * Modules/mediastream/PeerConnectionBackend.h:
        (WebCore::PeerConnectionBackend::CertificateInformation::RSASSA_PKCS1_v1_5):
        (WebCore::PeerConnectionBackend::CertificateInformation::ECDSA_P256):
        (WebCore::PeerConnectionBackend::CertificateInformation::CertificateInformation):
        * Modules/mediastream/RTCCertificate.cpp: Added.
        (WebCore::RTCCertificate::create):
        (WebCore::RTCCertificate::RTCCertificate):
        * Modules/mediastream/RTCCertificate.h: Added.
        (WebCore::RTCCertificate::expires const):
        (WebCore::RTCCertificate::getFingerprints const):
        * Modules/mediastream/RTCCertificate.idl: Added.
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::certificateTypeFromAlgorithmIdentifier):
        (WebCore::RTCPeerConnection::generateCertificate):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCCertificateGenerator.cpp: Added.
        (WebCore::LibWebRTCCertificateGenerator::RTCCertificateGeneratorCallback::RTCCertificateGeneratorCallback):
        (WebCore::LibWebRTCCertificateGenerator::RTCCertificateGeneratorCallback::~RTCCertificateGeneratorCallback):
        (WebCore::LibWebRTCCertificateGenerator::keyParamsFromCertificateType):
        (WebCore::LibWebRTCCertificateGenerator::generateCertificate):
        * Modules/mediastream/libwebrtc/LibWebRTCCertificateGenerator.h: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::certificateGenerator):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:

2018-10-15  Simon Fraser  <simon.fraser@apple.com>

        Add compact logging for the paint-order RenderLayer tree
        https://bugs.webkit.org/show_bug.cgi?id=190592

        Reviewed by Zalan Bujtas.

        Add a way to dump the RenderLayer tree in paint order, which will be extended in future
        to show more dirty bit state.

        * rendering/RenderLayer.cpp:
        (WebCore::outputPaintOrderTreeLegend):
        (WebCore::outputIdent):
        (WebCore::outputPaintOrderTreeRecursive):
        (WebCore::showPaintOrderTree):
        * rendering/RenderLayer.h:

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Remove unused parameters from FrameLoaderClient::createFrame
        https://bugs.webkit.org/show_bug.cgi?id=190587

        Reviewed by Chris Dumez.

        * loader/EmptyClients.cpp:
        (WebCore::EmptyFrameLoaderClient::createFrame):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoaderClient.h:
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadSubframe):

2018-10-15  Andy Estes  <aestes@apple.com>

        [Apple Pay] Payment authorization results with ApplePayErrors should never be considered final
        https://bugs.webkit.org/show_bug.cgi?id=190559
        <rdar://problem/37250908>

        Reviewed by Anders Carlsson.

        When PaymentCoordinator thinks a payment authorization result is final it releases the
        active ApplePaySession. The Apple Pay UI is dismissed after a receiving a final result.

        However, WebCore::isFinalStateResult had the wrong idea about what was a final state,
        in some cases causing PaymentCoordinator to release the active session even when the UI is
        still presented. If the user authorizes payment again, the website will not receive another
        paymentauthorized event, and the Apple Pay UI will eventually time out waiting for a result.

        Specifically, isFinalStateResult thought that:

        (1) results with STATUS_SUCCESS were always final, even if they had errors
        (2) errors with code "unknown" were final

        Both of these assumptions are wrong. PassKit considers any result with errors to be
        non-final, even if an error has code "unknown."

        Fixed WebCore::isFinalStateResult to agree with what PassKit considers to be final results.

        Test: http/tests/ssl/applepay/ApplePaySessionFinalState.https.html

        * Modules/applepay/ApplePaySessionPaymentRequest.cpp:
        (WebCore::isFinalStateResult):
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::completePaymentSession):

2018-10-15  Andy Estes  <aestes@apple.com>

        [Payment Request] PaymentResponse should be a ContextDestructionObserver
        https://bugs.webkit.org/show_bug.cgi?id=190558

        Reviewed by Alex Christensen.

        Make PaymentResponse a ContextDestructionObserver so it has a ScriptExecutionContext to
        return for its override of EventTarget::scriptExecutionContext(). Do this instead of
        downcasting m_request to an ActiveDOMObject to ask for its context.

        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::accept):
        * Modules/paymentrequest/PaymentResponse.cpp:
        (WebCore::PaymentResponse::PaymentResponse):
        (WebCore::PaymentResponse::scriptExecutionContext const): Deleted.
        * Modules/paymentrequest/PaymentResponse.h:

2018-10-15  Andy Estes  <aestes@apple.com>

        [Payment Request] Use a PendingActivity token rather than calling (un)setPendingActivity
        https://bugs.webkit.org/show_bug.cgi?id=190557

        Reviewed by Alex Christensen.

        PaymentRequest has pending activity whenever there is an active payment handler, since
        user-initiated events can occur whenever the payment UI is displayed.

        Rather than manually track the pending activity with setPendingActivity() and
        unsetPendingActivity(), use a PendingActivity token tied to the lifetime of the active
        payment handler. Also, rewrite canSuspendForDocumentSuspension() in terms of
        hasPendingActivity().

        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::show):
        (WebCore::PaymentRequest::abortWithException):
        (WebCore::PaymentRequest::canSuspendForDocumentSuspension const):
        (WebCore::PaymentRequest::paymentMethodChanged):
        (WebCore::PaymentRequest::completeMerchantValidation):
        (WebCore::PaymentRequest::settleDetailsPromise):
        (WebCore::PaymentRequest::complete):
        (WebCore::PaymentRequest::cancel):
        * Modules/paymentrequest/PaymentRequest.h:

2018-10-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        Changing view scale should zoom to initial scale if the page is already at initial scale
        https://bugs.webkit.org/show_bug.cgi?id=190570
        <rdar://problem/45261877>

        Reviewed by Tim Horton.

        Add a getter for ViewportConfiguration's layout size scale factor.
        See Source/WebKit/ChangeLog for more details.

        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::layoutSizeScaleFactor const):

2018-10-15  Charlie Turner  <cturner@igalia.com>

        Fix build error with !LOG_DISABLED in Release mode
        https://bugs.webkit.org/show_bug.cgi?id=190465

        Reviewed by Michael Catanzaro.

        No tests due to no new functionality.

        * workers/service/ServiceWorkerRegistrationKey.cpp:
        * workers/service/ServiceWorkerRegistrationKey.h:

2018-10-15  Simon Fraser  <simon.fraser@apple.com>

        LayerListMutationDetector should take a reference
        https://bugs.webkit.org/show_bug.cgi?id=190586

        Reviewed by Zalan Bujtas.
        
        Change LayerListMutationDetector to take a RenderLayer&.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintList):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:
        (WebCore::LayerListMutationDetector::LayerListMutationDetector):
        (WebCore::LayerListMutationDetector::~LayerListMutationDetector):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::traverseVisibleNonCompositedDescendantLayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMapRecursive):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry):
        (WebCore::RenderLayerCompositor::recursiveRepaintLayer):
        (WebCore::RenderLayerCompositor::layerHas3DContent const):

2018-10-15  Simon Fraser  <simon.fraser@apple.com>

        Share some code to dirty z-order and normal flow lists when child layers are added or removed
        https://bugs.webkit.org/show_bug.cgi?id=190585

        Reviewed by Zalan Bujtas.

        Factor code which dirties the normal flow list and child stacking context z-order lists
        when a layer is added or removed.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::dirtyPaintOrderListsOnChildChange):
        * rendering/RenderLayer.h:

2018-10-15  Simon Fraser  <simon.fraser@apple.com>

        Make a helper function to check for reflection layers
        https://bugs.webkit.org/show_bug.cgi?id=190584

        Reviewed by Zalan Bujtas.

        Add RenderLayer::isReflectionLayer() which returns true if the passed layer
        is the layer of this layer's reflection. It's used in z-order list building.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateNormalFlowList):
        (WebCore::RenderLayer::rebuildZOrderLists):
        (WebCore::RenderLayer::collectLayers):
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:

2018-10-15  Simon Fraser  <simon.fraser@apple.com>

        RenderLayer::addChild() and removeChild() should take references
        https://bugs.webkit.org/show_bug.cgi?id=190582

        Reviewed by Zalan Bujtas.

        Pass the layer to be added or removed as a reference; it's never null.

        * rendering/RenderElement.cpp:
        (WebCore::addLayers):
        (WebCore::RenderElement::removeLayers):
        (WebCore::RenderElement::moveLayers):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::insertOnlyThisLayer):
        (WebCore::RenderLayer::removeOnlyThisLayer):
        * rendering/RenderLayer.h:

2018-10-15  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        [Cairo] Incorrect rendering for 135-deg skews
        https://bugs.webkit.org/show_bug.cgi?id=190513

        Compensation value to zero the the translation components
        of the transformation matrix is incorrect if the matrix
        has a shear factor.

        Reviewed by Žan Doberšek.

        Tests: fast/transforms/skew-x-135deg-with-gradient.html
               fast/transforms/skew-y-135deg-with-gradient.html

        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::drawPatternToCairoContext):

2018-10-15  Christopher Reid  <chris.reid@sony.com>

        [Curl][WinCairo] Add Public Suffix support to WinCairo
        https://bugs.webkit.org/show_bug.cgi?id=183060

        Reviewed by Alex Christensen.

        Add Public Suffix support to WinCairo using LibPSL.
        LibPSL has been added to WinCairoRequirements in v2018.10.09.

        * platform/Curl.cmake:
        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::searchCookies): Search for cookies using the topPrivatelyControlledDomain
        (WebCore::CookieJarDB::setCookie): Prevent cookies from being added under TLDs
        * platform/network/curl/PublicSuffixCurl.cpp: Added.
        (WebCore::isPublicSuffix):
        (WebCore::topPrivatelyControlledDomainInternal):
        (WebCore::topPrivatelyControlledDomain):

2018-10-15  Simon Fraser  <simon.fraser@apple.com>

        RenderLayer tree-related cleanup
        https://bugs.webkit.org/show_bug.cgi?id=190572

        Reviewed by Zalan Bujtas.

        Move code around so that functions related to parent/child and z-order tree structure
        are near the top of RenderLayer.cpp, since this is one of the primary functions of layers.
        
        Attempts to use inheritance or composition to separate out tree structure resulted in
        unwieldy code and/or performance regressions.
        
        The only behavior change is to store a bit for m_isStackingContext so that we don't have
        to consult the old style to know if it changed.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::insertOnlyThisLayer):
        (WebCore::RenderLayer::removeOnlyThisLayer):
        (WebCore::canCreateStackingContext):
        (WebCore::RenderLayer::shouldBeNormalFlowOnly const):
        (WebCore::RenderLayer::shouldBeStackingContext const):
        (WebCore::RenderLayer::setIsNormalFlowOnly):
        (WebCore::RenderLayer::setIsStackingContext):
        (WebCore::RenderLayer::setParent):
        (WebCore::RenderLayer::dirtyZOrderLists):
        (WebCore::RenderLayer::dirtyStackingContextZOrderLists):
        (WebCore::RenderLayer::dirtyNormalFlowList):
        (WebCore::RenderLayer::updateNormalFlowList):
        (WebCore::RenderLayer::rebuildZOrderLists):
        (WebCore::RenderLayer::collectLayers):
        (WebCore::RenderLayer::updateLayerListsIfNeeded):
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::RenderLayer::willBeDestroyed):
        (WebCore::RenderLayer::isDescendantOf const):
        (WebCore::RenderLayer::calculateClipRects const):
        (WebCore::compareZIndex): Deleted.
        * rendering/RenderLayer.h:

2018-10-15  Antti Koivisto  <antti@apple.com>

        [PSON] Prewarm system fallback fonts
        https://bugs.webkit.org/show_bug.cgi?id=190517

        Reviewed by Ryosuke Niwa.

        This seems to be ~2% progression in PSON PLT4 with large (40ms+) improvements on some pages
        after process swaps.

        * page/PrewarmInformation.h:
        (WebCore::PrewarmInformation::encode const):
        (WebCore::PrewarmInformation::decode):
        * page/ProcessWarming.cpp:
        (WebCore::ProcessWarming::collectPrewarmInformation):
        (WebCore::ProcessWarming::prewarmWithInformation):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::collectPrewarmInformation const):
        (WebCore::FontCache::prewarm):
        * platform/graphics/FontCache.h:
        (WebCore::FontCache::PrewarmInformation::isolatedCopy const):
        (WebCore::FontCache::PrewarmInformation::encode const):
        (WebCore::FontCache::PrewarmInformation::decode):

        Make font cache prewarm information a struct with encode/decode support and move it into FontCache scope.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontDatabase::collectionForFamily):
        (WebCore::FontCache::systemFallbackForCharacters):

        Collect the names of fonts that end up needing character specific system fallbacks.

        (WebCore::FontCache::collectPrewarmInformation const):

        Include them into prewarm information.

        (WebCore::FontCache::prewarm):

        Invoking CTFontCreateForCharactersWithLanguage for the correct named font seems sufficient to fully
        prewarm it for fallbacks (independent of size, locale or other characteristics).
        Any future calls to systemFallbackForCharacters are fast.

2018-10-15  Chris Dumez  <cdumez@apple.com>

        Restrict browsing context lookup by name to frames that are related to one another
        https://bugs.webkit.org/show_bug.cgi?id=190475

        Reviewed by Alex Christensen.

        Update our frame lookup by name logic to take in the active / requesting frame and
        only a return a frame that is related to it. By related to it, I mean:
        - Ancestor <-> Descendant relationship
        - Opener <-> Openee relationship

        Being able to look up unrelated frames makes process swapping difficult so we need
        to be stricter.

        This change is being discussed at:
        - https://github.com/whatwg/html/issues/313

        Tests: http/tests/dom/new-window-can-target-opener.html
               http/tests/dom/noopener-window-cannot-target-opener.html
               http/tests/dom/noopener-window-not-targetable.html
               http/tests/dom/noopener-window-not-targetable2.html
               http/tests/dom/noreferrer-window-not-targetable.html
               http/tests/dom/opened-window-not-targetable-after-disowning-opener.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::findFrameForNavigation):
        * page/FrameTree.cpp:
        (WebCore::isFrameFamiliarWith):
        (WebCore::FrameTree::find const):
        * page/FrameTree.h:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::targetFrame const):

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Shrink more enum classes
        https://bugs.webkit.org/show_bug.cgi?id=190540

        Reviewed by Chris Dumez.

        * Modules/notifications/NotificationDirection.h:
        * dom/Document.h:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/HistoryController.h:
        * loader/ShouldSkipSafeBrowsingCheck.h:
        * loader/ShouldTreatAsContinuingLoad.h:
        * page/AutoplayEvent.h:
        * page/ChromeClient.h:
        * page/DiagnosticLoggingClient.h:
        * page/Page.h:
        * platform/CookiesStrategy.h:
        * platform/audio/AudioSession.h:
        * platform/network/NetworkStorageSession.h:
        * platform/network/StoredCredentialsPolicy.h:
        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerRegistrationData.h:
        * workers/service/ServiceWorkerRegistrationOptions.h:
        * workers/service/ServiceWorkerTypes.h:
        * workers/service/ServiceWorkerUpdateViaCache.h:
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerRegistration.h:

2018-10-15  Patrick Griffis  <pgriffis@igalia.com>

        [GTK][WPE] Implement subprocess sandboxing
        https://bugs.webkit.org/show_bug.cgi?id=188568

        Reviewed by Michael Catanzaro.

        Link against libseccomp.

        * PlatformGTK.cmake:

2018-10-15  YUHAN WU  <yuhan_wu@apple.com>

        Implement error handler of MediaRecorder
        https://bugs.webkit.org/show_bug.cgi?id=190438

        Reviewed by Youenn Fablet.

        Test: imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-error.html

        Implement error event handler (onerror) for MediaRecorder and basic architecture of start() function.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::MediaRecorder):
        (WebCore::MediaRecorder::~MediaRecorder):
        (WebCore::MediaRecorder::stop):
        (WebCore::MediaRecorder::start):
        (WebCore::MediaRecorder::setNewRecordingState):
        (WebCore::MediaRecorder::scheduleDeferredTask):
        (WebCore::MediaRecorder::didAddOrRemoveTrack):
        * Modules/mediarecorder/MediaRecorder.h:
        * Modules/mediarecorder/MediaRecorder.idl:
        * Modules/mediarecorder/MediaRecorderErrorEvent.cpp: Added.
        (WebCore::MediaRecorderErrorEvent::create):
        (WebCore::MediaRecorderErrorEvent::MediaRecorderErrorEvent):
        (WebCore::MediaRecorderErrorEvent::eventInterface const):
        * Modules/mediarecorder/MediaRecorderErrorEvent.h: Added.
        * Modules/mediarecorder/MediaRecorderErrorEvent.idl: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:

2018-10-15  Chris Dumez  <cdumez@apple.com>

        Window's properties such as 'location' should not become null when it loses its browsing context
        https://bugs.webkit.org/show_bug.cgi?id=190539

        Reviewed by Alex Christensen.

        Window's properties such as 'location' should not become null when it loses its browsing context.
        This Webkit behavior is not standard and does not match other browsers so this patch makes it so
        that those properties persist.

        Tests: http/tests/dom/cross-origin-detached-window-properties.html
               http/tests/dom/same-origin-detached-window-properties.html

        * bindings/js/JSDOMBindingSecurity.cpp:
        (WebCore::BindingSecurity::shouldAllowAccessToDOMWindow):
        * bindings/js/JSDOMBindingSecurity.h:
        * bindings/js/JSDOMWindowProperties.cpp:
        (WebCore::jsDOMWindowPropertiesGetOwnPropertySlotNamedItemGetter):
        (WebCore::JSDOMWindowProperties::getOwnPropertySlot):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::getOwnPropertySlotCommon):
        (WebCore::putCommon):
        (WebCore::JSLocation::deleteProperty):
        (WebCore::JSLocation::deletePropertyByIndex):
        (WebCore::JSLocation::getOwnPropertyNames):
        (WebCore::JSLocation::defineOwnProperty):
        (WebCore::JSLocation::getPrototype):
        (WebCore::JSLocation::toStringName):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeGetterBodyDefinition):
        (GenerateAttributeSetterBodyDefinition):
        (GenerateOperationBodyDefinition):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectExcitingAttrGetter):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionExcitingFunctionBody):
        * crypto/SubtleCrypto.cpp:
        (WebCore::SubtleCrypto::SubtleCrypto):
        * crypto/SubtleCrypto.h:
        (WebCore::SubtleCrypto::create):
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        * page/Crypto.cpp:
        (WebCore::Crypto::Crypto):
        * page/Crypto.h:
        (WebCore::Crypto::create):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::frameDestroyed):
        (WebCore::DOMWindow::screen):
        (WebCore::DOMWindow::history):
        (WebCore::DOMWindow::crypto):
        (WebCore::DOMWindow::locationbar):
        (WebCore::DOMWindow::menubar):
        (WebCore::DOMWindow::personalbar):
        (WebCore::DOMWindow::scrollbars):
        (WebCore::DOMWindow::statusbar):
        (WebCore::DOMWindow::toolbar):
        (WebCore::DOMWindow::console const):
        (WebCore::DOMWindow::applicationCache):
        (WebCore::DOMWindow::navigator):
        (WebCore::DOMWindow::performance const):
        (WebCore::DOMWindow::location):
        (WebCore::DOMWindow::visualViewport):
        (WebCore::DOMWindow::styleMedia):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::crypto):

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Include EnumTraits.h less
        https://bugs.webkit.org/show_bug.cgi?id=190535

        Reviewed by Chris Dumez.

        * Modules/applepay/ApplePaySessionPaymentRequest.h:
        * Modules/applepay/PaymentAuthorizationStatus.h:
        * Modules/applicationmanifest/ApplicationManifest.h:
        * Modules/fetch/FetchHeaders.h:
        * Modules/webauthn/AuthenticatorTransport.h:
        * Modules/webauthn/PublicKeyCredentialType.h:
        * loader/ShouldSkipSafeBrowsingCheck.h:
        * loader/ShouldTreatAsContinuingLoad.h:
        * platform/Cookie.h:
        * platform/audio/AudioSession.h:
        * platform/mediastream/CaptureDevice.h:
        * platform/mediastream/MediaStreamRequest.h:
        * platform/mediastream/RealtimeMediaSourceSettings.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * platform/network/NetworkLoadInformation.h:
        * workers/service/ServiceWorkerClientType.h:
        * workers/service/ServiceWorkerTypes.h:
        * workers/service/ServiceWorkerUpdateViaCache.h:

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Remove InjectedBundle processing of back/forward lists
        https://bugs.webkit.org/show_bug.cgi?id=190459

        Reviewed by Chris Dumez.

        The uses of these functions are dead code I removed in rdar://problem/45180545
        Removing these functions is a step towards fixing the PSON history bugs.

        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoaderClient.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::goToItem):

2018-10-14  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Remove Option::useAsyncIterator
        https://bugs.webkit.org/show_bug.cgi?id=190567

        Reviewed by Saam Barati.

        * Configurations/FeatureDefines.xcconfig:

2018-10-15  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Fix EME build for GStreamer 1.14.x
        https://bugs.webkit.org/show_bug.cgi?id=190471

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (webkitMediaCommonEncryptionDecryptTransformCaps): The
        GST_PROTECTION_UNSPECIFIED_SYSTEM_ID #define won't be shipped
        until the GStreamer 1.16.0 release, so its use needs to be wrapped
        between a version check.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::initializationDataEncountered): Ditto.

2018-10-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Allow SPI clients to lay out at arbitrarily scaled sizes and scale to fit the view
        https://bugs.webkit.org/show_bug.cgi?id=190504
        <rdar://problem/45117760>

        Reviewed by Tim Horton.

        Add support in ViewportConfiguration for applying a layout size scale factor to the viewport. See below for
        more details.

        Tests: fast/viewport/ios/constant-width-viewport-after-changing-view-scale.html
               fast/viewport/ios/device-width-viewport-after-changing-view-scale.html

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::setViewLayoutSize):

        The viewport's layout size may now be changed alongside the layout size scale factor. If either of these two
        variables change, we recompute our minimum layout size and viewport configuration parameters.

        (WebCore::ViewportConfiguration::shouldIgnoreHorizontalScalingConstraints const):
        (WebCore::ViewportConfiguration::nativeWebpageParameters):
        (WebCore::ViewportConfiguration::testingParameters):
        (WebCore::ViewportConfiguration::updateConfiguration):

        Multiply the minimum scale, initial scale, and maximum scale by the layout size scale factor. This allows us to
        keep the document well-proportioned within the viewport, while still laying out at a different layout size.

        (WebCore::ViewportConfiguration::updateMinimumLayoutSize):

        Compute the minimum layout size by scaling the default layout size derived from our view's size.

        (WebCore::ViewportConfiguration::layoutWidth const):
        (WebCore::ViewportConfiguration::layoutHeight const):
        * page/ViewportConfiguration.h:

        Maintain the original initial scale, unaffected by the layout size scale factor. This is used when computing
        layout width and height to prevent scaling by the layout size scale factor twice when computing layout sizes.

        (WebCore::ViewportConfiguration::description const):

        Include the layout size scale factor in ViewportConfiguration's description string.

        (WebCore::ViewportConfiguration::Parameters::operator== const):
        (WebCore::operator<<):

2018-10-12  Youenn Fablet  <youenn@apple.com>

        Use downcast for use of RealtimeMediaSource in LibWebRTCMediaEndpoint
        https://bugs.webkit.org/show_bug.cgi?id=190533

        Reviewed by Chris Dumez.

        Clean-up work.
        No change of behavior.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::setExistingReceiverSourceTrack):
        * platform/mediastream/RealtimeIncomingAudioSource.h:
        (isType):
        * platform/mediastream/RealtimeIncomingVideoSource.h:
        (isType):
        * platform/mediastream/RealtimeMediaSource.h:

2018-10-12  Jer Noble  <jer.noble@apple.com>

        WebAVSampleBufferErrorListener's parent should be a WeakPtr.
        https://bugs.webkit.org/show_bug.cgi?id=190524
        <rdar://problem/44359307>

        Reviewed by Eric Carlson.

        Once WebAVSampleBufferErrorListener's parent is a WeakPtr, we no longer need to pass
        protectedSelf into the callOnMainThread lambdas; we can pass in the parent itself.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVSampleBufferErrorListener initWithParent:]):
        (-[WebAVSampleBufferErrorListener observeValueForKeyPath:ofObject:change:context:]):
        (-[WebAVSampleBufferErrorListener layerFailedToDecode:]):
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::destroyRenderers):

2018-10-12  Ryosuke Niwa  <rniwa@webkit.org>

        Address the review comment which was meant to be addressed in r237025.

        * editing/MarkupAccumulator.cpp:
        (WebCore::elementCannotHaveEndTag):

2018-10-12  Youenn Fablet  <youenn@apple.com> and Alejandro G. Castro  <alex@igalia.com>

        Refresh libwebrtc up to 343f4144be
        https://bugs.webkit.org/show_bug.cgi?id=190361

        Reviewed by Chris Dumez.

        This refresh should not change behavior but will allow us to implement better
        mdns candidate support and simulcast activation surfacing through addTransceiver.
        Covered by existing tests.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::doCreateAnswer):
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::MockLibWebRTCPeerConnection::CreateAnswer):
        * testing/MockLibWebRTCPeerConnection.h:
        (WebCore::MockRtpSender::GetParameters): Deleted.
        (WebCore::MockRtpSender::SetParameters): Deleted.
        (WebCore::MockRtpSender::GetDtmfSender const): Deleted.

2018-10-12  Alex Christensen  <achristensen@webkit.org>

        Allow encoding of small enum classes
        https://bugs.webkit.org/show_bug.cgi?id=190531

        Reviewed by Tim Horton.

        * Modules/webauthn/PublicKeyCredentialCreationOptions.h:
        * dom/Document.h:
        * editing/FontAttributeChanges.h:
        * history/CachedFrame.h:
        * loader/FrameLoaderTypes.h:
        * platform/CookiesStrategy.h:
        * platform/PasteboardItemInfo.h:
        * platform/ReferrerPolicy.h:

2018-10-12  Rob Buis  <rbuis@igalia.com>

        Solve the confusion around blankURL() and isBlankURL() in URL
        https://bugs.webkit.org/show_bug.cgi?id=158988

        Reviewed by Alex Christensen.

        The name isBlankURL is not accurate as the function tests the
        protocol, not the full URL. Choose protocolIsAbout to align with
        exisiting protocolIsData, protocolIsBlob etc.

        No tests as no change in functionality.

        * WebCore.order:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::loadApplicationManifest):
        (WebCore::DocumentLoader::startIconLoading):
        * loader/NavigationAction.cpp:
        (WebCore::shouldTreatAsSameOriginNavigation):
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::SerializerMarkupAccumulator::appendCustomAttributes):
        (WebCore::PageSerializer::serializeFrame):
        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForFrame const):
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForObjectSource const):
        * platform/URL.cpp:
        (WebCore::URL::protocolIsAbout const):
        (WebCore::URL::isBlankURL const): Deleted.
        * platform/URL.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::loadFull):

2018-10-12  Youenn Fablet  <youenn@apple.com>

        DOMCache should dereference itself as soon as stopped
        https://bugs.webkit.org/show_bug.cgi?id=190441

        Reviewed by Chris Dumez.

        Dereference the DOMCache as soon as its context is stopped instead of waiting for garbage collection.
        This allows freeing resources sooner in the network process.
        No observable change of behavior since the DOMCache becomes no-op when its context is stopped.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::~DOMCache):
        (WebCore::DOMCache::stop):

2018-10-12  Jer Noble  <jer.noble@apple.com>

        CRASH in WebCore::MediaPlayerPrivateAVFoundation::setPreload
        https://bugs.webkit.org/show_bug.cgi?id=190485
        <rdar://problem/34613350>

        Reviewed by Eric Carlson.

        Crash analytics show that a pure-virtual function is called by MediaPlayerPrivateAVFoundation::setPreload(), and
        the likely cause of that pure-virtual function call is that the MediaPlayerPrivateAVFoundation object itself has
        been destroyed, likely as a side effect of calling MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL().
        The usual suspect for this kind of crash is due to calling into JS (e.g., from a callback passed up to
        HTMLMediaElement). Code inspection hasn't yielded any good hints about why this might be occurring, so we will
        add a ScriptDisallowedScope assertion inside HTMLMediaElement::prepareToPlay(), to generate a good crashlog
        showing exactly what callback is resulting in a JS call. But just in case the deallocation is not due to JS,
        also add an explicit strong-ref inside MediaPlayer::prepareToPlay.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::prepareToPlay):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::prepareToPlay):

2018-10-12  Jer Noble  <jer.noble@apple.com>

        Null-dereference in SourceBufferPrivateAVFObjC::outputObscuredDueToInsufficientExternalProtectionChanged
        https://bugs.webkit.org/show_bug.cgi?id=190490
        <rdar://problem/42213807>

        Reviewed by Eric Carlson.

        Crash analytics show a null dereference occurring, likely because m_mediaSource is null.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::outputObscuredDueToInsufficientExternalProtectionChanged):

2018-10-11  Don Olmstead  <don.olmstead@sony.com>

        Add Houdini specs to features.json
        https://bugs.webkit.org/show_bug.cgi?id=190494
        <rdar://problem/45211879>

        Unreviewed fix.

        Specifications should not reference other specifications. Also
        move Worklet into the specifications section.

        * features.json:

2018-10-11  Youenn Fablet  <youenn@apple.com>

        IOS 12 - Service worker cache not shared when added to homescreen
        https://bugs.webkit.org/show_bug.cgi?id=190269
        <rdar://problem/45009961>

        Reviewed by Alex Christensen.

        Expose Cache Storage API when Service Worker API is exposed.
        This is used for API tests.

        * dom/ScriptExecutionContext.h: Make hasServiceWorkerScheme
        available outside SERVICE_WORKER compilation flag since used by DOMWindowCaches.
        * dom/ScriptExecutionContext.cpp: Ditto.
        * Modules/cache/DOMWindowCaches.idl:

2018-10-10  Simon Fraser  <simon.fraser@apple.com>

        Hide RenderLayer z-order and normal flow lists behind iterators
        https://bugs.webkit.org/show_bug.cgi?id=190457

        Reviewed by Zalan Bujtas.

        Expose the positive z-order, negative z-order and normal flow lists
        from RenderLayer as iterators rather than vectors of raw pointers.
        
        This hides the fact that the vectors can be null, and allows for easier casting in future.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::update3DTransformedDescendantStatus):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintList):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::hitTestList):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::traverseVisibleNonCompositedDescendantLayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMapRecursive):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry):
        (WebCore::RenderLayerCompositor::recursiveRepaintLayer):
        (WebCore::RenderLayerCompositor::needsContentsCompositingLayer const):
        (WebCore::RenderLayerCompositor::layerHas3DContent const):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):

2018-10-11  Don Olmstead  <don.olmstead@sony.com>

        Add Houdini specs to features.json
        https://bugs.webkit.org/show_bug.cgi?id=190494

        Reviewed by Simon Fraser.

        Add CSS Typed OM Level 1, CSS Layout API Level 1, CSS Animation
        Worklet, and group them under a Houdini feature set.

        * features.json:

2018-10-11  Ross Kirsling  <ross.kirsling@sony.com>

        [WTF] Semaphore.h conflicts with POSIX header
        https://bugs.webkit.org/show_bug.cgi?id=190486

        Reviewed by Yusuke Suzuki.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:

2018-10-11  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Support arbitrary video resolution in getUserMedia API
        https://bugs.webkit.org/show_bug.cgi?id=189734

        Reviewed by Xabier Rodriguez-Calvar.

        Implement arbitrary video resolution for the getUserMedia API in GStreamer.

        Fix the MockRealtimeMediaSource device list to make devices properties match
        test expectations.

        Reactivate tests that were failling because of that.

        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::standardVideoSizes):
        (WebCore::standardVideoSizes): Deleted.
        * platform/mediastream/RealtimeVideoSource.h:
        * platform/mediastream/VideoPreset.h:
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        (WebCore::GStreamerVideoPreset::create):
        (WebCore::GStreamerVideoPreset::GStreamerVideoPreset):
        (WebCore::GStreamerVideoCaptureSource::GStreamerVideoCaptureSource):
        (WebCore::GStreamerVideoCaptureSource::capabilities):
        (WebCore::GStreamerVideoCaptureSource::generatePresets):
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::defaultDevices):

2018-10-11  Keith Rollin  <krollin@apple.com>

        CURRENT_ARCH should not be used in Run Script phase.
        https://bugs.webkit.org/show_bug.cgi?id=190407
        <rdar://problem/45133556>

        Reviewed by Alexey Proskuryakov.

        CURRENT_ARCH is used in a number of Xcode Run Script phases. However,
        CURRENT_ARCH is not well-defined during this phase (and may even have
        the value "undefined") since this phase is run just once per build
        rather than once per supported architecture. Migrate away from
        CURRENT_ARCH in favor of ARCHS, either by iterating over ARCHS and
        performing an operation for each value, or by picking the first entry
        in ARCHS and using that as a representative value.

        No new tests -- no functional changes.

        * DerivedSources.make: When forming TARGET_TRIPLE_FLAGS, grab the
        first entry in ARCHS rather than use CURRENT_ARCH.

2018-10-11  Daniel Bates  <dabates@apple.com>

        Support building WebKit for macOS Mojave using a newer SDK
        https://bugs.webkit.org/show_bug.cgi?id=190431

        Reviewed by Andy Estes.

        * platform/network/cocoa/CookieCocoa.mm:
        (WebCore::coreSameSitePolicy):
        (WebCore::nsSameSitePolicy):

2018-10-11  Daniel Bates  <dabates@apple.com>

        [iOS] Add typedef for WebEvent keyboard flags
        https://bugs.webkit.org/show_bug.cgi?id=190435

        Reviewed by Wenson Hsieh.

        Currently WebEvent and UIKit SPI are intertwined when it comes to keyboard flags. It seems sufficient
        to have WebEvent defined its own keyboard flags so that callers do not need to be aware of UIKit SPI.

        No functionality changed. So, no new tests.

        * platform/ios/WebEvent.h:
        * platform/ios/WebEvent.mm:
        (-[WebEvent keyboardFlags]):

2018-10-11  Antti Koivisto  <antti@apple.com>

        Use finer grained locking in FontDatabase
        https://bugs.webkit.org/show_bug.cgi?id=190467

        Reviewed by Alex Christensen.

        * platform/graphics/FontCache.h:

        Also use ListHashSet for prewarming info so we can prewarm in the same order the fonts were
        seen last time.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontDatabase::collectionForFamily):

        Only hold the lock when accessing the hashmap. There is no need to hold it during font construction
        which can take a long time.

        (WebCore::FontDatabase::fontForPostScriptName):

        This is currently not prewarmed from a thread so no need for locking.

        (WebCore::FontDatabase::clear):

2018-10-11  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Fix race condition in GStreamerVideoDecoder
        https://bugs.webkit.org/show_bug.cgi?id=190470

        The GStreamerVideoDecoder.m_dtsPtsMap filed is accessed from
        the main thread and some GStreamer streaming thread, make sure
        to protect its access.

        And use WTF::StdMap instead of std::map.

        Reviewed by Philippe Normand.

        Manually tested and a random crash is gone.

        * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:
        (WebCore::GStreamerVideoDecoder::newSampleCallback):

2018-10-11  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][MSE] Fix height calculation for streams with source aspect ratio
        https://bugs.webkit.org/show_bug.cgi?id=190464

        Reviewed by Xabier Rodriguez-Calvar.

        This patch is authored by Nikola Veljkovic <Nikola.Veljkovic@zenterio.com>

        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::getVideoResolutionFromCaps): Reverse the SAR adjustment to "undo" it
        instead of applying it twice.

2018-10-11  Alejandro G. Castro  <alex@igalia.com>

        [GTK][WPE] Add mediaDevices.enumerateDevices support
        https://bugs.webkit.org/show_bug.cgi?id=185761

        Reviewed by Youenn Fablet.

        We are adopting the same policy COCOA is using when returning the
        list of media devices if the user does not have persistent
        access. Namely, we just return the first media device for audio
        and video capture.

        * Modules/mediastream/MediaDevicesRequest.cpp:
        (WebCore::MediaDevicesRequest::filterDeviceList): Add support for
        other platforms when filtering devices if there is no persistent
        access to the origin.

2018-10-10  Chris Dumez  <cdumez@apple.com>

        Rename a couple of DOMWindowProperty virtual functions
        https://bugs.webkit.org/show_bug.cgi?id=190458

        Reviewed by Geoffrey Garen.

        Rename a couple of DOMWindowProperty virtual functions as the current naming no longer makes
        sense after recent refactoring.

        disconnectFrameForDocumentSuspension() was renamed to suspendForPageCache(), and
        reconnectFrameFromDocumentSuspension(Frame*) was renamed to resumeFromPageCache().
        DOMWindowProperty objects no longer need to disconnect / reconnect from their
        frame since they now get their frame from their associated Window. However, some
        DOMWindowProperty subclasses do have some page cache suspension / resuming logic
        implemented of overrides of these functions.

        Also drop the disconnectDOMWindowProperties() / reconnectDOMWindowProperties()
        methods in DOMWindow. The naming made little sense as it does not really
        disconnect those properties in any way. Instead, inline them in
        DOMWindow's suspendForPageCache() / resumeFromPageCache() since these are
        the only callers.

        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        (WebCore::DOMWindowIndexedDatabase::suspendForPageCache):
        (WebCore::DOMWindowIndexedDatabase::resumeFromPageCache):
        (WebCore::DOMWindowIndexedDatabase::disconnectFrameForDocumentSuspension): Deleted.
        (WebCore::DOMWindowIndexedDatabase::reconnectFrameFromDocumentSuspension): Deleted.
        * Modules/indexeddb/DOMWindowIndexedDatabase.h:
        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::open):
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::suspendForPageCache):
        (WebCore::DOMApplicationCache::resumeFromPageCache):
        (WebCore::DOMApplicationCache::disconnectFrameForDocumentSuspension): Deleted.
        (WebCore::DOMApplicationCache::reconnectFrameFromDocumentSuspension): Deleted.
        * loader/appcache/DOMApplicationCache.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::suspendForPageCache):
        (WebCore::DOMWindow::resumeFromPageCache):
        (WebCore::DOMWindow::suspendForDocumentSuspension): Deleted.
        (WebCore::DOMWindow::resumeFromDocumentSuspension): Deleted.
        (WebCore::DOMWindow::disconnectDOMWindowProperties): Deleted.
        (WebCore::DOMWindow::reconnectDOMWindowProperties): Deleted.
        * page/DOMWindow.h:
        * page/DOMWindowExtension.cpp:
        (WebCore::DOMWindowExtension::suspendForPageCache):
        (WebCore::DOMWindowExtension::resumeFromPageCache):
        (WebCore::DOMWindowExtension::disconnectFrameForDocumentSuspension): Deleted.
        (WebCore::DOMWindowExtension::reconnectFrameFromDocumentSuspension): Deleted.
        * page/DOMWindowExtension.h:
        * page/DOMWindowProperty.cpp:
        (WebCore::DOMWindowProperty::suspendForPageCache):
        (WebCore::DOMWindowProperty::resumeFromPageCache):
        (WebCore::DOMWindowProperty::disconnectFrameForDocumentSuspension): Deleted.
        (WebCore::DOMWindowProperty::reconnectFrameFromDocumentSuspension): Deleted.
        * page/DOMWindowProperty.h:

2018-10-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: create special Network waterfall for media events
        https://bugs.webkit.org/show_bug.cgi?id=189773
        <rdar://problem/44626605>

        Reviewed by Joseph Pecoraro.

        Test: http/tests/inspector/dom/didFireEvent.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::addEventListenersToNode): Added.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::addEventListenersToNodeImpl): Added.

        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::EventFiredCallback): Added.
        (WebCore::EventFiredCallback::create): Added.
        (WebCore::EventFiredCallback::operator==): Added.
        (WebCore::EventFiredCallback::handleEvent): Added.
        (WebCore::EventFiredCallback::EventFiredCallback): Added.
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMAgent::addEventListenersToNode): Added.

2018-10-10  Daniel Bates  <dabates@apple.com>

        [iOS] Cleanup -[WAKView _selfHandleEvent:] and -[WAKWindow sendEventSynchronously:]
        https://bugs.webkit.org/show_bug.cgi?id=190402

        Reviewed by Anders Carlsson.

        Unindent case statements. Remove use of default case statements with body ASSERT_NOT_REACHED()
        to catch the cases of a missing enumerator. By omitting the default case statement we turn
        such a scenario into a compile-time error instead of handling it as a runtime error.

        * platform/ios/wak/WAKView.mm:
        (-[WAKView _selfHandleEvent:]):
        * platform/ios/wak/WAKWindow.mm:
        (-[WAKWindow sendEventSynchronously:]):

2018-10-05  Ryosuke Niwa  <rniwa@webkit.org>

        Rename MarkupAccumulator::appendStartTag, appendElement, etc... for clarity
        https://bugs.webkit.org/show_bug.cgi?id=190308

        Reviewed by Darin Adler.

        Renamed appendStartTag and appendEndTag to startAppendingNode and endAppendingNode since serialize any node,
        not just elements which produce start and end tags.

        Renamed appendElement and appendEndElement to appendStartTag and appendEndTag since that's what they do.

        * editing/MarkupAccumulator.cpp:
        (WebCore::elementCannotHaveEndTag): Made this a static local function.
        (WebCore::shouldSelfClose): Ditto.
        (WebCore::MarkupAccumulator::serializeNodesWithNamespaces):
        (WebCore::MarkupAccumulator::startAppendingNode): Renamed from appendStartTag.
        (WebCore::MarkupAccumulator::endAppendingNode): Renamed from appendEndElement and merged appendEndMarkup here.
        (WebCore::MarkupAccumulator::appendTextSubstring): Deleted. This was only used by StyledMarkupAccumulator.
        (WebCore::MarkupAccumulator::appendStringView): Added.
        (WebCore::MarkupAccumulator::appendStartTag): Renamed from appendElement.
        (WebCore::MarkupAccumulator::appendCloseTag):
        (WebCore::MarkupAccumulator::appendNonElementNode): Renamed from appendStartMarkup. No longer serializes
        an element. StyledMarkupAccumulator had a check before calling this function already so this clarifies
        the purpose of this function.
        (WebCore::MarkupAccumulator::appendElement): Deleted.
        (WebCore::MarkupAccumulator::appendEndMarkup): Deleted. Merged into appendEndTag.
        * editing/MarkupAccumulator.h:
        (WebCore::MarkupAccumulator::appendNodeEnd): Renamed from appendEndTag.
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::wrapWithNode):
        (WebCore::StyledMarkupAccumulator::appendStartTag): Renamed from appendElement.
        (WebCore::StyledMarkupAccumulator::appendEndTag): Renamed from appendEndElement.
        (WebCore::StyledMarkupAccumulator::traverseNodesForSerialization):
        (WebCore::StyledMarkupAccumulator::appendNodeToPreserveMSOList): Use String::substring directly instead of
        going through appendTextSubstring which has been deleted.
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::SerializerMarkupAccumulator::appendStartTag): Renamed from appendElement.
        (WebCore::PageSerializer::SerializerMarkupAccumulator::appendEndTag): Renamed from appendEndElement.

2018-10-10  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, attempt to fix the build with current SDKs.

        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::getPublicKeyComponents):

2018-10-10  Brent Fulgham  <bfulgham@apple.com>

        Only report the supported WebGL version
        https://bugs.webkit.org/show_bug.cgi?id=190434
        <rdar://problem/45024677>

        Reviewed by Dean Jackson.

        Tested by fast/canvas/webgl/gl-getstring.html

        Revise getParameter(gl.VERSION) to only return the WebGL version without the hardware and
        driver-specific details available through the low-level OpenGL driver interface. These details
        are not needed for WebGL use and expose information about the user's system that we do not
        need to share.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getParameter):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getParameter):

2018-10-10  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Unreviewed, add missing headers for inline functions
        https://bugs.webkit.org/show_bug.cgi?id=190429

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:

2018-10-10  Tim Horton  <timothy_horton@apple.com>

        Share more WKShareSheet code between macOS and iOS, and fix a few bugs
        https://bugs.webkit.org/show_bug.cgi?id=190420

        Reviewed by Simon Fraser.

        Test: fast/web-share/share-with-no-url.html

        * page/Navigator.cpp:
        (WebCore::Navigator::share):
        * page/ShareData.h:
        Make 'url' an optional field on ShareDataWithParsedURL, and don't
        reject the share() promise if the URL is totally empty (as opposed to invalid).

2018-10-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: notify the frontend when a canvas has started recording via console.record
        https://bugs.webkit.org/show_bug.cgi?id=190306

        Reviewed by Brian Burg.

        Updated existing tests: LayoutTests/inspector/canvas/recording-2d.html
                                LayoutTests/inspector/canvas/recording-bitmaprenderer.html
                                LayoutTests/inspector/canvas/recording-webgl-snapshots.html
                                LayoutTests/inspector/canvas/recording-webgl.html

        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::startRecording):
        (WebCore::InspectorCanvasAgent::consoleStartRecordingCanvas):

        * inspector/InspectorCanvas.h:
        Default `singleFrame` to false to better match the default behaviour of other `console`
        functions (`profile` doesn't stop until `profileEnd` is called, so the same should be true
        of `record` and `recordEnd`).

2018-10-10  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Rename createXXX to tryCreateXXX if it can return RefPtr
        https://bugs.webkit.org/show_bug.cgi?id=190429

        Reviewed by Saam Barati.

        Use `tryCreate` or new `create`. If we use new `create`, we can use Ref<> and remove null check.

        * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp:
        (WebCore::CDMSessionClearKey::cachedKeyForKeyID const):
        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::jsValueWithDictionaryInContext):
        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::AudioBuffer):
        (WebCore::AudioBuffer::getChannelData):
        * Modules/webvr/VREyeParameters.cpp:
        (WebCore::VREyeParameters::offset const):
        * Modules/webvr/VRFrameData.cpp:
        (WebCore::matrixToArray):
        * Modules/webvr/VRPose.cpp:
        (WebCore::optionalFloat3ToJSCArray):
        (WebCore::VRPose::position const):
        (WebCore::VRPose::orientation const):
        * Modules/webvr/VRStageParameters.cpp:
        (WebCore::VRStageParameters::sittingToStandingTransform const):
        * bindings/js/ReadableStreamDefaultController.h:
        (WebCore::ReadableStreamDefaultController::enqueue):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readArrayBufferView):
        * crypto/gcrypt/CryptoKeyRSAGCrypt.cpp:
        (WebCore::CryptoKeyRSA::algorithm const):
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::algorithm const):
        * css/DOMMatrixReadOnly.cpp:
        (WebCore::DOMMatrixReadOnly::toFloat32Array const):
        (WebCore::DOMMatrixReadOnly::toFloat64Array const):
        * css/FontFace.cpp:
        (WebCore::FontFace::create):
        * dom/TextEncoder.cpp:
        (WebCore::TextEncoder::encode const):
        * html/ImageData.cpp:
        (WebCore::ImageData::ImageData):
        * html/ImageData.h:
        (WebCore::ImageData::data const):
        (): Deleted.
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::bufferData):
        (WebCore::WebGL2RenderingContext::bufferSubData):
        (WebCore::WebGL2RenderingContext::getInternalformatParameter):
        (WebCore::WebGL2RenderingContext::getParameter):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getParameter):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::getUniform):
        (WebCore::WebGLRenderingContextBase::getVertexAttrib):
        (WebCore::WebGLRenderingContextBase::getWebGLFloatArrayParameter):
        (WebCore::WebGLRenderingContextBase::getWebGLIntArrayParameter):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::extractKeyURIKeyIDAndCertificateFromInitData):
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp:
        (WebCore::CDMSessionAVFoundationCF::generateKeyRequest):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::shouldWaitForLoadingOfResource):
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::generateKeyRequest):
        (WebCore::CDMSessionAVContentKeySession::releaseKeys):
        (WebCore::CDMSessionAVContentKeySession::update):
        (WebCore::CDMSessionAVContentKeySession::generateKeyReleaseMessage):
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
        (WebCore::CDMSessionAVFoundationObjC::generateKeyRequest):
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::generateKeyRequest):
        (WebCore::CDMSessionAVStreamSession::releaseKeys):
        (WebCore::CDMSessionAVStreamSession::generateKeyReleaseMessage):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::getRGBAImageData const):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::getImageData):
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData const):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplySoftware):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::unmultipliedResult):
        (WebCore::FilterEffect::premultipliedResult):
        (WebCore::FilterEffect::copyUnmultipliedResult):
        (WebCore::FilterEffect::copyPremultipliedResult):
        (WebCore::FilterEffect::createUnmultipliedImageResult):
        (WebCore::FilterEffect::createPremultipliedImageResult):
        * platform/graphics/win/ImageBufferDataDirect2D.cpp:
        (WebCore::ImageBufferData::getData const):
        * platform/mac/SerializedPlatformRepresentationMac.mm:
        (WebCore::jsValueWithDictionaryInContext):
        * platform/mock/mediasource/MockBox.cpp:
        (WebCore::MockBox::peekType):
        (WebCore::MockBox::peekLength):
        (WebCore::MockTrackBox::MockTrackBox):
        (WebCore::MockInitializationBox::MockInitializationBox):
        (WebCore::MockSampleBox::MockSampleBox):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):
        * testing/LegacyMockCDM.cpp:
        (WebCore::initDataPrefix):
        (WebCore::keyPrefix):
        (WebCore::keyRequest):

2018-10-10  Daniel Bates  <dabates@apple.com>

        [iOS] Compare input string to UIKeyInput constants using string comparison instead of pointer comparison
        https://bugs.webkit.org/show_bug.cgi?id=190432

        Reviewed by Tim Horton.

        Pointer comparision is brittle. We should be more forgiving and perform string comparision
        of an input string to a UIKeyInput constant.

        * platform/ios/WebEvent.mm:
        (normalizedStringWithAppKitCompatibilityMapping):

2018-10-10  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r236802.

        Working on getting the HTML spec updated instead
        (https://github.com/whatwg/html/pull/4079)

        Reverted changeset:

        "Passing noopener=NOOPENER to window.open() should cause the
        new window to not have an opener"
        https://bugs.webkit.org/show_bug.cgi?id=190251
        https://trac.webkit.org/changeset/236802

2018-10-10  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        XMLHttpRequest should use reportExtraMemoryAllocated/reportExtraMemoryVisited instead of deprecatedReportExtraMemory
        https://bugs.webkit.org/show_bug.cgi?id=190279

        Reviewed by Ryosuke Niwa.

        This patch switches deprecatedReportExtraMemory to reportExtraMemoryAllocated/reportExtraMemoryVisited
        in XMLHttpRequest. We report extra memory allocation when the readyState becomes DONE. And memoryCost
        function returns the memory cost which is based on the readyState and m_responseBuilder.
        We annotate XMLHttpRequest with ReportExtraMemoryCost to use reportExtraMemoryVisited automatically with
        memoryCost() function.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::changeState):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::internalAbort):
        (WebCore::XMLHttpRequest::networkErrorTimerFired):
        (WebCore::XMLHttpRequest::memoryCost const):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didReachTimeout):
        (WebCore::XMLHttpRequest::dropProtection): Deleted.
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:

2018-10-09  Antoine Quint  <graouts@apple.com>

        Remove the frames() timing function
        https://bugs.webkit.org/show_bug.cgi?id=190034
        <rdar://problem/44827544>

        Reviewed by Dean Jackson.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createTimingFunctionValue):
        * css/CSSTimingFunctionValue.cpp:
        (WebCore::CSSFramesTimingFunctionValue::customCSSText const): Deleted.
        (WebCore::CSSFramesTimingFunctionValue::equals const): Deleted.
        * css/CSSTimingFunctionValue.h:
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapAnimationTimingFunction):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals const):
        (WebCore::CSSValue::cssText const):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isStepsTimingFunctionValue const):
        (WebCore::CSSValue::isFramesTimingFunctionValue const): Deleted.
        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeAnimationTimingFunction):
        (WebCore::consumeFrames): Deleted.
        * platform/animation/TimingFunction.cpp:
        (WebCore::operator<<):
        (WebCore::TimingFunction::transformTime const):
        (WebCore::TimingFunction::createFromCSSValue):
        * platform/animation/TimingFunction.h:
        (WebCore::TimingFunction::isStepsTimingFunction const):
        (WebCore::TimingFunction::isFramesTimingFunction const): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::animationCanBeAccelerated const):
        (WebCore::animationHasFramesTimingFunction): Deleted.

2018-10-09  Devin Rousso  <drousso@apple.com>

        Web Inspector: show redirect requests in Network and Timelines tabs
        https://bugs.webkit.org/show_bug.cgi?id=150005
        <rdar://problem/5378164>

        Reviewed by Joseph Pecoraro.

        Updated existing test http/tests/inspector/network/resource-timing.html.

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildObjectForTiming):
        (WebCore::InspectorNetworkAgent::didFinishLoading):
        Add missing fields for `Network.types.ResourceTiming`.

2018-10-09  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION(r234620): SVGLangSpace::svgAttributeChanged() should invalidate the renderer of the SVGGeometryElement descendant only
        https://bugs.webkit.org/show_bug.cgi?id=190411

        Reviewed by Simon Fraser.

        Test: svg/dynamic-updates/SVGStopElement-dom-xml-lang-attrr.html

        When changing the attributes of the SVGLangSpace, we should invalidate
        the renderer of the SVGGeometryElement descendant only. Renderer of other
        elements, like SVGStopElement, should not be invalidated because they do
        not have geometry and they can be used as resources for drawing another
        SVGGeometryElement.

        * svg/SVGElement.h:
        (WebCore::SVGElement::isSVGGeometryElement const):
        * svg/SVGGeometryElement.h:
        (isType):
        * svg/SVGLangSpace.cpp:
        (WebCore::SVGLangSpace::svgAttributeChanged):

2018-10-09  Chris Dumez  <cdumez@apple.com>

        Anchor target should be ignored on activation when the download attribute is set
        https://bugs.webkit.org/show_bug.cgi?id=190408

        Reviewed by Geoffrey Garen.

        Anchor target should be ignored on activation when the download attribute is set:
        - https://html.spec.whatwg.org/#the-a-element:downloading-hyperlinks-2

        When the download attribute is set, we should use the "download the hyperlink" algorithm [1]
        instead of the "follow the hyperlink" [2] algorithm.

        Note that the "download the hyperlink" triggers a download and ignores the target attribute
        entirely.

        This is important as an anchor element with target=_blank and the download attribute set may
        fail because of Safari's popup blocker if we do not disregard the anchor target.

        [1] https://html.spec.whatwg.org/#downloading-hyperlinks
        [2] https://html.spec.whatwg.org/#following-hyperlinks-2

        Tests: fast/dom/HTMLAnchorElement/anchor-file-blob-download-blank-base-target-popup-not-allowed.html
               fast/dom/HTMLAnchorElement/anchor-file-blob-download-blank-target-popup-not-allowed.html

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

2018-10-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Complex text crashes with harfbuzz 1.8.8
        https://bugs.webkit.org/show_bug.cgi?id=190409

        Reviewed by Žan Doberšek.

        We discovered that harfbuzz 1.8.8 breaks WebKit by changing the ownership semantics of
        hb_icu_get_unicode_funcs() from (transfer full) to (transfer none). Our code was actually
        expecting (transfer none), so it's not immediately clear to me why it's crashing now, but
        doesn't matter as Behdad recommends removing this line of code because it hasn't been
        been needed for many years.

        This should be covered by all our complex text tests if the bots were upgraded to the newer
        harfbuzz.

        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):

2018-10-09  Daniel Bates  <dabates@apple.com>

        [iOS] Cleanup EventHandler::passSubframeEventToSubframe()
        https://bugs.webkit.org/show_bug.cgi?id=190390

        Reviewed by Wenson Hsieh.

        Unindent case statements in switch block and use more auto.

        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::passSubframeEventToSubframe):

2018-10-09  Daniel Bates  <dabates@apple.com>

        Cleanup WebEvent.mm
        https://bugs.webkit.org/show_bug.cgi?id=190391

        Reviewed by Wenson Hsieh.

        Unindent case statements in switch blocks.

        * platform/ios/WebEvent.mm:
        (-[WebEvent _typeDescription]):
        (-[WebEvent _modiferFlagsDescription]):
        (-[WebEvent _touchPhaseDescription:]):
        (-[WebEvent _eventDescription]):

2018-10-09  Oriol Brufau  <obrufau@igalia.com>

        Resolve inset properties to computed style when there is overconstraintment
        https://bugs.webkit.org/show_bug.cgi?id=188711

        Reviewed by Manuel Rego Casasnovas.

        This patch makes WebKit behave closer to Blink. Specifically,
         - In overconstrained relative or absolute positioning, inset properties resolve
           to the computed value (absolutizing percentages) instead of to the used value.
         - In fixed positioning, the resolved value of non-'auto' values is no longer
           increased by the border of the containg block.

        This patch can slighlty alter the resolved value if it's a long decimal number.

        Tests: imported/w3c/web-platform-tests/css/cssom/getComputedStyle-insets-absolute.html
               imported/w3c/web-platform-tests/css/cssom/getComputedStyle-insets-fixed.html
               imported/w3c/web-platform-tests/css/cssom/getComputedStyle-insets-nobox.html
               imported/w3c/web-platform-tests/css/cssom/getComputedStyle-insets-relative.html
               imported/w3c/web-platform-tests/css/cssom/getComputedStyle-insets-static.html
               imported/w3c/web-platform-tests/css/cssom/getComputedStyle-insets-sticky.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::positionOffsetValue):
        * rendering/RenderBox.h:

2018-10-09  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import CTAP HID message and packet structure from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=189289
        <rdar://problem/44120310>

        Reviewed by Brent Fulgham.

        This patch imports CTAP HID message and packet structure:
        https://fidoalliance.org/specs/fido-v2.0-ps-20170927/fido-client-to-authenticator-protocol-v2.0-ps-20170927.html#message-and-packet-structure
        from Chromium. With this library, WebKit can now turn binaries into messages that CTAP devices could understand.
        This patch contains the following Chromium files and modifies them to fit into WebKit:
        https://cs.chromium.org/chromium/src/device/fido/fido_constants.cc?l=1&rcl=1efcfbeaf4e4cedf58716e1982b5702770571a75
        https://cs.chromium.org/chromium/src/device/fido/fido_constants.h?l=1&rcl=1efcfbeaf4e4cedf58716e1982b5702770571a75
        https://cs.chromium.org/chromium/src/device/fido/hid/fido_hid_message.cc?l=1&rcl=387f3725de2842e0e6b7175a9b2ed472b0cf781a
        https://cs.chromium.org/chromium/src/device/fido/hid/fido_hid_message.h?rcl=1efcfbeaf4e4cedf58716e1982b5702770571a75
        https://cs.chromium.org/chromium/src/device/fido/hid/fido_hid_packet.cc?rcl=1efcfbeaf4e4cedf58716e1982b5702770571a75
        https://cs.chromium.org/chromium/src/device/fido/hid/fido_hid_packet.h?rcl=1efcfbeaf4e4cedf58716e1982b5702770571a75
        https://cs.chromium.org/chromium/src/device/fido/hid/fido_hid_message_unittest.cc?rcl=1efcfbeaf4e4cedf58716e1982b5702770571a75

        Covered by API tests.

        * Modules/webauthn/fido/FidoConstants.cpp: Added.
        (fido::isFidoHidDeviceCommand):
        * Modules/webauthn/fido/FidoConstants.h: Added.
        * Modules/webauthn/fido/FidoHidMessage.cpp: Added.
        (fido::FidoHidMessage::create):
        (fido::FidoHidMessage::createFromSerializedData):
        (fido::FidoHidMessage::messageComplete const):
        (fido::FidoHidMessage::getMessagePayload const):
        (fido::FidoHidMessage::popNextPacket):
        (fido::FidoHidMessage::addContinuationPacket):
        (fido::FidoHidMessage::numPackets const):
        (fido::FidoHidMessage::FidoHidMessage):
        * Modules/webauthn/fido/FidoHidMessage.h: Added.
        * Modules/webauthn/fido/FidoHidPacket.cpp: Added.
        (fido::FidoHidPacket::FidoHidPacket):
        (fido::FidoHidInitPacket::createFromSerializedData):
        (fido::FidoHidInitPacket::FidoHidInitPacket):
        (fido::FidoHidInitPacket::getSerializedData const):
        (fido::FidoHidContinuationPacket::createFromSerializedData):
        (fido::FidoHidContinuationPacket::FidoHidContinuationPacket):
        (fido::FidoHidContinuationPacket::getSerializedData const):
        * Modules/webauthn/fido/FidoHidPacket.h: Added.
        * Modules/webauthn/fido/FidoParsingUtils.cpp: Added.
        (fido::getInitPacketData):
        (fido::getContinuationPacketData):
        * Modules/webauthn/fido/FidoParsingUtils.h: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2018-10-09  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [CoordGraphics] Remove the 'previous backing store' logic
        https://bugs.webkit.org/show_bug.cgi?id=188838

        Reviewed by Žan Doberšek.

        Remove previousBackingStore from LayerState, since it's not needed anymore.
        When there is scale adjustment, we now simply discard mainBackingStore and
        recreate a new one.

        No new tests required.

        * platform/graphics/nicosia/texmap/NicosiaBackingStoreTextureMapperImpl.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):
        (WebCore::CoordinatedGraphicsLayer::purgeBackingStores):

2018-10-09  Antti Koivisto  <antti@apple.com>

        [PSON] Prewarm system UI font
        https://bugs.webkit.org/show_bug.cgi?id=190397

        Reviewed by Geoffrey Garen.

        Cache system UI font fallbacks. Almost every web process needs these.

        * page/ProcessWarming.cpp:
        (WebCore::ProcessWarming::prewarmGlobally):

2018-10-09  Chris Dumez  <cdumez@apple.com>

        REGRESSION (Safari 12): Download of Blob URL fails
        https://bugs.webkit.org/show_bug.cgi?id=190351
        <rdar://problem/45091181>

        Reviewed by Geoffrey Garen.

        When using both the download attribute and target="_blank" on an anchor element, we would
        mistakenly drop the download attribute after the "new window" policy decision has been made.
        As a result, we would try to load the blob instead of downloading it.

        Test: fast/dom/HTMLAnchorElement/anchor-file-blob-download-blank-target.html

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

2018-10-09  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] r236735 has some dead ASSERTs that need to be moved
        https://bugs.webkit.org/show_bug.cgi?id=190394

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::createOptionalParserForFormat):

2018-10-09  Chris Dumez  <cdumez@apple.com>

        Have DOMWindow get its frame from its document
        https://bugs.webkit.org/show_bug.cgi?id=190389

        Reviewed by Geoff Garen.

        Have DOMWindow get its frame from its document instead of having its own m_frame which can potentially
        be out-of-sync.

        * dom/Document.cpp:
        (WebCore::Document::frameDestroyed):
        (WebCore::Document::willDetachPage):
        (WebCore::Document::attachToCachedFrame):
        * dom/Document.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::allowPopUp):
        (WebCore::ContextDestructionObserver):
        (WebCore::DOMWindow::didSecureTransitionTo):
        (WebCore::DOMWindow::frameDestroyed):
        (WebCore::DOMWindow::willDetachDocumentFromFrame):
        (WebCore::DOMWindow::reconnectDOMWindowProperties):
        (WebCore::DOMWindow::isCurrentlyDisplayedInFrame const):
        (WebCore::DOMWindow::collectMatchingElementsInFlatTree):
        (WebCore::DOMWindow::matchingElementInFlatTree):
        (WebCore::DOMWindow::orientation const):
        (WebCore::DOMWindow::console const):
        (WebCore::DOMWindow::shouldHaveWebKitNamespaceForWorld):
        (WebCore::DOMWindow::webkitNamespace):
        (WebCore::DOMWindow::postMessage):
        (WebCore::DOMWindow::postMessageTimerFired):
        (WebCore::DOMWindow::frameElement const):
        (WebCore::DOMWindow::focus):
        (WebCore::DOMWindow::blur):
        (WebCore::DOMWindow::close):
        (WebCore::DOMWindow::print):
        (WebCore::DOMWindow::stop):
        (WebCore::DOMWindow::alert):
        (WebCore::DOMWindow::confirm):
        (WebCore::DOMWindow::prompt):
        (WebCore::DOMWindow::find const):
        (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::length const):
        (WebCore::DOMWindow::name const):
        (WebCore::DOMWindow::setName):
        (WebCore::DOMWindow::setStatus):
        (WebCore::DOMWindow::setDefaultStatus):
        (WebCore::DOMWindow::self const):
        (WebCore::DOMWindow::opener const):
        (WebCore::DOMWindow::disownOpener):
        (WebCore::DOMWindow::parent const):
        (WebCore::DOMWindow::top const):
        (WebCore::DOMWindow::getMatchedCSSRules const):
        (WebCore::DOMWindow::devicePixelRatio const):
        (WebCore::DOMWindow::scrollBy const):
        (WebCore::DOMWindow::scrollTo const):
        (WebCore::DOMWindow::allowedToChangeWindowGeometry const):
        (WebCore::DOMWindow::moveBy const):
        (WebCore::DOMWindow::moveTo const):
        (WebCore::DOMWindow::resizeBy const):
        (WebCore::DOMWindow::resizeTo const):
        (WebCore::DOMWindow::clearTimeout):
        (WebCore::DOMWindow::isSameSecurityOriginAsMainFrame const):
        (WebCore::DOMWindow::finishedLoading):
        (WebCore::DOMWindow::setLocation):
        (WebCore::DOMWindow::open):
        (WebCore::DOMWindow::showModalDialog):
        (WebCore::DOMWindow::frame const):
        (WebCore::FrameDestructionObserver): Deleted.
        (WebCore::DOMWindow::willDetachPage): Deleted.
        (WebCore::DOMWindow::detachFromFrame): Deleted.
        (WebCore::DOMWindow::attachToFrame): Deleted.
        * page/DOMWindow.h:

2018-10-09  Jer Noble  <jer.noble@apple.com>

        ISOTrackEncryptionBox returns incorrect defaultKeyID
        https://bugs.webkit.org/show_bug.cgi?id=190368

        Reviewed by Eric Carlson.

        Test: TestWebKitAPI.ISOBox.ISOProtectionSchemeInfoBox

        ISOTrackEncryptionBox::parse() increments the data offset by an incorrect amount.

        Drive-by fix: add EXPORT macros to all the ISO box classes so that tests can be written in TestWebKitAPI.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/iso/ISOBox.h:
        * platform/graphics/iso/ISOOriginalFormatBox.h:
        * platform/graphics/iso/ISOProtectionSchemeInfoBox.h:
        * platform/graphics/iso/ISOProtectionSystemSpecificHeaderBox.h:
        * platform/graphics/iso/ISOSchemeInformationBox.h:
        * platform/graphics/iso/ISOSchemeTypeBox.h:
        * platform/graphics/iso/ISOTrackEncryptionBox.cpp:
        (WebCore::ISOTrackEncryptionBox::parse):
        * platform/graphics/iso/ISOTrackEncryptionBox.h:

2018-10-09  Youenn Fablet  <youenn@apple.com>

        Add support for IceCandidate stats
        https://bugs.webkit.org/show_bug.cgi?id=190329

        Reviewed by Eric Carlson.

        Convert IceCandidate stats gathered by libwebrtc.
        Since networkType might be sensitive information, we currently do not expose it.
        We do not expose address either if it is a host or prflx candidate.

        Test: webrtc/candidate-stats.html

        * Modules/mediastream/RTCStatsReport.h:
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCStatsCollector.cpp:
        (WebCore::iceCandidateState):
        (WebCore::fillRTCIceCandidateStats):
        (WebCore::LibWebRTCStatsCollector::OnStatsDelivered):

2018-10-09  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Stealing cross-origin video pixel with HLS
        https://bugs.webkit.org/show_bug.cgi?id=190003

        Reviewed by Xabier Rodriguez-Calvar.

        Report the SecurityOrigin of downloaded adaptivedemux (HLS, DASH,
        SmoothStreaming) fragments as tainted if their origin differs from
        the manifest SecurityOrigin. SecurityOrigins are stored in the
        CachedResourceStreamingClient implemented in the internal
        GStreamer HTTP(S) source element.

        The implementation is not ideal yet because the fragments download
        is performed by the WebProcess, until bug 189967 is fixed. When
        this bug is fixed, the m_hasTaintedOrigin member variable should
        be removed and all checks be done unconditionally to the
        webkithttpsrc element which will manage the download of the
        manifests and fragments.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::loadFull): Reset the m_hasTaintedOrigin value.
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Get the
        fragment URL from the adaptivedemux stats message and check if its
        origin is tainted.
        (WebCore::MediaPlayerPrivateGStreamer::wouldTaintOrigin const):
        Initial implementation by checking the m_hasTaintedOrigin member
        variable value.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (CachedResourceStreamingClient::responseReceived): Store the
        resource origin internally so it can be checked later on by
        webKitSrtcWouldTaintOrigin().
        (webKitSrcWouldTaintOrigin): Check given origin against cached
        origins. This implementation is similar to Cocoa's
        WebCoreNSURLSession implementation.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.h:

2018-10-09  Antti Koivisto  <antti@apple.com>

        Prewarm FontDatabase on process swap
        https://bugs.webkit.org/show_bug.cgi?id=190312

        Reviewed by Chris Dumez.

        Implement basic prewarming of FontDatabase. When the domain of the first page load on
        a new process is known we pass the list of font families previous used by that domain to the
        process. This is used to prewarm CoreText font database. Initialization (which involves lots of
        blocking IPC) happens outside the main thread so the fonts are ready to use when needed.

        * WebCore.xcodeproj/project.pbxproj:
        * page/PrewarmInformation.h: Added.
        (WebCore::PrewarmInformation::encode const):
        (WebCore::PrewarmInformation::decode):

        Add data structure for prewarm information with encode/decode support.

        * page/ProcessWarming.cpp:
        (WebCore::ProcessWarming::collectPrewarmInformation):
        (WebCore::ProcessWarming::prewarmWithInformation):

        Prewarming interface to be used from WebKit.

        * page/ProcessWarming.h:
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::collectPrewarmInformation const):
        (WebCore::FontCache::prewarm):
        * platform/graphics/FontCache.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontDatabase::collectionForFamily):
        (WebCore::FontDatabase::fontForPostScriptName):
        (WebCore::FontDatabase::clear):

        Add mutex for thread safe access.

        (WebCore::FontCache::createFontPlatformData):
        (WebCore::FontCache::collectPrewarmInformation const):

        Collect font families seen by this process.

        (WebCore::FontCache::prewarm):

        Prewarm FontDatabase in a dispatch queue.

2018-10-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] [WK2] Add support for text alignment and text lists in font attributes
        https://bugs.webkit.org/show_bug.cgi?id=190342
        <rdar://problem/44767118>

        Reviewed by Tim Horton.

        Adds support for computing and encoding information about text alignment and enclosing list elements in the font
        attributes dictionary, exposed to the UI delegate on Cocoa platforms. This is exposed through NSParagraphStyle,
        which contains properties for both `NSTextAlignment` and an array of enclosing `NSTextList` objects.

        Test:   FontAttributes.NestedTextListsWithHorizontalAlignment
                FontAttributes.FontAttributesAfterChangingSelection

        * editing/Editor.cpp:
        (WebCore::editableTextListsAtPositionInDescendingOrder):

        Add a helper function to ascend the DOM, starting at the given position, in search of enclosing list elements.
        For each enclosing list element we find within the scope of the editable root, we create a `TextList`
        representing the list element.

        (WebCore::Editor::fontAttributesAtSelectionStart const):

        Compute and set enclosing text lists and text alignment. For text alignment, we convert the initial text-align
        value, `start`, to NSTextAlignmentNatural (the default text alignment type on Cocoa platforms); other values
        then map to Left, Right, Center, and Justified as expected (taking direction into account).

        * editing/FontAttributes.h:
        (WebCore::TextList::encode const):
        (WebCore::TextList::decode):

        Introduce TextList, a platform-agnostic representation of an unordered or ordered list. On Cocoa, this can be
        used to construct a corresponding NSTextList.

        * editing/cocoa/FontAttributesCocoa.mm:
        (WebCore::cocoaTextListMarkerName):

        Attempt to map a WebCore list style type to a `NSTextListMarker*` constant. While most of the Cocoa marker
        formats have a corresponding web-exposed list style type, many web-exposed types have no Cocoa equivalent; as
        such, fall back to default marker formats: "{disc}" for unordered lists and "{decimal}" for ordered lists.

        (WebCore::TextList::createTextList const):
        (WebCore::FontAttributes::createDictionary const):

        Include an NSParagraphStyle in the dictionary of font attributes that includes information about text alignment
        and enclosing text lists (per Cocoa convention, in order from outermost list to innermost list).

2018-10-08  Justin Fan  <justin_fan@apple.com>

        WebGPU: Rename old WebGPU prototype to WebMetal
        https://bugs.webkit.org/show_bug.cgi?id=190325
        <rdar://problem/44990443>

        Reviewed by Dean Jackson.

        Existing WebGPU tests also renamed to reflect WebGPU -> WebMetal change.

        Rename WebGPU prototype files to WebMetal in preparation for implementing the new (Oct 2018) WebGPU interface.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebMetalRenderPassAttachmentDescriptorCustom.cpp: Renamed from Source/WebCore/bindings/js/JSWebGPURenderPassAttachmentDescriptorCustom.cpp.
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        * bindings/js/JSWebMetalRenderingContextCustom.cpp: Renamed from Source/WebCore/bindings/js/JSWebGPURenderingContextCustom.cpp.
        (WebCore::JSWebMetalRenderingContext::visitAdditionalChildren):
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/Document.cpp:
        (WebCore::Document::getCSSCanvasContext):
        * dom/Document.h:
        * dom/Document.idl:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::isWebMetalType):
        (WebCore::HTMLCanvasElement::createContextWebMetal):
        (WebCore::HTMLCanvasElement::getContextWebMetal):
        (WebCore::HTMLCanvasElement::isWebGPUType): Deleted.
        (WebCore::HTMLCanvasElement::createContextWebGPU): Deleted.
        (WebCore::HTMLCanvasElement::getContextWebGPU): Deleted.
        * html/HTMLCanvasElement.h:
        * html/HTMLCanvasElement.idl:
        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::isWebMetal const):
        (WebCore::CanvasRenderingContext::isWebGPU const): Deleted.
        * html/canvas/WebGPURenderingContext.cpp: Removed.
        * html/canvas/WebMetalBuffer.cpp: Renamed from Source/WebCore/html/canvas/WebGPUBuffer.cpp.
        (WebCore::WebMetalBuffer::create):
        (WebCore::WebMetalBuffer::WebMetalBuffer):
        * html/canvas/WebMetalBuffer.h: Renamed from Source/WebCore/html/canvas/WebGPUBuffer.h.
        * html/canvas/WebMetalBuffer.idl: Renamed from Source/WebCore/html/canvas/WebGPUBuffer.idl.
        * html/canvas/WebMetalCommandBuffer.cpp: Renamed from Source/WebCore/html/canvas/WebGPUCommandBuffer.cpp.
        (WebCore::WebMetalCommandBuffer::create):
        (WebCore::WebMetalCommandBuffer::WebMetalCommandBuffer):
        (WebCore::WebMetalCommandBuffer::~WebMetalCommandBuffer):
        (WebCore::WebMetalCommandBuffer::commit):
        (WebCore::WebMetalCommandBuffer::presentDrawable):
        (WebCore::WebMetalCommandBuffer::createRenderCommandEncoderWithDescriptor):
        (WebCore::WebMetalCommandBuffer::createComputeCommandEncoder):
        (WebCore::WebMetalCommandBuffer::completed):
        * html/canvas/WebMetalCommandBuffer.h: Renamed from Source/WebCore/html/canvas/WebGPUCommandBuffer.h.
        * html/canvas/WebMetalCommandBuffer.idl: Renamed from Source/WebCore/html/canvas/WebGPUCommandBuffer.idl.
        * html/canvas/WebMetalCommandQueue.cpp: Renamed from Source/WebCore/html/canvas/WebGPUCommandQueue.cpp.
        (WebCore::WebMetalCommandQueue::create):
        (WebCore::WebMetalCommandQueue::WebMetalCommandQueue):
        (WebCore::WebMetalCommandQueue::createCommandBuffer):
        * html/canvas/WebMetalCommandQueue.h: Renamed from Source/WebCore/html/canvas/WebGPUCommandQueue.h.
        * html/canvas/WebMetalCommandQueue.idl: Renamed from Source/WebCore/html/canvas/WebGPUCommandQueue.idl.
        * html/canvas/WebMetalComputeCommandEncoder.cpp: Renamed from Source/WebCore/html/canvas/WebGPUComputeCommandEncoder.cpp.
        (WebCore::GPUSizeMake):
        (WebCore::WebMetalComputeCommandEncoder::create):
        (WebCore::WebMetalComputeCommandEncoder::WebMetalComputeCommandEncoder):
        (WebCore::WebMetalComputeCommandEncoder::setComputePipelineState):
        (WebCore::WebMetalComputeCommandEncoder::setBuffer):
        (WebCore::WebMetalComputeCommandEncoder::dispatch):
        (WebCore::WebMetalComputeCommandEncoder::endEncoding):
        * html/canvas/WebMetalComputeCommandEncoder.h: Renamed from Source/WebCore/html/canvas/WebGPUComputeCommandEncoder.h.
        * html/canvas/WebMetalComputeCommandEncoder.idl: Renamed from Source/WebCore/html/canvas/WebGPUComputeCommandEncoder.idl.
        * html/canvas/WebMetalComputePipelineState.cpp: Renamed from Source/WebCore/html/canvas/WebGPUComputePipelineState.cpp.
        (WebCore::WebMetalComputePipelineState::create):
        (WebCore::WebMetalComputePipelineState::WebMetalComputePipelineState):
        * html/canvas/WebMetalComputePipelineState.h: Renamed from Source/WebCore/html/canvas/WebGPUComputePipelineState.h.
        * html/canvas/WebMetalComputePipelineState.idl: Renamed from Source/WebCore/html/canvas/WebGPUComputePipelineState.idl.
        * html/canvas/WebMetalDepthStencilDescriptor.cpp: Renamed from Source/WebCore/html/canvas/WebGPUDepthStencilDescriptor.cpp.
        (WebCore::WebMetalDepthStencilDescriptor::create):
        (WebCore::WebMetalDepthStencilDescriptor::depthWriteEnabled const):
        (WebCore::WebMetalDepthStencilDescriptor::setDepthWriteEnabled):
        (WebCore::WebMetalDepthStencilDescriptor::depthCompareFunction const):
        (WebCore::WebMetalDepthStencilDescriptor::setDepthCompareFunction):
        * html/canvas/WebMetalDepthStencilDescriptor.h: Renamed from Source/WebCore/html/canvas/WebGPUDepthStencilDescriptor.h.
        * html/canvas/WebMetalDepthStencilDescriptor.idl: Renamed from Source/WebCore/html/canvas/WebGPUDepthStencilDescriptor.idl.
        * html/canvas/WebMetalDepthStencilState.cpp: Renamed from Source/WebCore/html/canvas/WebGPUDepthStencilState.cpp.
        (WebCore::WebMetalDepthStencilState::create):
        (WebCore::WebMetalDepthStencilState::WebMetalDepthStencilState):
        (WebCore::WebMetalDepthStencilState::label const):
        (WebCore::WebMetalDepthStencilState::setLabel):
        * html/canvas/WebMetalDepthStencilState.h: Renamed from Source/WebCore/html/canvas/WebGPUDepthStencilState.h.
        * html/canvas/WebMetalDepthStencilState.idl: Renamed from Source/WebCore/html/canvas/WebGPURenderPipelineState.idl.
        * html/canvas/WebMetalDrawable.cpp: Renamed from Source/WebCore/html/canvas/WebGPUDrawable.cpp.
        (WebCore::WebMetalDrawable::create):
        (WebCore::WebMetalDrawable::WebMetalDrawable):
        * html/canvas/WebMetalDrawable.h: Renamed from Source/WebCore/html/canvas/WebGPUDrawable.h.
        (WebCore::WebMetalDrawable::texture):
        * html/canvas/WebMetalDrawable.idl: Renamed from Source/WebCore/html/canvas/WebGPUDrawable.idl.
        * html/canvas/WebMetalEnums.cpp: Renamed from Source/WebCore/html/canvas/WebGPUEnums.cpp.
        (WebCore::toWebMetalCompareFunction):
        (WebCore::web3DCompareFunctionName):
        (WebCore::toGPUCompareFunction):
        * html/canvas/WebMetalEnums.h: Renamed from Source/WebCore/html/canvas/WebGPUEnums.h.
        * html/canvas/WebMetalEnums.idl: Renamed from Source/WebCore/html/canvas/WebGPUEnums.idl.
        * html/canvas/WebMetalFunction.cpp: Renamed from Source/WebCore/html/canvas/WebGPUFunction.cpp.
        (WebCore::WebMetalFunction::create):
        (WebCore::WebMetalFunction::WebMetalFunction):
        * html/canvas/WebMetalFunction.h: Renamed from Source/WebCore/html/canvas/WebGPUFunction.h.
        * html/canvas/WebMetalFunction.idl: Renamed from Source/WebCore/html/canvas/WebGPUFunction.idl.
        * html/canvas/WebMetalLibrary.cpp: Renamed from Source/WebCore/html/canvas/WebGPULibrary.cpp.
        (WebCore::WebMetalLibrary::create):
        (WebCore::WebMetalLibrary::WebMetalLibrary):
        (WebCore::WebMetalLibrary::functionNames const):
        (WebCore::WebMetalLibrary::functionWithName const):
        * html/canvas/WebMetalLibrary.h: Renamed from Source/WebCore/html/canvas/WebGPULibrary.h.
        * html/canvas/WebMetalLibrary.idl: Renamed from Source/WebCore/html/canvas/WebGPULibrary.idl.
        * html/canvas/WebMetalRenderCommandEncoder.cpp: Renamed from Source/WebCore/html/canvas/WebGPURenderCommandEncoder.cpp.
        (WebCore::WebMetalRenderCommandEncoder::create):
        (WebCore::WebMetalRenderCommandEncoder::WebMetalRenderCommandEncoder):
        (WebCore::WebMetalRenderCommandEncoder::setRenderPipelineState):
        (WebCore::WebMetalRenderCommandEncoder::setDepthStencilState):
        (WebCore::WebMetalRenderCommandEncoder::setVertexBuffer):
        (WebCore::WebMetalRenderCommandEncoder::setFragmentBuffer):
        (WebCore::WebMetalRenderCommandEncoder::drawPrimitives):
        (WebCore::WebMetalRenderCommandEncoder::endEncoding):
        * html/canvas/WebMetalRenderCommandEncoder.h: Renamed from Source/WebCore/html/canvas/WebGPURenderCommandEncoder.h.
        * html/canvas/WebMetalRenderCommandEncoder.idl: Renamed from Source/WebCore/html/canvas/WebGPURenderCommandEncoder.idl.
        * html/canvas/WebMetalRenderPassAttachmentDescriptor.cpp: Renamed from Source/WebCore/html/canvas/WebGPURenderPassAttachmentDescriptor.cpp.
        (WebCore::WebMetalRenderPassAttachmentDescriptor::WebMetalRenderPassAttachmentDescriptor):
        (WebCore::WebMetalRenderPassAttachmentDescriptor::loadAction const):
        (WebCore::WebMetalRenderPassAttachmentDescriptor::setLoadAction):
        (WebCore::WebMetalRenderPassAttachmentDescriptor::storeAction const):
        (WebCore::WebMetalRenderPassAttachmentDescriptor::setStoreAction):
        (WebCore::WebMetalRenderPassAttachmentDescriptor::texture const):
        (WebCore::WebMetalRenderPassAttachmentDescriptor::setTexture):
        * html/canvas/WebMetalRenderPassAttachmentDescriptor.h: Renamed from Source/WebCore/html/canvas/WebGPURenderPassAttachmentDescriptor.h.
        * html/canvas/WebMetalRenderPassAttachmentDescriptor.idl: Renamed from Source/WebCore/html/canvas/WebGPURenderPassAttachmentDescriptor.idl.
        * html/canvas/WebMetalRenderPassColorAttachmentDescriptor.cpp: Renamed from Source/WebCore/html/canvas/WebGPURenderPassColorAttachmentDescriptor.cpp.
        (WebCore::WebMetalRenderPassColorAttachmentDescriptor::create):
        (WebCore::WebMetalRenderPassColorAttachmentDescriptor::WebMetalRenderPassColorAttachmentDescriptor):
        (WebCore::WebMetalRenderPassColorAttachmentDescriptor::descriptor const):
        (WebCore::WebMetalRenderPassColorAttachmentDescriptor::clearColor const):
        (WebCore::WebMetalRenderPassColorAttachmentDescriptor::setClearColor):
        * html/canvas/WebMetalRenderPassColorAttachmentDescriptor.h: Renamed from Source/WebCore/html/canvas/WebGPURenderPassColorAttachmentDescriptor.h.
        * html/canvas/WebMetalRenderPassColorAttachmentDescriptor.idl: Renamed from Source/WebCore/html/canvas/WebGPURenderPassColorAttachmentDescriptor.idl.
        * html/canvas/WebMetalRenderPassDepthAttachmentDescriptor.cpp: Renamed from Source/WebCore/html/canvas/WebGPURenderPassDepthAttachmentDescriptor.cpp.
        (WebCore::WebMetalRenderPassDepthAttachmentDescriptor::create):
        (WebCore::WebMetalRenderPassDepthAttachmentDescriptor::WebMetalRenderPassDepthAttachmentDescriptor):
        (WebCore::WebMetalRenderPassDepthAttachmentDescriptor::clearDepth const):
        (WebCore::WebMetalRenderPassDepthAttachmentDescriptor::setClearDepth):
        (WebCore::WebMetalRenderPassDepthAttachmentDescriptor::descriptor const):
        * html/canvas/WebMetalRenderPassDepthAttachmentDescriptor.h: Renamed from Source/WebCore/html/canvas/WebGPURenderPassDepthAttachmentDescriptor.h.
        * html/canvas/WebMetalRenderPassDepthAttachmentDescriptor.idl: Renamed from Source/WebCore/html/canvas/WebGPURenderPassDepthAttachmentDescriptor.idl.
        * html/canvas/WebMetalRenderPassDescriptor.cpp: Renamed from Source/WebCore/html/canvas/WebGPURenderPassDescriptor.cpp.
        (WebCore::WebMetalRenderPassDescriptor::create):
        (WebCore::WebMetalRenderPassDescriptor::depthAttachment):
        (WebCore::WebMetalRenderPassDescriptor::colorAttachments):
        * html/canvas/WebMetalRenderPassDescriptor.h: Renamed from Source/WebCore/html/canvas/WebGPURenderPassDescriptor.h.
        * html/canvas/WebMetalRenderPassDescriptor.idl: Renamed from Source/WebCore/html/canvas/WebGPURenderPassDescriptor.idl.
        * html/canvas/WebMetalRenderPipelineColorAttachmentDescriptor.cpp: Renamed from Source/WebCore/html/canvas/WebGPURenderPipelineColorAttachmentDescriptor.cpp.
        (WebCore::WebMetalRenderPipelineColorAttachmentDescriptor::create):
        (WebCore::WebMetalRenderPipelineColorAttachmentDescriptor::WebMetalRenderPipelineColorAttachmentDescriptor):
        (WebCore::WebMetalRenderPipelineColorAttachmentDescriptor::pixelFormat const):
        (WebCore::WebMetalRenderPipelineColorAttachmentDescriptor::setPixelFormat):
        * html/canvas/WebMetalRenderPipelineColorAttachmentDescriptor.h: Renamed from Source/WebCore/html/canvas/WebGPURenderPipelineColorAttachmentDescriptor.h.
        * html/canvas/WebMetalRenderPipelineColorAttachmentDescriptor.idl: Renamed from Source/WebCore/html/canvas/WebGPURenderPipelineColorAttachmentDescriptor.idl.
        * html/canvas/WebMetalRenderPipelineDescriptor.cpp: Renamed from Source/WebCore/html/canvas/WebGPURenderPipelineDescriptor.cpp.
        (WebCore::WebMetalRenderPipelineDescriptor::create):
        (WebCore::WebMetalRenderPipelineDescriptor::vertexFunction const):
        (WebCore::WebMetalRenderPipelineDescriptor::setVertexFunction):
        (WebCore::WebMetalRenderPipelineDescriptor::fragmentFunction const):
        (WebCore::WebMetalRenderPipelineDescriptor::setFragmentFunction):
        (WebCore::WebMetalRenderPipelineDescriptor::colorAttachments):
        (WebCore::WebMetalRenderPipelineDescriptor::depthAttachmentPixelFormat const):
        (WebCore::WebMetalRenderPipelineDescriptor::setDepthAttachmentPixelFormat):
        (WebCore::WebMetalRenderPipelineDescriptor::reset):
        * html/canvas/WebMetalRenderPipelineDescriptor.h: Renamed from Source/WebCore/html/canvas/WebGPURenderPipelineDescriptor.h.
        * html/canvas/WebMetalRenderPipelineDescriptor.idl: Renamed from Source/WebCore/html/canvas/WebGPURenderPipelineDescriptor.idl.
        * html/canvas/WebMetalRenderPipelineState.cpp: Renamed from Source/WebCore/html/canvas/WebGPURenderPipelineState.cpp.
        (WebCore::WebMetalRenderPipelineState::create):
        (WebCore::WebMetalRenderPipelineState::WebMetalRenderPipelineState):
        (WebCore::WebMetalRenderPipelineState::label const):
        (WebCore::WebMetalRenderPipelineState::setLabel):
        * html/canvas/WebMetalRenderPipelineState.h: Renamed from Source/WebCore/html/canvas/WebGPURenderPipelineState.h.
        * html/canvas/WebMetalRenderPipelineState.idl: Renamed from Source/WebCore/html/canvas/WebGPUDepthStencilState.idl.
        * html/canvas/WebMetalRenderingContext.cpp: Added.
        (WebCore::WebMetalRenderingContext::create):
        (WebCore::WebMetalRenderingContext::WebMetalRenderingContext):
        (WebCore::WebMetalRenderingContext::canvas const):
        (WebCore::WebMetalRenderingContext::initializeNewContext):
        (WebCore::WebMetalRenderingContext::clampedCanvasSize const):
        (WebCore::WebMetalRenderingContext::hasPendingActivity const):
        (WebCore::WebMetalRenderingContext::stop):
        (WebCore::WebMetalRenderingContext::activeDOMObjectName const):
        (WebCore::WebMetalRenderingContext::canSuspendForDocumentSuspension const):
        (WebCore::WebMetalRenderingContext::platformLayer const):
        (WebCore::WebMetalRenderingContext::markLayerComposited):
        (WebCore::WebMetalRenderingContext::reshape):
        (WebCore::WebMetalRenderingContext::createLibrary):
        (WebCore::WebMetalRenderingContext::createRenderPipelineState):
        (WebCore::WebMetalRenderingContext::createDepthStencilState):
        (WebCore::WebMetalRenderingContext::createComputePipelineState):
        (WebCore::WebMetalRenderingContext::createCommandQueue):
        (WebCore::WebMetalRenderingContext::nextDrawable):
        (WebCore::WebMetalRenderingContext::createBuffer):
        (WebCore::WebMetalRenderingContext::createTexture):
        * html/canvas/WebMetalRenderingContext.h: Renamed from Source/WebCore/html/canvas/WebGPURenderingContext.h.
        * html/canvas/WebMetalRenderingContext.idl: Renamed from Source/WebCore/html/canvas/WebGPURenderingContext.idl.
        * html/canvas/WebMetalSize.h: Renamed from Source/WebCore/html/canvas/WebGPUSize.h.
        * html/canvas/WebMetalSize.idl: Renamed from Source/WebCore/html/canvas/WebGPUSize.idl.
        * html/canvas/WebMetalTexture.cpp: Renamed from Source/WebCore/html/canvas/WebGPUTexture.cpp.
        (WebCore::WebMetalTexture::create):
        (WebCore::WebMetalTexture::WebMetalTexture):
        * html/canvas/WebMetalTexture.h: Renamed from Source/WebCore/html/canvas/WebGPUTexture.h.
        * html/canvas/WebMetalTexture.idl: Renamed from Source/WebCore/html/canvas/WebGPUTexture.idl.
        * html/canvas/WebMetalTextureDescriptor.cpp: Renamed from Source/WebCore/html/canvas/WebGPUTextureDescriptor.cpp.
        (WebCore::WebMetalTextureDescriptor::create):
        (WebCore::WebMetalTextureDescriptor::WebMetalTextureDescriptor):
        (WebCore::WebMetalTextureDescriptor::width const):
        (WebCore::WebMetalTextureDescriptor::setWidth):
        (WebCore::WebMetalTextureDescriptor::height const):
        (WebCore::WebMetalTextureDescriptor::setHeight):
        (WebCore::WebMetalTextureDescriptor::sampleCount const):
        (WebCore::WebMetalTextureDescriptor::setSampleCount):
        (WebCore::WebMetalTextureDescriptor::textureType const):
        (WebCore::WebMetalTextureDescriptor::setTextureType):
        (WebCore::WebMetalTextureDescriptor::storageMode const):
        (WebCore::WebMetalTextureDescriptor::setStorageMode):
        (WebCore::WebMetalTextureDescriptor::usage const):
        (WebCore::WebMetalTextureDescriptor::setUsage):
        * html/canvas/WebMetalTextureDescriptor.h: Renamed from Source/WebCore/html/canvas/WebGPUTextureDescriptor.h.
        * html/canvas/WebMetalTextureDescriptor.idl: Renamed from Source/WebCore/html/canvas/WebGPUTextureDescriptor.idl.
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildObjectForCanvas):
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::requestContent):
        (WebCore::contextAsScriptValue):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebMetalEnabled):
        (WebCore::RuntimeEnabledFeatures::webMetalEnabled const):
        (WebCore::RuntimeEnabledFeatures::setWebGPUEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::webGPUEnabled const): Deleted.
        * platform/Logging.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::layerTypeForPlatformLayer):
        (WebCore::PlatformCALayerCocoa::PlatformCALayerCocoa):
        * platform/graphics/cocoa/WebMetalLayer.h: Renamed from Source/WebCore/platform/graphics/cocoa/WebGPULayer.h.
        * platform/graphics/cocoa/WebMetalLayer.mm: Renamed from Source/WebCore/platform/graphics/cocoa/WebGPULayer.mm.
        (-[WebMetalLayer initWithGPUDevice:]):
        * platform/graphics/gpu/GPUBuffer.cpp:
        (WebCore::GPUBuffer::~GPUBuffer):
        * platform/graphics/gpu/GPUBuffer.h:
        * platform/graphics/gpu/GPUCommandBuffer.cpp:
        (WebCore::GPUCommandBuffer::~GPUCommandBuffer):
        * platform/graphics/gpu/GPUCommandBuffer.h:
        * platform/graphics/gpu/GPUCommandQueue.cpp:
        (WebCore::GPUCommandQueue::~GPUCommandQueue):
        * platform/graphics/gpu/GPUCommandQueue.h:
        * platform/graphics/gpu/GPUComputeCommandEncoder.cpp:
        (WebCore::GPUComputeCommandEncoder::~GPUComputeCommandEncoder):
        * platform/graphics/gpu/GPUComputeCommandEncoder.h:
        * platform/graphics/gpu/GPUComputePipelineState.cpp:
        (WebCore::GPUComputePipelineState::~GPUComputePipelineState):
        * platform/graphics/gpu/GPUComputePipelineState.h:
        * platform/graphics/gpu/GPUDepthStencilDescriptor.cpp:
        (WebCore::GPUDepthStencilDescriptor::~GPUDepthStencilDescriptor):
        * platform/graphics/gpu/GPUDepthStencilDescriptor.h:
        * platform/graphics/gpu/GPUDepthStencilState.cpp:
        (WebCore::GPUDepthStencilState::~GPUDepthStencilState):
        * platform/graphics/gpu/GPUDepthStencilState.h:
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::~GPUDevice):
        * platform/graphics/gpu/GPUDevice.h:
        (WebCore::GPUDevice::layer const):
        * platform/graphics/gpu/GPUDrawable.cpp:
        (WebCore::GPUDrawable::~GPUDrawable):
        * platform/graphics/gpu/GPUDrawable.h:
        * platform/graphics/gpu/GPUEnums.h:
        * platform/graphics/gpu/GPUFunction.cpp:
        (WebCore::GPUFunction::~GPUFunction):
        * platform/graphics/gpu/GPUFunction.h:
        * platform/graphics/gpu/GPULibrary.cpp:
        (WebCore::GPULibrary::~GPULibrary):
        * platform/graphics/gpu/GPULibrary.h:
        * platform/graphics/gpu/GPURenderCommandEncoder.cpp:
        (WebCore::GPURenderCommandEncoder::~GPURenderCommandEncoder):
        * platform/graphics/gpu/GPURenderCommandEncoder.h:
        * platform/graphics/gpu/GPURenderPassAttachmentDescriptor.cpp:
        (WebCore::GPURenderPassAttachmentDescriptor::~GPURenderPassAttachmentDescriptor):
        * platform/graphics/gpu/GPURenderPassAttachmentDescriptor.h:
        * platform/graphics/gpu/GPURenderPassColorAttachmentDescriptor.cpp:
        (WebCore::GPURenderPassColorAttachmentDescriptor::~GPURenderPassColorAttachmentDescriptor):
        * platform/graphics/gpu/GPURenderPassColorAttachmentDescriptor.h:
        * platform/graphics/gpu/GPURenderPassDepthAttachmentDescriptor.cpp:
        (WebCore::GPURenderPassDepthAttachmentDescriptor::~GPURenderPassDepthAttachmentDescriptor):
        * platform/graphics/gpu/GPURenderPassDepthAttachmentDescriptor.h:
        * platform/graphics/gpu/GPURenderPassDescriptor.cpp:
        (WebCore::GPURenderPassDescriptor::~GPURenderPassDescriptor):
        * platform/graphics/gpu/GPURenderPassDescriptor.h:
        * platform/graphics/gpu/GPURenderPipelineColorAttachmentDescriptor.cpp:
        (WebCore::GPURenderPipelineColorAttachmentDescriptor::~GPURenderPipelineColorAttachmentDescriptor):
        * platform/graphics/gpu/GPURenderPipelineColorAttachmentDescriptor.h:
        * platform/graphics/gpu/GPURenderPipelineDescriptor.cpp:
        (WebCore::GPURenderPipelineDescriptor::~GPURenderPipelineDescriptor):
        * platform/graphics/gpu/GPURenderPipelineDescriptor.h:
        * platform/graphics/gpu/GPURenderPipelineState.cpp:
        (WebCore::GPURenderPipelineState::~GPURenderPipelineState):
        * platform/graphics/gpu/GPURenderPipelineState.h:
        * platform/graphics/gpu/GPUSize.h:
        * platform/graphics/gpu/GPUTexture.cpp:
        (WebCore::GPUTexture::~GPUTexture):
        * platform/graphics/gpu/GPUTexture.h:
        * platform/graphics/gpu/GPUTextureDescriptor.cpp:
        (WebCore::GPUTextureDescriptor::~GPUTextureDescriptor):
        * platform/graphics/gpu/GPUTextureDescriptor.h:
        * platform/graphics/metal/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::GPUBuffer):
        * platform/graphics/metal/GPUCommandBufferMetal.mm:
        * platform/graphics/metal/GPUCommandQueueMetal.mm:
        * platform/graphics/metal/GPUComputeCommandEncoderMetal.mm:
        * platform/graphics/metal/GPUComputePipelineStateMetal.mm:
        (WebCore::GPUComputePipelineState::GPUComputePipelineState):
        * platform/graphics/metal/GPUDepthStencilDescriptorMetal.mm:
        * platform/graphics/metal/GPUDepthStencilStateMetal.mm:
        (WebCore::GPUDepthStencilState::setLabel const):
        * platform/graphics/metal/GPUDeviceMetal.mm:
        (WebCore::GPUDevice::reshape const):
        * platform/graphics/metal/GPUDrawableMetal.mm:
        (WebCore::GPUDrawable::release):
        * platform/graphics/metal/GPUFunctionMetal.mm:
        * platform/graphics/metal/GPULibraryMetal.mm:
        (WebCore::GPULibrary::GPULibrary):
        * platform/graphics/metal/GPURenderCommandEncoderMetal.mm:
        (WebCore::GPURenderCommandEncoder::GPURenderCommandEncoder):
        * platform/graphics/metal/GPURenderPassAttachmentDescriptorMetal.mm:
        * platform/graphics/metal/GPURenderPassColorAttachmentDescriptorMetal.mm:
        * platform/graphics/metal/GPURenderPassDepthAttachmentDescriptorMetal.mm:
        * platform/graphics/metal/GPURenderPassDescriptorMetal.mm:
        * platform/graphics/metal/GPURenderPipelineColorAttachmentDescriptorMetal.mm:
        * platform/graphics/metal/GPURenderPipelineDescriptorMetal.mm:
        * platform/graphics/metal/GPURenderPipelineStateMetal.mm:
        (WebCore::GPURenderPipelineState::setLabel const):
        * platform/graphics/metal/GPUTextureDescriptorMetal.mm:
        * platform/graphics/metal/GPUTextureMetal.mm:
        (WebCore::GPUTexture::GPUTexture):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setWebMetalEnabled):
        (WebCore::InternalSettings::setWebGPUEnabled): Deleted.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2018-10-08  Dean Jackson  <dino@apple.com>

        CrashTracer: backboardd at Recursion :: QuartzCore: CA::Render::Updater::prepare_sublayer0
        https://bugs.webkit.org/show_bug.cgi?id=190376
        <rdar://problem/44986520>

        Reviewed by Tim Horton.

        Very deep CoreAnimation layer trees can cause problems. Reduce our maximum
        depth from 256 to 128.

        Modified existing test: compositing/layer-creation/deep-tree.html

        * platform/graphics/ca/GraphicsLayerCA.cpp: Cap the depth at 128.

2018-10-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r236941.
        https://bugs.webkit.org/show_bug.cgi?id=190374

        Causing API test failures in new test (Requested by jernoble
        on #webkit).

        Reverted changeset:

        "ISOTrackEncryptionBox returns incorrect defaultKeyID"
        https://bugs.webkit.org/show_bug.cgi?id=190368
        https://trac.webkit.org/changeset/236941

2018-10-08  Aditya Keerthi  <akeerthi@apple.com>

        Make <input type=color> a runtime enabled (on-by-default) feature
        https://bugs.webkit.org/show_bug.cgi?id=189162

        Reviewed by Wenson Hsieh and Tim Horton.

        Enable the build-time flag INPUT_TYPE_COLOR by default and introduce a runtime-enabled feature for input type
        color, also on by default.

        Covered by rebaselining existing layout tests.

        * Configurations/FeatureDefines.xcconfig:
        * html/InputType.cpp:
        (WebCore::createInputTypeFactoryMap):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::inputTypeColorEnabled const):
        (WebCore::RuntimeEnabledFeatures::setInputTypeColorEnabled):

2018-10-08  Jer Noble  <jer.noble@apple.com>

        ISOTrackEncryptionBox returns incorrect defaultKeyID
        https://bugs.webkit.org/show_bug.cgi?id=190368

        Reviewed by Eric Carlson.

        Test: TestWebKitAPI.ISOBox.ISOProtectionSchemeInfoBox

        ISOTrackEncryptionBox::parse() increments the data offset by an incorrect amount.

        Drive-by fix: add EXPORT macros to all the ISO box classes so that tests can be written in TestWebKitAPI.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/iso/ISOBox.h:
        * platform/graphics/iso/ISOOriginalFormatBox.h:
        * platform/graphics/iso/ISOProtectionSchemeInfoBox.h:
        * platform/graphics/iso/ISOProtectionSystemSpecificHeaderBox.h:
        * platform/graphics/iso/ISOSchemeInformationBox.h:
        * platform/graphics/iso/ISOSchemeTypeBox.h:
        * platform/graphics/iso/ISOTrackEncryptionBox.cpp:
        (WebCore::ISOTrackEncryptionBox::parse):
        * platform/graphics/iso/ISOTrackEncryptionBox.h:

2018-10-08  Antti Koivisto  <antti@apple.com>

        Move SystemFontDatabase to a file of its own
        https://bugs.webkit.org/show_bug.cgi?id=190347

        Reviewed by Chris Dumez.

        Also rename it to SystemFontDatabaseCoreText as it is CoreText specific.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/MemoryRelease.cpp:
        (WebCore::releaseNoncriticalMemory):
        * page/cocoa/MemoryReleaseCocoa.mm:

        Release SystemFontDatabaseCoreText directly from platform specific cleanup code.

        (WebCore::platformReleaseMemory):
        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::FontDescription::invalidateCaches):
        (WebCore::systemFontCascadeList):
        (WebCore::FontCascadeDescription::effectiveFamilyCount const):
        (WebCore::FontCascadeDescription::effectiveFamilyAt const):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::CoreTextCascadeListParameters): Deleted.
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::isHashTableDeletedValue const): Deleted.
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::operator== const): Deleted.
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::hash const): Deleted.
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::CoreTextCascadeListParametersHash::hash): Deleted.
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::CoreTextCascadeListParametersHash::equal): Deleted.
        (): Deleted.
        (WebCore::SystemFontDatabase::singleton): Deleted.
        (WebCore::SystemFontDatabase::systemFontCascadeList): Deleted.
        (WebCore::SystemFontDatabase::clear): Deleted.
        (WebCore::SystemFontDatabase::SystemFontDatabase): Deleted.
        (WebCore::SystemFontDatabase::applyWeightItalicsAndFallbackBehavior): Deleted.
        (WebCore::SystemFontDatabase::removeCascadeList): Deleted.
        (WebCore::SystemFontDatabase::computeCascadeList): Deleted.
        (WebCore::systemFontParameters): Deleted.
        * platform/graphics/cocoa/SystemFontDatabaseCoreText.cpp: Added.
        (WebCore::SystemFontDatabaseCoreText::singleton):
        (WebCore::SystemFontDatabaseCoreText::SystemFontDatabaseCoreText):
        (WebCore::SystemFontDatabaseCoreText::systemFontCascadeList):
        (WebCore::SystemFontDatabaseCoreText::clear):
        (WebCore::SystemFontDatabaseCoreText::applyWeightItalicsAndFallbackBehavior):
        (WebCore::SystemFontDatabaseCoreText::removeCascadeList):
        (WebCore::SystemFontDatabaseCoreText::computeCascadeList):
        (WebCore::SystemFontDatabaseCoreText::systemFontParameters):
        * platform/graphics/cocoa/SystemFontDatabaseCoreText.h: Added.
        (WebCore::SystemFontDatabaseCoreText::CascadeListParameters::CascadeListParameters):
        (WebCore::SystemFontDatabaseCoreText::CascadeListParameters::isHashTableDeletedValue const):
        (WebCore::SystemFontDatabaseCoreText::CascadeListParameters::operator== const):
        (WebCore::SystemFontDatabaseCoreText::CascadeListParameters::hash const):
        (WebCore::SystemFontDatabaseCoreText::CascadeListParameters::CascadeListParametersHash::hash):
        (WebCore::SystemFontDatabaseCoreText::CascadeListParameters::CascadeListParametersHash::equal):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:

2018-10-08  Jeremy Jones  <jeremyj@apple.com>

        Remove dead code: VideoFullscreenModel::isVisible()
        https://bugs.webkit.org/show_bug.cgi?id=190356

        Reviewed by Jon Lee.

        No new tests because there is no behavior change.

        Remove isVisible() since it is no longer used.

        * platform/cocoa/VideoFullscreenModel.h:
        * platform/cocoa/VideoFullscreenModelVideoElement.h:
        * platform/cocoa/VideoFullscreenModelVideoElement.mm:
        (WebCore::VideoFullscreenModelVideoElement::isVisible const): Deleted.
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::isVisible const): Deleted.

2018-10-08  Jeremy Jones  <jeremyj@apple.com>

        Remove dead code: resetMediaState.
        https://bugs.webkit.org/show_bug.cgi?id=190355

        Reviewed by Jon Lee.

        No new tests because no behavior change.

        Remove resetMediaState since it is no longer used.

        * platform/cocoa/PlaybackSessionInterface.h:
        (WebCore::PlaybackSessionInterface::~PlaybackSessionInterface):
        * platform/ios/PlaybackSessionInterfaceAVKit.h:
        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        (WebCore::PlaybackSessionInterfaceAVKit::resetMediaState): Deleted.
        * platform/ios/WebAVPlayerController.h:
        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController resetMediaState]): Deleted.
        * platform/mac/PlaybackSessionInterfaceMac.h:
        * platform/mac/PlaybackSessionInterfaceMac.mm:
        (WebCore::PlaybackSessionInterfaceMac::resetMediaState): Deleted.

2018-10-08  Jeremy Jones  <jeremyj@apple.com>

        Use MediaPlayerEnums::VideoGravity in VideoFullscreenModel.
        https://bugs.webkit.org/show_bug.cgi?id=190357

        Reviewed by Jon Lee.

        No new tests because no behavior change.

        Use MediaPlayerEnums::VideoGravity instead of creating another identical enum in VideoFullscreenModel.

        * platform/cocoa/VideoFullscreenModel.h:
        (): Deleted.
        * platform/cocoa/VideoFullscreenModelVideoElement.h:
        * platform/cocoa/VideoFullscreenModelVideoElement.mm:
        (WebCore::VideoFullscreenModelVideoElement::setVideoLayerGravity):
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerLayer setVideoGravity:]):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::setVideoLayerGravity):
        * platform/mac/VideoFullscreenInterfaceMac.mm:
        (-[WebVideoFullscreenInterfaceMacObjC setUpPIPForVideoView:withFrame:inWindow:]):
        (-[WebVideoFullscreenInterfaceMacObjC pipDidClose:]):

2018-10-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: group media network entries by the node that triggered the request
        https://bugs.webkit.org/show_bug.cgi?id=189606
        <rdar://problem/44438527>

        Reviewed by Brian Burg.

        Test: http/tests/inspector/network/resource-initiatorNode.html

        Add extra arguments to functions that create `ResourceRequest` objects for media resources so
        that `initiatorNodeIdentifier` can be set for WebInspector frontend to use for grouping.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::setDisplayMode):
        * loader/FrameLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::willLoadMediaElementURL):
        Handles initial (e.g. DNT) resource requests.

        * loader/ImageLoader.cpp:
        (ImageLoader::updateFromElement):
        Handles "poster" requests.

        * loader/MediaResourceLoader.cpp:
        (MediaResourceLoader::requestResource):
        Handles byte-range requests.

        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::loadTimerFired):
        * loader/TextTrackLoader.h:
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::load):
        * html/HTMLTrackElement.h:
        Handles <track> (e.g. subtitle) requests.

        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::identifierForNode):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::identifierForNode):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::identifierForNodeImpl):
        Allows callers to get a `DOM.nodeId` for the given `Node`, which is (in this patch) attached
        to the `ResourceRequest` and later used by `InspectorNetworkAgent`.

        * inspector/agents/InspectorNetworkAgent.h:
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::willSendRequest):
        (WebCore::InspectorNetworkAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorNetworkAgent::buildInitiatorObject):

        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::initiatorNodeIdentifier const):
        (WebCore::ResourceRequestBase::setInitiatorNodeIdentifier):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setAsIsolatedCopy):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldProperties):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::shouldContinueAfterNotifyingLoadedFromMemoryCache):

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildObjectForCanvas):
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::enable):
        (WebCore::InspectorCanvasAgent::didCreateCanvasRenderingContext):
        Don't try to push the canvas' node to the frontend, as this will create a dangling node in
        `InspectorDOMAgent` if the canvas' node is detached from the DOM.

2018-10-08  Andy Estes  <aestes@apple.com>

        [Payment Request] Requests should be aborted after details settle when the user cancels
        https://bugs.webkit.org/show_bug.cgi?id=190333

        Reviewed by Alex Christensen.

        In Payment Request's "update a PaymentRequest's details" algorithm, user agents are expected
        to disable the payment UI when PaymentRequest details are being updated by the merchant.
        This is to prevent the user from accepting a payment before updated details are displayed.

        Further, Payment Request's "user aborts the payment request" algorithm says that the
        algorithm should be terminated prior to throwing an AbortError if the request is currently
        being updated, and also that user agents SHOULD ensure this never occurs. This is based on
        the assumption that payment UIs are disabled during details updates.

        For Apple Pay, while it is true that a payment cannot be accepted by the user while details
        are being updated by the merchant, the payment UI is not completely disabled. In particular,
        the user is allowed to abort the payment while details are being updated. We need to honor
        the user's request to abort without doing so in the middle of a details update.

        This patch defers a user-initiated abort until after details are settled, at which point the
        promise returned by show() is rejected with an AbortError. This behaves as if the details
        update promise were rejected by the merchant.

        Added a test case to http/tests/paymentrequest/payment-request-show-method.https.html.

        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::settleDetailsPromise):
        (WebCore::PaymentRequest::whenDetailsSettled):
        (WebCore::PaymentRequest::cancel):
        * Modules/paymentrequest/PaymentRequest.h:

2018-10-08  Chris Dumez  <cdumez@apple.com>

        Have DOMWindowProperty get is frame from its associated DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=190341

        Reviewed by Alex Christensen.

        Have DOMWindowProperty get is frame from its associated DOMWindow, instead of having its own
        m_frame that can potentially get out-of-sync.

        * Modules/cache/DOMWindowCaches.cpp:
        (WebCore::DOMWindowCaches::DOMWindowCaches):
        * Modules/geolocation/NavigatorGeolocation.cpp:
        (WebCore::NavigatorGeolocation::NavigatorGeolocation):
        (WebCore::NavigatorGeolocation::from):
        * Modules/geolocation/NavigatorGeolocation.h:
        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        (WebCore::DOMWindowIndexedDatabase::DOMWindowIndexedDatabase):
        * Modules/mediastream/NavigatorMediaDevices.cpp:
        (WebCore::NavigatorMediaDevices::NavigatorMediaDevices):
        (WebCore::NavigatorMediaDevices::from):
        * Modules/mediastream/NavigatorMediaDevices.h:
        * Modules/quota/DOMWindowQuota.cpp:
        (WebCore::DOMWindowQuota::DOMWindowQuota):
        * Modules/quota/NavigatorStorageQuota.cpp:
        (WebCore::NavigatorStorageQuota::NavigatorStorageQuota):
        * Modules/quota/NavigatorStorageQuota.h:
        * Modules/speech/DOMWindowSpeechSynthesis.cpp:
        (WebCore::DOMWindowSpeechSynthesis::DOMWindowSpeechSynthesis):
        * css/StyleMedia.cpp:
        (WebCore::StyleMedia::StyleMedia):
        (WebCore::StyleMedia::type const):
        (WebCore::StyleMedia::matchMedium const):
        * css/StyleMedia.h:
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::DOMApplicationCache):
        (WebCore::DOMApplicationCache::applicationCacheHost const):
        (WebCore::DOMApplicationCache::scriptExecutionContext const):
        * loader/appcache/DOMApplicationCache.h:
        * page/BarProp.cpp:
        (WebCore::BarProp::BarProp):
        (WebCore::BarProp::visible const):
        * page/BarProp.h:
        (WebCore::BarProp::create):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::DOMSelection):
        (WebCore::DOMSelection::visibleSelection const):
        (WebCore::DOMSelection::anchorNode const):
        (WebCore::DOMSelection::anchorOffset const):
        (WebCore::DOMSelection::focusNode const):
        (WebCore::DOMSelection::focusOffset const):
        (WebCore::DOMSelection::baseNode const):
        (WebCore::DOMSelection::baseOffset const):
        (WebCore::DOMSelection::extentNode const):
        (WebCore::DOMSelection::extentOffset const):
        (WebCore::DOMSelection::isCollapsed const):
        (WebCore::DOMSelection::type const):
        (WebCore::DOMSelection::rangeCount const):
        (WebCore::DOMSelection::collapse):
        (WebCore::DOMSelection::collapseToEnd):
        (WebCore::DOMSelection::collapseToStart):
        (WebCore::DOMSelection::empty):
        (WebCore::DOMSelection::setBaseAndExtent):
        (WebCore::DOMSelection::setPosition):
        (WebCore::DOMSelection::modify):
        (WebCore::DOMSelection::extend):
        (WebCore::DOMSelection::getRangeAt):
        (WebCore::DOMSelection::removeAllRanges):
        (WebCore::DOMSelection::addRange):
        (WebCore::DOMSelection::deleteFromDocument):
        (WebCore::DOMSelection::containsNode const):
        (WebCore::DOMSelection::toString):
        (WebCore::DOMSelection::shadowAdjustedNode const):
        (WebCore::DOMSelection::shadowAdjustedOffset const):
        (WebCore::DOMSelection::isValidForPosition const):
        * page/DOMSelection.h:
        (WebCore::DOMSelection::create):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::screen):
        (WebCore::DOMWindow::history):
        (WebCore::DOMWindow::locationbar):
        (WebCore::DOMWindow::menubar):
        (WebCore::DOMWindow::personalbar):
        (WebCore::DOMWindow::scrollbars):
        (WebCore::DOMWindow::statusbar):
        (WebCore::DOMWindow::toolbar):
        (WebCore::DOMWindow::applicationCache):
        (WebCore::DOMWindow::navigator):
        (WebCore::DOMWindow::location):
        (WebCore::DOMWindow::visualViewport):
        (WebCore::DOMWindow::webkitNamespace):
        (WebCore::DOMWindow::getSelection):
        (WebCore::DOMWindow::styleMedia):
        * page/DOMWindow.h:
        * page/DOMWindowExtension.cpp:
        (WebCore::DOMWindowExtension::DOMWindowExtension):
        * page/DOMWindowExtension.h:
        (WebCore::DOMWindowExtension::create):
        * page/DOMWindowProperty.cpp:
        (WebCore::DOMWindowProperty::DOMWindowProperty):
        (WebCore::DOMWindowProperty::~DOMWindowProperty):
        (WebCore::DOMWindowProperty::disconnectFrameForDocumentSuspension):
        (WebCore::DOMWindowProperty::reconnectFrameFromDocumentSuspension):
        (WebCore::DOMWindowProperty::willDestroyGlobalObjectInCachedFrame):
        (WebCore::DOMWindowProperty::willDestroyGlobalObjectInFrame):
        (WebCore::DOMWindowProperty::willDetachGlobalObjectFromFrame):
        (WebCore::DOMWindowProperty::frame const):
        * page/DOMWindowProperty.h:
        (WebCore::DOMWindowProperty::window const):
        * page/History.cpp:
        (WebCore::History::History):
        (WebCore::History::length const):
        (WebCore::History::scrollRestoration const):
        (WebCore::History::setScrollRestoration):
        (WebCore::History::stateInternal const):
        (WebCore::History::go):
        (WebCore::History::urlForState):
        (WebCore::History::stateObjectAdded):
        * page/History.h:
        * page/Location.cpp:
        (WebCore::Location::Location):
        (WebCore::Location::url const):
        (WebCore::Location::href const):
        (WebCore::Location::protocol const):
        (WebCore::Location::host const):
        (WebCore::Location::hostname const):
        (WebCore::Location::port const):
        (WebCore::Location::pathname const):
        (WebCore::Location::search const):
        (WebCore::Location::origin const):
        (WebCore::Location::ancestorOrigins const):
        (WebCore::Location::hash const):
        (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:
        (WebCore::Location::create):
        * page/Navigator.cpp:
        (WebCore::Navigator::Navigator):
        (WebCore::Navigator::appVersion const):
        (WebCore::Navigator::userAgent const):
        (WebCore::Navigator::share):
        (WebCore::Navigator::plugins):
        (WebCore::Navigator::mimeTypes):
        (WebCore::Navigator::cookieEnabled const):
        (WebCore::Navigator::javaEnabled const):
        (WebCore::Navigator::standalone const):
        * page/Navigator.h:
        * page/Performance.cpp:
        (WebCore::Performance::navigation):
        (WebCore::Performance::timing):
        * page/PerformanceNavigation.cpp:
        (WebCore::PerformanceNavigation::PerformanceNavigation):
        (WebCore::PerformanceNavigation::type const):
        (WebCore::PerformanceNavigation::redirectCount const):
        * page/PerformanceNavigation.h:
        (WebCore::PerformanceNavigation::create):
        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::PerformanceTiming):
        (WebCore::PerformanceTiming::documentLoader const):
        (WebCore::PerformanceTiming::documentTiming const):
        * page/PerformanceTiming.h:
        (WebCore::PerformanceTiming::create):
        * page/Screen.cpp:
        (WebCore::Screen::Screen):
        (WebCore::Screen::height const):
        (WebCore::Screen::width const):
        (WebCore::Screen::colorDepth const):
        (WebCore::Screen::pixelDepth const):
        (WebCore::Screen::availLeft const):
        (WebCore::Screen::availTop const):
        (WebCore::Screen::availHeight const):
        (WebCore::Screen::availWidth const):
        * page/Screen.h:
        * page/VisualViewport.cpp:
        (WebCore::VisualViewport::VisualViewport):
        (WebCore::VisualViewport::scriptExecutionContext const):
        (WebCore::VisualViewport::addEventListener):
        (WebCore::VisualViewport::updateFrameLayout const):
        (WebCore::VisualViewport::offsetLeft const):
        (WebCore::VisualViewport::offsetTop const):
        (WebCore::VisualViewport::pageLeft const):
        (WebCore::VisualViewport::pageTop const):
        (WebCore::VisualViewport::width const):
        (WebCore::VisualViewport::height const):
        (WebCore::VisualViewport::scale const):
        (WebCore::VisualViewport::update):
        (WebCore::VisualViewport::enqueueResizeEvent):
        (WebCore::VisualViewport::enqueueScrollEvent):
        * page/VisualViewport.h:
        * page/WebKitNamespace.cpp:
        (WebCore::WebKitNamespace::WebKitNamespace):
        * page/WebKitNamespace.h:
        (WebCore::WebKitNamespace::create):
        * plugins/DOMMimeTypeArray.cpp:
        (WebCore::DOMMimeTypeArray::DOMMimeTypeArray):
        (WebCore::DOMMimeTypeArray::item):
        (WebCore::DOMMimeTypeArray::namedItem):
        (WebCore::DOMMimeTypeArray::getPluginData const):
        * plugins/DOMMimeTypeArray.h:
        (WebCore::DOMMimeTypeArray::create):
        * plugins/DOMPluginArray.cpp:
        (WebCore::DOMPluginArray::DOMPluginArray):
        (WebCore::DOMPluginArray::item):
        (WebCore::DOMPluginArray::namedItem):
        (WebCore::DOMPluginArray::refresh):
        (WebCore::DOMPluginArray::pluginData const):
        * plugins/DOMPluginArray.h:
        (WebCore::DOMPluginArray::create):
        * storage/Storage.cpp:
        (WebCore::Storage::create):
        (WebCore::Storage::Storage):
        (WebCore::Storage::setItem):
        (WebCore::Storage::removeItem):
        (WebCore::Storage::clear):
        * storage/Storage.h:

2018-10-08  Antti Koivisto  <antti@apple.com>

        Move FontCascadeDescription to a file of its own
        https://bugs.webkit.org/show_bug.cgi?id=190348

        Reviewed by Chris Dumez.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FontCascade.h:
        * platform/graphics/FontCascadeDescription.cpp: Copied from Source/WebCore/platform/graphics/FontDescription.cpp.
        (WebCore::FontDescription::FontDescription): Deleted.
        (WebCore::m_shouldAllowUserInstalledFonts): Deleted.
        (WebCore::FontDescription::setLocale): Deleted.
        (WebCore::FontDescription::invalidateCaches): Deleted.
        * platform/graphics/FontCascadeDescription.h: Copied from Source/WebCore/platform/graphics/FontDescription.h.
        (WebCore::FontDescription::operator!= const): Deleted.
        (WebCore::FontDescription::computedSize const): Deleted.
        (WebCore::FontDescription::computedPixelSize const): Deleted.
        (WebCore::FontDescription::italic const): Deleted.
        (WebCore::FontDescription::stretch const): Deleted.
        (WebCore::FontDescription::weight const): Deleted.
        (WebCore::FontDescription::fontSelectionRequest const): Deleted.
        (WebCore::FontDescription::renderingMode const): Deleted.
        (WebCore::FontDescription::textRenderingMode const): Deleted.
        (WebCore::FontDescription::script const): Deleted.
        (WebCore::FontDescription::locale const): Deleted.
        (WebCore::FontDescription::orientation const): Deleted.
        (WebCore::FontDescription::nonCJKGlyphOrientation const): Deleted.
        (WebCore::FontDescription::widthVariant const): Deleted.
        (WebCore::FontDescription::featureSettings const): Deleted.
        (WebCore::FontDescription::variationSettings const): Deleted.
        (WebCore::FontDescription::fontSynthesis const): Deleted.
        (WebCore::FontDescription::variantCommonLigatures const): Deleted.
        (WebCore::FontDescription::variantDiscretionaryLigatures const): Deleted.
        (WebCore::FontDescription::variantHistoricalLigatures const): Deleted.
        (WebCore::FontDescription::variantContextualAlternates const): Deleted.
        (WebCore::FontDescription::variantPosition const): Deleted.
        (WebCore::FontDescription::variantCaps const): Deleted.
        (WebCore::FontDescription::variantNumericFigure const): Deleted.
        (WebCore::FontDescription::variantNumericSpacing const): Deleted.
        (WebCore::FontDescription::variantNumericFraction const): Deleted.
        (WebCore::FontDescription::variantNumericOrdinal const): Deleted.
        (WebCore::FontDescription::variantNumericSlashedZero const): Deleted.
        (WebCore::FontDescription::variantAlternates const): Deleted.
        (WebCore::FontDescription::variantEastAsianVariant const): Deleted.
        (WebCore::FontDescription::variantEastAsianWidth const): Deleted.
        (WebCore::FontDescription::variantEastAsianRuby const): Deleted.
        (WebCore::FontDescription::variantSettings const): Deleted.
        (WebCore::FontDescription::opticalSizing const): Deleted.
        (WebCore::FontDescription::fontStyleAxis const): Deleted.
        (WebCore::FontDescription::shouldAllowUserInstalledFonts const): Deleted.
        (WebCore::FontDescription::setComputedSize): Deleted.
        (WebCore::FontDescription::setItalic): Deleted.
        (WebCore::FontDescription::setStretch): Deleted.
        (WebCore::FontDescription::setIsItalic): Deleted.
        (WebCore::FontDescription::setWeight): Deleted.
        (WebCore::FontDescription::setRenderingMode): Deleted.
        (WebCore::FontDescription::setTextRenderingMode): Deleted.
        (WebCore::FontDescription::setOrientation): Deleted.
        (WebCore::FontDescription::setNonCJKGlyphOrientation): Deleted.
        (WebCore::FontDescription::setWidthVariant): Deleted.
        (WebCore::FontDescription::setFeatureSettings): Deleted.
        (WebCore::FontDescription::setVariationSettings): Deleted.
        (WebCore::FontDescription::setFontSynthesis): Deleted.
        (WebCore::FontDescription::setVariantCommonLigatures): Deleted.
        (WebCore::FontDescription::setVariantDiscretionaryLigatures): Deleted.
        (WebCore::FontDescription::setVariantHistoricalLigatures): Deleted.
        (WebCore::FontDescription::setVariantContextualAlternates): Deleted.
        (WebCore::FontDescription::setVariantPosition): Deleted.
        (WebCore::FontDescription::setVariantCaps): Deleted.
        (WebCore::FontDescription::setVariantNumericFigure): Deleted.
        (WebCore::FontDescription::setVariantNumericSpacing): Deleted.
        (WebCore::FontDescription::setVariantNumericFraction): Deleted.
        (WebCore::FontDescription::setVariantNumericOrdinal): Deleted.
        (WebCore::FontDescription::setVariantNumericSlashedZero): Deleted.
        (WebCore::FontDescription::setVariantAlternates): Deleted.
        (WebCore::FontDescription::setVariantEastAsianVariant): Deleted.
        (WebCore::FontDescription::setVariantEastAsianWidth): Deleted.
        (WebCore::FontDescription::setVariantEastAsianRuby): Deleted.
        (WebCore::FontDescription::setOpticalSizing): Deleted.
        (WebCore::FontDescription::setFontStyleAxis): Deleted.
        (WebCore::FontDescription::setShouldAllowUserInstalledFonts): Deleted.
        (WebCore::FontDescription::operator== const): Deleted.
        * platform/graphics/FontDescription.cpp:
        (WebCore::FontDescription::invalidateCaches):
        (WebCore::FontCascadeDescription::FontCascadeDescription): Deleted.
        (WebCore::FontCascadeDescription::effectiveFamilyCount const): Deleted.
        (WebCore::FontCascadeDescription::effectiveFamilyAt const): Deleted.
        (WebCore::FontCascadeDescription::lighterWeight): Deleted.
        (WebCore::FontCascadeDescription::bolderWeight): Deleted.
        (WebCore::FontCascadeDescription::familiesEqualForTextAutoSizing const): Deleted.
        (WebCore::FontCascadeDescription::familyNamesAreEqual): Deleted.
        (WebCore::FontCascadeDescription::familyNameHash): Deleted.
        (WebCore::FontCascadeDescription::foldedFamilyName): Deleted.
        * platform/graphics/FontDescription.h:
        (WebCore::FontCascadeDescription::operator!= const): Deleted.
        (WebCore::FontCascadeDescription::familyCount const): Deleted.
        (WebCore::FontCascadeDescription::firstFamily const): Deleted.
        (WebCore::FontCascadeDescription::familyAt const): Deleted.
        (WebCore::FontCascadeDescription::families const): Deleted.
        (WebCore::FontCascadeDescription::specifiedSize const): Deleted.
        (WebCore::FontCascadeDescription::isAbsoluteSize const): Deleted.
        (WebCore::FontCascadeDescription::lighterWeight const): Deleted.
        (WebCore::FontCascadeDescription::bolderWeight const): Deleted.
        (WebCore::FontCascadeDescription::useFixedDefaultSize const): Deleted.
        (WebCore::FontCascadeDescription::kerning const): Deleted.
        (WebCore::FontCascadeDescription::keywordSize const): Deleted.
        (WebCore::FontCascadeDescription::keywordSizeAsIdentifier const): Deleted.
        (WebCore::FontCascadeDescription::fontSmoothing const): Deleted.
        (WebCore::FontCascadeDescription::isSpecifiedFont const): Deleted.
        (WebCore::FontCascadeDescription::setOneFamily): Deleted.
        (WebCore::FontCascadeDescription::setFamilies): Deleted.
        (WebCore::FontCascadeDescription::setSpecifiedSize): Deleted.
        (WebCore::FontCascadeDescription::setIsAbsoluteSize): Deleted.
        (WebCore::FontCascadeDescription::setKerning): Deleted.
        (WebCore::FontCascadeDescription::setKeywordSize): Deleted.
        (WebCore::FontCascadeDescription::setKeywordSizeFromIdentifier): Deleted.
        (WebCore::FontCascadeDescription::setFontSmoothing): Deleted.
        (WebCore::FontCascadeDescription::setIsSpecifiedFont): Deleted.
        (WebCore::FontCascadeDescription::equalForTextAutoSizing const): Deleted.
        (WebCore::FontCascadeDescription::initialItalic): Deleted.
        (WebCore::FontCascadeDescription::initialFontStyleAxis): Deleted.
        (WebCore::FontCascadeDescription::initialWeight): Deleted.
        (WebCore::FontCascadeDescription::initialStretch): Deleted.
        (WebCore::FontCascadeDescription::initialSmallCaps): Deleted.
        (WebCore::FontCascadeDescription::initialKerning): Deleted.
        (WebCore::FontCascadeDescription::initialFontSmoothing): Deleted.
        (WebCore::FontCascadeDescription::initialTextRenderingMode): Deleted.
        (WebCore::FontCascadeDescription::initialFontSynthesis): Deleted.
        (WebCore::FontCascadeDescription::initialVariantPosition): Deleted.
        (WebCore::FontCascadeDescription::initialVariantCaps): Deleted.
        (WebCore::FontCascadeDescription::initialVariantAlternates): Deleted.
        (WebCore::FontCascadeDescription::initialOpticalSizing): Deleted.
        (WebCore::FontCascadeDescription::initialLocale): Deleted.
        (WebCore::FontCascadeDescription::operator== const): Deleted.
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        * rendering/style/RenderStyle.h:

2018-10-08  Yacine Bandou  <yacine.bandou_ext@softathome.com>

        [EME][GStreamer] Add support for WebM encrypted caps "application/x-webm-enc"
        https://bugs.webkit.org/show_bug.cgi?id=189239

        Reviewed by Xabier Rodriguez-Calvar.

        Add the support of GStreamer caps "application/x-webm-enc" in GStreamerCommon.

        The DRM system id field in the encrypted event is set to GST_PROTECTION_UNSPECIFIED_SYSTEM_ID
        in case of WebM, for details, see https://bugzilla.gnome.org/attachment.cgi?id=365211.

        Tests: media/encrypted-media/clearKey/clearKey-encrypted-webm-eventmse.html
               media/encrypted-media/clearKey/clearKey-webm-video-playback-mse.html

        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::capsMediaType):
        (WebCore::areEncryptedCaps):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::initializationDataEncountered):
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (webkitMediaCommonEncryptionDecryptTransformCaps):

2018-10-07  Dan Bernstein  <mitz@apple.com>

        Fixed building with the latest macOS SDK

        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::ensurePlatformContext): Suppressed deprecation warnings around use of
          CGIOSurfaceContextSetDisplayMask.

2018-10-06  Justin Michaud  <justin_michaud@apple.com>

        Properly determine if css custom property values are computationally independent
        https://bugs.webkit.org/show_bug.cgi?id=190303

        Reviewed by Antti Koivisto.

        Add getDirectComputationalDependencies method to determine if a value is computationally
        dependent. Use this method in CSS.registerProperty to replace existing substring checks.
        No new tests are needed because the existing tests cover this behaviour.

        * css/CSSCalculationValue.cpp:
        (WebCore::determineCategory):
        * css/CSSCalculationValue.h:
        (WebCore::CSSCalcValue::getDirectComputationalDependencies const):
        (WebCore::CSSCalcValue::getDirectRootComputationalDependencies const):
        * css/CSSCustomPropertyValue.cpp:
        (WebCore::CSSCustomPropertyValue::customCSSText const):
        (WebCore::CSSCustomPropertyValue::tokens const):
        (WebCore::CSSCustomPropertyValue::setResolvedTypedValue):
        * css/CSSCustomPropertyValue.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::getDirectComputationalDependencies const):
        (WebCore::CSSPrimitiveValue::getDirectRootComputationalDependencies const):
        * css/CSSPrimitiveValue.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::getDirectComputationalDependencies const):
        (WebCore::CSSValue::getDirectRootComputationalDependencies const):
        * css/CSSValue.h:
        * css/CSSVariableData.cpp:
        (WebCore::CSSVariableData::CSSVariableData):
        (WebCore::CSSVariableData::resolveVariableReference const):
        * css/DOMCSSRegisterCustomProperty.cpp:
        (WebCore::DOMCSSRegisterCustomProperty::registerProperty):

2018-10-05  Chris Dumez  <cdumez@apple.com>

        Regression(r236862): Crash under DOMWindowExtension::willDetachGlobalObjectFromFrame()
        https://bugs.webkit.org/show_bug.cgi?id=190320
        <rdar://problem/45044814>

        Reviewed by Geoffrey Garen.

        r236862 caused DOMWindowProperty::willDetachGlobalObjectFromFrame() to get called several
        times. There was no effect for most DOMWindowProperty objects. However, it would cause
        crashes for DOMWindowExtension objects, which subclass DOMWindowProperty and override
        DOMWindowProperty::willDetachGlobalObjectFromFrame() because they dereference the frame
        without null checking it.

        To address the issue, we now make sure DOMWindowProperty::willDetachGlobalObjectFromFrame()
        is not called several times.

        * dom/Document.cpp:
        (WebCore::Document::detachFromFrame):
        Stop calling DOMWindow::willDetachDocumentFromFrame() here as most call sites already
        take care of calling DOMWindow::willDetachDocumentFromFrame() beforehand (e.g.
        Document::prepareForDestruction()).
        Also, return early if the Document is already detached from its frame.

        (WebCore::Document::frameWasDisconnectedFromOwner):
        Add new utility function called when a Frame is disconnected from its owner which
        calls both Document::detachFromFrame() and DOMWindow::willDetachDocumentFromFrame().

        * dom/Document.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::willDetachDocumentFromFrame):
        Return early if the Window is already detached from its frame.

        * page/Frame.cpp:
        (WebCore::Frame::disconnectOwnerElement):

2018-10-05  Jer Noble  <jer.noble@apple.com>

        Further unreviewed watchOS build fix: videoPerformanceMetrics unavailable on watchOS.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::videoPlaybackQualityMetrics):

2018-10-05  Jer Noble  <jer.noble@apple.com>

       Unreviewed watchOS build fix: videoPerformanceMetrics unavailable on watchOS.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::videoPlaybackQualityMetrics):

2018-10-05  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] RealtimeMediaSource should be able to vend hashed IDs
        https://bugs.webkit.org/show_bug.cgi?id=190142
        <rdar://problem/44911109>

        Reviewed by Youenn Fablet.

        No new tests, covered by existing tests.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::Source): Update order of parameters passed
        to base class.

        * Modules/mediastream/MediaDevicesRequest.cpp:
        (WebCore::MediaDevicesRequest::start): ASSERT if document.deviceIDHashSalt is not the same
        as passed salt.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::getSettings const): Don't need to hash ID.
        (WebCore::MediaStreamTrack::getCapabilities const): Ditto.
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/MediaStreamTrack.idl:

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::allow): Pass hash salt to createMediaStream.

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::createReceiverForSource): Update order of parameters passed
        to base class.

        * Modules/webaudio/MediaStreamAudioSource.cpp:
        (WebCore::MediaStreamAudioSource::MediaStreamAudioSource): Ditto.
        * platform/mediastream/MediaConstraints.h:

        * platform/mediastream/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::RealtimeIncomingAudioSource): Ditto.

        * platform/mediastream/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource): Ditto.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::RealtimeMediaSource): Calculate hashed ID.
        (WebCore::RealtimeMediaSource::selectSettings): Use m_hashedID.
        (WebCore::RealtimeMediaSource::hashedId const): New.
        (WebCore::RealtimeMediaSource::deviceIDHashSalt const): New.
        * platform/mediastream/RealtimeMediaSource.h:

        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::createMediaStream): Take hash salt, pass it when creating
        a source.
        (WebCore::RealtimeMediaSourceCenter::getUserMediaDevices): Ditto.
        (WebCore::RealtimeMediaSourceCenter::validateRequestConstraints): Ditto.
        * platform/mediastream/RealtimeMediaSourceCenter.h:

        * platform/mediastream/RealtimeMediaSourceFactory.h:
        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::RealtimeVideoSource): Update parameters.
        * platform/mediastream/RealtimeVideoSource.h:

        * platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp:
        (WebCore::GStreamerAudioCaptureSource::create): Ditto.
        (WebCore::GStreamerAudioCaptureSource::GStreamerAudioCaptureSource): Ditto.
        * platform/mediastream/gstreamer/GStreamerAudioCaptureSource.h:

        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        (WebCore::GStreamerVideoCaptureSource::create): Ditto.
        (WebCore::GStreamerVideoCaptureSource::GStreamerVideoCaptureSource): Ditto.
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h:

        * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.cpp:
        (WebCore::WrappedMockRealtimeAudioSource::WrappedMockRealtimeAudioSource): Ditto.
        (WebCore::MockRealtimeAudioSource::create): Ditto.
        (WebCore::MockGStreamerAudioCaptureSource::MockGStreamerAudioCaptureSource): Ditto.
        * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.h:

        * platform/mediastream/gstreamer/MockGStreamerVideoCaptureSource.cpp:
        (WebCore::MockRealtimeVideoSource::create): Ditto.
        (WebCore::MockGStreamerVideoCaptureSource::MockGStreamerVideoCaptureSource): Ditto.
        * platform/mediastream/gstreamer/MockGStreamerVideoCaptureSource.h:

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::create): Ditto.
        (WebCore::AVVideoCaptureSource::AVVideoCaptureSource): Ditto.
        (WebCore::AVVideoCaptureSource::settings): Use hashedId to set device ID.
        (WebCore::AVVideoCaptureSource::capabilities): Ditto.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::create): Update parameters.
        (WebCore::CoreAudioCaptureSource::CoreAudioCaptureSource): Ditto.
        (WebCore::CoreAudioCaptureSource::capabilities): Use hashedId to set device ID.
        (WebCore::CoreAudioCaptureSource::settings): Ditto.
        * platform/mediastream/mac/CoreAudioCaptureSource.h:

        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        (WebCore::DisplayCaptureSourceCocoa::DisplayCaptureSourceCocoa): Update parameters.
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.h:

        * platform/mediastream/mac/MockRealtimeAudioSourceMac.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSource::create): Ditto.
        (WebCore::MockRealtimeAudioSourceMac::MockRealtimeAudioSourceMac): Ditto.

        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSource::create): Ditto.
        (WebCore::MockRealtimeVideoSourceMac::MockRealtimeVideoSourceMac): Ditto.

        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:

        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
        (WebCore::ScreenDisplayCaptureSourceMac::create): Ditto.
        (WebCore::ScreenDisplayCaptureSourceMac::ScreenDisplayCaptureSourceMac): Ditto.
        (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream): Update logging.
        (WebCore::ScreenDisplayCaptureSourceMac::startDisplayStream): Ditto.
        (WebCore::ScreenDisplayCaptureSourceMac::frameAvailable): Ditto.

        * platform/mediastream/mac/WindowDisplayCaptureSourceMac.h:
        * platform/mediastream/mac/WindowDisplayCaptureSourceMac.mm:
        (WebCore::WindowDisplayCaptureSourceMac::create): Update parameters.

        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::create): Ditto.
        (WebCore::MockRealtimeAudioSource::MockRealtimeAudioSource): Ditto.
        (WebCore::MockRealtimeAudioSource::settings): Use hashedId to set device ID.
        (WebCore::MockRealtimeAudioSource::capabilities): Ditto.
        * platform/mock/MockRealtimeAudioSource.h:

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::create): Update parameters.
        (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource): Ditto.
        (WebCore::MockRealtimeVideoSource::capabilities): Use hashedId to set device ID.
        (WebCore::MockRealtimeVideoSource::settings): Ditto.
        * platform/mock/MockRealtimeVideoSource.h:

2018-10-03  Jer Noble  <jer.noble@apple.com>

        Add support for reporting "display composited video frames" through the VideoPlaybackQuality object.
        https://bugs.webkit.org/show_bug.cgi?id=190266

        Reviewed by Eric Carlson.

        Test: TestWebKitAPI.VideoQualityDisplayCompositing

        Modify VideoPlaybackQuality to take a VideoPlaybackQualityMetrics object in its
        constructor (rather than individual fields). Add a new setting to control visibility
        of the displayCompositedVideoFrames attribute on VideoPlaybackQuality. Add support
        for VideoPlaybackQualityMetrics to MediaPlayerPrivateAVFoundationObjC.

        * Modules/mediasource/VideoPlaybackQuality.cpp:
        (WebCore::VideoPlaybackQuality::create):
        (WebCore::VideoPlaybackQuality::VideoPlaybackQuality):
        * Modules/mediasource/VideoPlaybackQuality.h:
        (WebCore::VideoPlaybackQuality::displayCompositedVideoFrames const):
        * Modules/mediasource/VideoPlaybackQuality.idl:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::getVideoPlaybackQuality):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * page/Settings.yaml:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::videoPlaybackQualityMetrics):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::videoPlaybackQualityMetrics):
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::videoPlaybackQualityMetrics):

2018-10-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r236866.

        Breaks internal builds.

        Reverted changeset:

        "Add support for reporting "display composited video frames"
        through the VideoPlaybackQuality object."
        https://bugs.webkit.org/show_bug.cgi?id=190266
        https://trac.webkit.org/changeset/236866

2018-10-05  Antoine Quint  <graouts@apple.com>

        [Web Animations] REGRESSION (r236809): crash under AnimationTimeline::updateCSSAnimationsForElement()
        https://bugs.webkit.org/show_bug.cgi?id=190307
        <rdar://problem/45009901>

        Reviewed by Dean Jackson.

        We could crash with an invalid access to cssAnimationsByName since cancelOrRemoveDeclarativeAnimation() already
        does the job of clearing the m_elementToCSSAnimationByName entry for this particular element if there are no
        animations targeting it anymore. This started happening in r236809 when we switched from a simple call to to cancel()
        to a call to cancelOrRemoveDeclarativeAnimation(). We can safely remove the removal here since cancelOrRemoveDeclarativeAnimation()
        will already have performed this task safely if needed.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::updateCSSAnimationsForElement):

2018-10-04  Jer Noble  <jer.noble@apple.com>

        Add support for reporting "display composited video frames" through the VideoPlaybackQuality object.
        https://bugs.webkit.org/show_bug.cgi?id=190266

        Reviewed by Eric Carlson.

        Test: TestWebKitAPI.VideoQualityDisplayCompositing

        Modify VideoPlaybackQuality to take a VideoPlaybackQualityMetrics object in its
        constructor (rather than individual fields). Add a new setting to control visibility
        of the displayCompositedVideoFrames attribute on VideoPlaybackQuality. Add support
        for VideoPlaybackQualityMetrics to MediaPlayerPrivateAVFoundationObjC.

        * Modules/mediasource/VideoPlaybackQuality.cpp:
        (WebCore::VideoPlaybackQuality::create):
        (WebCore::VideoPlaybackQuality::VideoPlaybackQuality):
        * Modules/mediasource/VideoPlaybackQuality.h:
        (WebCore::VideoPlaybackQuality::displayCompositedVideoFrames const):
        * Modules/mediasource/VideoPlaybackQuality.idl:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::getVideoPlaybackQuality):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * page/Settings.yaml:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::videoPlaybackQualityMetrics):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::videoPlaybackQualityMetrics):
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::videoPlaybackQualityMetrics):

2018-10-04  Chris Dumez  <cdumez@apple.com>

        A Document / Window should lose its browsing context as soon as its iframe is removed from the document
        https://bugs.webkit.org/show_bug.cgi?id=190282

        Reviewed by Ryosuke Niwa.

        A Document / Window should lose its browsing context (aka Frame) as soon as its iframe is removed from
        the document. In WebKit, a Document / Window's Frame was only getting nulled out when the frame gets
        destroyed, which happens later usually after a GC happens.

        Specification:
        - https://html.spec.whatwg.org/#the-iframe-element
        """
        When an iframe element is removed from a document, the user agent must discard the element's nested browsing
        context, if it is not null, and then set the element's nested browsing context to null.
        """

        This was not consistent with the specification or other browsers (tested Chrome and Firefox) so this
        patch is aligning our behavior.

        In a follow-up, I am planning to look into making the Window not be a FrameDestructionObserver, and instead
        get its frame from the Document. This should make the code simpler.

        No new tests, rebaselined existing tests.

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::getUserMedia const):
        * Modules/mediastream/MediaDevices.h:
        Update getUserMedia() to reject a the Promise with an InvalidStateError when calling after the
        document has been detached, instead of throwing an InvalidStateError. This behavior is as per
        specification:
        - https://w3c.github.io/mediacapture-main/#dom-mediadevices-getusermedia (Step 4)
        I needed to make this change to keep one of our layout tests passing.

        * dom/Document.cpp:
        (WebCore::Document::attachToCachedFrame):
        (WebCore::Document::detachFromFrame):
        * dom/Document.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::didSecureTransitionTo):
        (WebCore::DOMWindow::willDetachDocumentFromFrame):
        (WebCore::DOMWindow::setStatus):
        (WebCore::DOMWindow::detachFromFrame):
        (WebCore::DOMWindow::attachToFrame):
        * page/DOMWindow.h:
        * page/DOMWindowProperty.cpp:
        (WebCore::DOMWindowProperty::disconnectFrameForDocumentSuspension):
        (WebCore::DOMWindowProperty::willDestroyGlobalObjectInCachedFrame):
        (WebCore::DOMWindowProperty::willDestroyGlobalObjectInFrame):
        * page/Frame.cpp:
        (WebCore::Frame::disconnectOwnerElement):

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::drawText):
        Calling drawText() with a null String hits an assertion in debug. This was triggered by one of
        our layout tests so I made sure we only call drawText when the String is not null.

2018-10-04  Jeremy Jones  <jeremyj@apple.com>

        Unify implementation in VideoFullscreenInterfaceAVKit
        https://bugs.webkit.org/show_bug.cgi?id=190091
        rdar://problem/44734523

        Reviewed by Jer Noble.

        No new tests because no behavior change.

        Unified code in VideoFullscreenInterfaceAVKit now that new code path is proven and include
        any changes that had been made in the old path.

        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerViewControllerDelegate playerViewControllerShouldStartPictureInPictureFromInlineWhenEnteringBackground:]):
        (VideoFullscreenInterfaceAVKit::preparedToExitFullscreen):
        (VideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::requestUpdateInlineRect):
        (VideoFullscreenControllerContext::requestVideoContentLayer):
        (VideoFullscreenControllerContext::returnVideoContentLayer):
        (VideoFullscreenControllerContext::didSetupFullscreen):
        (VideoFullscreenControllerContext::didExitFullscreen):

2018-10-04  Justin Michaud  <justin_michaud@apple.com>

        Bindings generator should support static attributes that are interfaces with CallWith
        https://bugs.webkit.org/show_bug.cgi?id=190292

        Reviewed by Chris Dumez.

        Add support for static attributes that support callWith to the bindings generator. This
        is needed for CSS.paintWorklet.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeGetterBodyDefinition):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjConstructorTestStaticReadonlyObjGetter):
        (WebCore::jsTestObjConstructorTestStaticReadonlyObj):
        * bindings/scripts/test/TestObj.idl:

2018-10-04  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r236730.

        This caused a consistent crash in test http/tests/media/media-stream/get-display-media-prompt.html.

        Reverted changeset:

        "[MediaStream] RealtimeMediaSource should be able to vend
        hashed IDs"
        https://bugs.webkit.org/show_bug.cgi?id=190142
        https://trac.webkit.org/changeset/236730

2018-10-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Fix some font attribute conversion bugs in preparation for "Font > Styles…" support in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=190289
        <rdar://problem/45020806>

        Reviewed by Ryosuke Niwa.

        Makes some small adjustments to fix two bugs in font attribute conversion logic. See below for more detail.

        Tests:  FontManagerTests.AddFontShadowUsingFontOptions
                FontManagerTests.AddAndRemoveColorsUsingFontOptions

        * editing/FontAttributeChanges.cpp:
        (WebCore::cssValueListForShadow):
        * editing/cocoa/FontAttributesCocoa.mm:

        Currently, we bail from adding a font shadow if the shadow's offset is empty. However, valid shadow offsets may
        have negative dimensions, so a check for `isZero()` should be used instead.

        (WebCore::FontAttributes::createDictionary const):
        * platform/mac/WebCoreNSFontManagerExtras.mm:

        Fall back to a transparent background color; this allows senders to remove the current background color by just
        removing NSBackgroundColorAttributeName from the attribute dictionary, rather than explicitly setting it to the
        transparent color (this scenario is exercised when using "Font > Styles…" to specify a font style without a
        background color).

        (WebCore::computedFontAttributeChanges):

2018-10-03  Ryosuke Niwa  <rniwa@webkit.org>

        MutationRecord doesn't keep JS wrappers of target, addedNodes, and removedNodes alive
        https://bugs.webkit.org/show_bug.cgi?id=190277

        Reviewed by Antti Koivisto.

        The bug was caused by JSMutationRecord not visiting any of the nodes referenced by mutation records.

        Fixed the bug by adding JSMutationRecord::visitAdditionalChildren, which adds the root nodes of
        the root nodes of the target, addedNodes, and removedNodes in each mutation record.

        Test: fast/dom/MutationObserver/mutation-record-keeps-js-wrappers-of-nodes-alive.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSMutationRecordCustom.cpp: Added.
        (WebCore::JSMutationRecord::visitAdditionalChildren): Added.
        * bindings/js/JSPerformanceObserverCustom.cpp: This file got dumped out of a unified build file
        where using namespace JSC was defined. Use the fully qualified names to refer to JSC types.
        (WebCore::JSPerformanceObserverOwner::isReachableFromOpaqueRoots):
        * dom/MutationRecord.cpp:
        (WebCore::ChildListRecord::visitNodesConcurrently): Added.
        (WebCore::RecordWithEmptyNodeLists::visitNodesConcurrently): Added.
        (WebCore::MutationRecordWithNullOldValue::visitNodesConcurrently): Added.
        * dom/MutationRecord.h:
        * dom/MutationRecord.idl:

2018-10-04  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Move time out control from WebProcess to UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=189642
        <rdar://problem/44476765>

        Reviewed by Chris Dumez.

        Since now the control unit of WebAuthN has been moved to UI Process, i.e. AuthenticatorManager,
        the time out timer should move to UI Process as well.

        Tests: http/wpt/webauthn/public-key-credential-create-failure-local-silent.https.html
               http/wpt/webauthn/public-key-credential-get-failure-local-silent.https.html

        * Modules/webauthn/AuthenticatorCoordinator.cpp:
        (WebCore::AuthenticatorCoordinator::create const):
        (WebCore::AuthenticatorCoordinator::discoverFromExternalSource const):
        (WebCore::AuthenticatorCoordinatorInternal::initTimeoutTimer): Deleted.
        (WebCore::AuthenticatorCoordinatorInternal::didTimeoutTimerFire): Deleted.
        * Modules/webauthn/PublicKeyCredentialCreationOptions.h:
        (WebCore::PublicKeyCredentialCreationOptions::encode const):
        (WebCore::PublicKeyCredentialCreationOptions::decode):
        * Modules/webauthn/PublicKeyCredentialRequestOptions.h:
        (WebCore::PublicKeyCredentialRequestOptions::encode const):
        (WebCore::PublicKeyCredentialRequestOptions::decode):

2018-10-04  Chris Dumez  <cdumez@apple.com>

        Regression(r236779): Crash when changing the input element type from inside an 'input' event listener
        https://bugs.webkit.org/show_bug.cgi?id=190252

        Reviewed by Alex Christensen.

        Add a null check for element() after firing the 'input' event and before firing the 'change' event
        in case the input event listener changes the input type.

        Tests: fast/dom/HTMLInputElement/change-type-in-click-event-listener.html
               fast/dom/HTMLInputElement/change-type-in-input-event-listener.html

        * html/BaseCheckableInputType.cpp:
        (WebCore::BaseCheckableInputType::fireInputAndChangeEvents):

2018-10-04  Yuhan Wu  <yuhan_wu@apple.com>

        runtime flag and IDL for MediaRecorder
        https://bugs.webkit.org/show_bug.cgi?id=190018

        Reviewed by Youenn Fablet and Chris Dumez.

        Covered by tests:
        imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-constructor.html
        imported/w3c/web-platform-tests/mediacapture-record/BlobEvent-constructor.html

        Add an architecture of the IDL and the class for MediaRecorder and BlobEvent.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/mediarecorder/BlobEvent.h:
        (WebCore::BlobEvent::create):
        (WebCore::BlobEvent:::Event):
        * Modules/mediarecorder/BlobEvent.idl:
        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::create):
        (WebCore::MediaRecorder::MediaRecorder):
        (WebCore::MediaRecorder::activeDOMObjectName const):
        (WebCore::MediaRecorder::canSuspendForDocumentSuspension const):
        * Modules/mediarecorder/MediaRecorder.h: Added.
        (WebCore::MediaRecorder::state const):
        (WebCore::MediaRecorder::~MediaRecorder):
        * Modules/mediarecorder/MediaRecorder.idl:
        * Modules/mediastream/RTCRtpReceiver.cpp:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::mediaRecorderEnabled const):
        (WebCore::RuntimeEnabledFeatures::setMediaRecorderEnabled):

2018-10-04  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r236803.

        Caused crashes on some bots

        Reverted changeset:

        "Regression(r236779): Crash when changing the input element
        type from inside an 'input' event listener"
        https://bugs.webkit.org/show_bug.cgi?id=190252
        https://trac.webkit.org/changeset/236803

2018-10-04  Dan Bernstein  <mitz@apple.com>

        Tried to fix the Mojave build after r236832.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVStreamDataParserListener streamDataParserWillProvideContentKeyRequestInitializationData:forTrackID:]):
        (-[WebAVStreamDataParserListener streamDataParser:didProvideContentKeyRequestInitializationData:forTrackID:]):

2018-10-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        ENABLE(ASSERT) used in grid code when !ASSERT_DISABLED is desired
        https://bugs.webkit.org/show_bug.cgi?id=190145

        Reviewed by Javier Fernandez.

        Replace ENABLE(ASSERT), which doesn't exist, with !ASSERT_DISABLED.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::placeItemsOnGrid const):
        (WebCore::RenderGrid::baselinePosition const):
        * rendering/style/GridArea.h:
        (WebCore::GridSpan::GridSpan):

2018-10-04  Dan Bernstein  <mitz@apple.com>

        WebCore part of [Xcode] Update some build settings as recommended by Xcode 10
        https://bugs.webkit.org/show_bug.cgi?id=190250

        Reviewed by Andy Estes.

        * Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA, CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF,
          CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED, and CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS.

        * WebCore.xcodeproj/project.pbxproj: Let Xcode update LastUpgradeCheck and remove a
          duplicate reference in a Compile Sources build phase.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: Suppress -Wdeprecated-implementations
          around implementations of deprecated accessibility methods.

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForBOM): Addressed CLANG_WARN_COMMA.

        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveAuthenticationChallenge:]):
          Suppress -Wdeprecated-implementations around implementations of this deprecated delegate method.
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:canAuthenticateAgainstProtectionSpace:]): Ditto.

2018-10-02  Darin Adler  <darin@apple.com>

        AudioNode.connect should use [ReturnValue]
        https://bugs.webkit.org/show_bug.cgi?id=190231

        Reviewed by Eric Carlson.

        This is a slightly more efficient way to return a value that is always
        identical to one of the arguments, so use it here.

        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        (WebCore::AudioBasicInspectorNode::connect): Return ExceptionOr<void>.
        * Modules/webaudio/AudioBasicInspectorNode.h: Ditto.
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::connect): Ditto.
        * Modules/webaudio/AudioNode.h: Ditto.

        * Modules/webaudio/AudioNode.idl: Use [ReturnValue].

2018-10-03  Justin Michaud  <justin_michaud@apple.com>

        Registered custom properties should allow inheritance to be controlled
        https://bugs.webkit.org/show_bug.cgi?id=190038

        Reviewed by Antti Koivisto.

        Tests: css-custom-properties-api/inherits.html
               css-custom-properties-api/length.html
               css-custom-properties-api/length2.html

        Add support for inherits property on registered css custom properties, as well
        as a starting point for evaluating registered custom properties with types. Registered
        custom properties are evaluated as length values before being substituted. Currently,
        relative unit cycles are not detected.

        A proper solution is still needed to resolve relative unit cycles, and to apply properties like font
        and line-height before they are needed by custom properties. In this patch, the font-size property is
        applied twice, once before and once after resolving custom property values.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::customPropertyValue):
        (WebCore::CSSComputedStyleDeclaration::length const):
        (WebCore::CSSComputedStyleDeclaration::item const):

        Allow JS to get custom properties that have been resolved to a length. Also add properties from
        m_rareNonInheritedData.

        * css/CSSCustomPropertyValue.cpp:
        (WebCore::CSSCustomPropertyValue::checkVariablesForCycles const):
        (WebCore::CSSCustomPropertyValue::resolveVariableReferences const):
        * css/CSSCustomPropertyValue.h:
        * css/CSSRegisteredCustomProperty.cpp: Copied from Source/WebCore/css/CSSRegisteredCustomProperty.h.
        (WebCore::CSSRegisteredCustomProperty::CSSRegisteredCustomProperty):
        (WebCore::CSSRegisteredCustomProperty::initialValueCopy const):
        * css/CSSRegisteredCustomProperty.h:
        (WebCore::CSSRegisteredCustomProperty::initialValue const):
        * css/CSSVariableData.cpp:
        (WebCore::CSSVariableData::checkVariablesForCycles const):
        (WebCore::CSSVariableData::checkVariablesForCyclesWithRange const):
        (WebCore::CSSVariableData::resolveVariableFallback const):
        (WebCore::CSSVariableData::resolveVariableReference const):
        (WebCore::CSSVariableData::resolveVariableReferences const):
        (WebCore::CSSVariableData::resolveTokenRange const):
        * css/CSSVariableData.h:
        * css/CSSVariableReferenceValue.cpp:
        (WebCore::CSSVariableReferenceValue::checkVariablesForCycles const):
        * css/CSSVariableReferenceValue.h:
        * css/DOMCSSRegisterCustomProperty.cpp:
        (WebCore::DOMCSSRegisterCustomProperty::registerProperty):

        Use RenderStyle over passing in a customProperties map.

        * css/StyleBuilder.h:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertLength):
        (WebCore::StyleBuilderConverter::convertLengthOrAuto):
        (WebCore::StyleBuilderConverter::convertLengthSizing):
        (WebCore::StyleBuilderConverter::convertLengthMaxSizing):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialCustomProperty):
        (WebCore::StyleBuilderCustom::applyInheritCustomProperty):
        (WebCore::StyleBuilderCustom::applyValueCustomProperty):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::useSVGZoomRules const):
        (WebCore::StyleResolver::useSVGZoomRulesForLength const):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::resolvedVariableValue const):
        (WebCore::StyleResolver::applyCascadedProperties):
        (WebCore::StyleResolver::useSVGZoomRules): Deleted.
        (WebCore::StyleResolver::useSVGZoomRulesForLength): Deleted.
        (WebCore::StyleResolver::resolvedVariableValue): Deleted.
        * css/StyleResolver.h:
        * css/makeprop.pl:

        Move custom property initial values to StyleBuilerCustom. Hook them up to correctly deal with
        inheritance, unset and revert values.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseValueWithVariableReferences):
        * css/parser/CSSParser.h:
        * css/parser/CSSParserContext.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        * css/parser/CSSParserContext.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):

        Allow parsing custom property values as lengths.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::checkVariablesInCustomProperties):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::inheritedCustomProperties const):
        (WebCore::RenderStyle::nonInheritedCustomProperties const):
        (WebCore::RenderStyle::setInheritedCustomPropertyValue):
        (WebCore::RenderStyle::setNonInheritedCustomPropertyValue):
        (WebCore::RenderStyle::getCustomProperty const):
        (WebCore::RenderStyle::customProperties const): Deleted.
        (WebCore::RenderStyle::setCustomPropertyValue): Deleted.
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h:
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

        Add support for RenderStyle to deal with both inherited and non-inherited properties, and to find
        cycles between them.

2018-10-03  Ryosuke Niwa  <rniwa@webkit.org>

        Clear m_pendingTargets in MutationObserver::takeRecords
        https://bugs.webkit.org/show_bug.cgi?id=190240

        Reviewed by Geoffrey Garen.

        In r236781, we delayed the clearing of m_pendingTargets until the end of microtask to avoid a race between
        mutation record's JS wrappers getting created and GC marking JS wrappers of elements in mutation records.

        This patch shortens this delay to until mutation record's JS wrappers are created. Specifically, we make
        MutationObserver::takeRecords() return a struct which has both pending targets hash set and the vector of
        mutation records so that the hash set survives through the creation of JS wrappers for mutation records.

        To do this, a new IDL extended attribute "ResultField" is introduced to specify the member variable in
        which the result is stored.

        No new tests. Unfortunately, this race condition appears to be impossible to capture in a regression test.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateOperationBodyDefinition):
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfacePrototypeFunctionTakeNodesBody):
        (WebCore::jsTestInterfacePrototypeFunctionTakeNodes):
        * bindings/scripts/test/TestImplements.idl: Added a test case.
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::takeRecords):
        (WebCore::MutationObserver::deliver):
        * dom/MutationObserver.h:
        * dom/MutationObserver.idl:

2018-10-03  Youenn Fablet  <youenn@apple.com>

        Add VP8 support to WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=189976

        Reviewed by Eric Carlson.

        Add a runtime flag to control activation of VP8 codec.
        Bind this runtime flag to the video codec factories.
        Test: webrtc/video-mute-vp8.html

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::createLibWebRTCPeerConnectionBackend):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webRTCVP8CodecEnabled const):
        (WebCore::RuntimeEnabledFeatures::setWebRTCVP8CodecEnabled):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:
        (WebCore::LibWebRTCProviderCocoa::createDecoderFactory):
        (WebCore::LibWebRTCProviderCocoa::createEncoderFactory):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        Enable VP8 codec for tests.

2018-09-28  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] ECDSA could not deal with invalid signature inputs
        https://bugs.webkit.org/show_bug.cgi?id=189879
        <rdar://problem/44701276>

        Reviewed by Brent Fulgham.

        Add some guards over detections of the start positions of r/s.

        Covered by improved existing tests.

        * crypto/mac/CryptoAlgorithmECDSAMac.cpp:
        (WebCore::verifyECDSA):

2018-10-03  Jer Noble  <jer.noble@apple.com>

        Add a quirk to disable Modern EME for sites which are broken with it enabled
        https://bugs.webkit.org/show_bug.cgi?id=190051

        Reviewed by Daniel Bates.

        Add a new class, parallel to Settings, to track quirk behavior. Extend the bindings
        generator to support a DisabledByQuirk attribute, and set this attribute for all
        the Modern EME types. Check whether the quirk is set inside HTMLMediaElement in
        addition to the existing Setting.

        * Modules/encryptedmedia/MediaKeyMessageEvent.idl:
        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/encryptedmedia/MediaKeyStatusMap.idl:
        * Modules/encryptedmedia/MediaKeySystemAccess.idl:
        * Modules/encryptedmedia/MediaKeys.idl:
        * Modules/encryptedmedia/NavigatorEME.idl:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGenerator.pm:
        (WK_ucfirst):
        * bindings/scripts/CodeGeneratorJS.pm:
        (NeedsRuntimeCheck):
        (GenerateRuntimeEnableConditionalString):
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/preprocess-idls.pl:
        (GenerateConstructorAttributes):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::quirks const):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerKeyNeeded):
        (WebCore::HTMLMediaElement::mediaPlayerInitializationDataEncountered):
        * html/HTMLMediaElement.idl:
        * page/Quirks.cpp: Added.
        (Quirks::Quirks):
        (Quirks::disableEncryptedMediaAPIQuirk const):
        * page/Quirks.h: Added.

2018-10-03  Antoine Quint  <graouts@apple.com>

        [Web Animations] REGRESSION: setting 'animation-name: none' after a 'fill: forwards' animation has completed does not revert to the unanimated style
        https://bugs.webkit.org/show_bug.cgi?id=190257
        <rdar://problem/41341473>

        Reviewed by Dean Jackson.

        Test: animations/animation-fill-forwards-removal.html

        While we removed a declarative animation that was no longer targetting its element, we were not removing it from the declarative animation maps
        on the timeline, which means that the animation would still be picked up when resolving styles. We now notify the timeline that the animation
        was detached from the element. This preserves the DeclarativeAnimation relationship returning the element as its effect's target and the document
        timeline as its timeline, but the document timeline will no longer see this animation as targeting this element.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::cancelOrRemoveDeclarativeAnimation):
        * animation/DeclarativeAnimation.h:
        (WebCore::DeclarativeAnimation::target const):

2018-10-03  Jer Noble  <jer.noble@apple.com>

        CRASH in CVPixelBufferGetBytePointerCallback()
        https://bugs.webkit.org/show_bug.cgi?id=190092

        Reviewed by Eric Carlson.

        Speculative fix for crash that occurs when callers of CVPixelBufferGetBytePointerCallback() attempt
        to read the last byte of a CVPixelBuffer (as a pre-flight check) and crash due to a memory access
        error. It's speculated that mismatching CVPixelBufferLockBytePointer / CVPixelBufferUnlockBytePointer
        calls could result in an incorrect state inside the CVPixelBuffer. Add log count checks, locking, and
        release logging to try to pinpoint if mismatch lock counts are occurring in this code path.

        * platform/graphics/cv/PixelBufferConformerCV.cpp:
        (WebCore::CVPixelBufferGetBytePointerCallback):
        (WebCore::CVPixelBufferReleaseBytePointerCallback):
        (WebCore::CVPixelBufferReleaseInfoCallback):
        (WebCore::PixelBufferConformerCV::createImageFromPixelBuffer):

2018-10-03  Chris Dumez  <cdumez@apple.com>

        Regression(r236779): Crash when changing the input element type from inside an 'input' event listener
        https://bugs.webkit.org/show_bug.cgi?id=190252

        Reviewed by Alex Christensen.

        Add a null check for element() after firing the 'input' event and before firing the 'change' event
        in case the input event listener changes the input type.

        Tests: fast/dom/HTMLInputElement/change-type-in-click-event-listener.html
               fast/dom/HTMLInputElement/change-type-in-input-event-listener.html

        * html/BaseCheckableInputType.cpp:
        (WebCore::BaseCheckableInputType::fireInputAndChangeEvents):

2018-10-03  Chris Dumez  <cdumez@apple.com>

        Passing noopener=NOOPENER to window.open() should cause the new window to not have an opener
        https://bugs.webkit.org/show_bug.cgi?id=190251

        Reviewed by Alex Christensen.

        Passing noopener=NOOPENER to window.open() should cause the new window to not have an opener,
        similarly to noopener=1:
        - https://html.spec.whatwg.org/#window-open-steps (step 5)

        It does not matter what the value is, if there is a key named "noopener", then the new window
        should not have an opener.

        No new tests, rebaselined existing test.

        * page/WindowFeatures.cpp:
        (WebCore::setWindowFeature):

2018-10-03  Ryosuke Niwa  <rniwa@webkit.org>

        GC can collect JS wrappers of nodes in the mutation records waiting to be delivered
        https://bugs.webkit.org/show_bug.cgi?id=190115

        Reviewed by Geoffrey Garen.

        Fixed the bug by retaining JS wrappers of elements in mutation records using GCReachableRef.

        This patch deploys GCReachableRef in two places: MutationObserver where each mutation record's
        target is kept alive and MutationObserverRegistration where each node which had been removed
        from an observed tree is kept alive for a subtree observation.

        No new test since the test which can reproduce this problem is too slow.

        * dom/GCReachableRef.h:
        (WebCore::GCReachableRef): Made it work with hash table.
        (WebCore::GCReachableRef::operator T& const):
        (WebCore::GCReachableRef::GCReachableRef):
        (WebCore::GCReachableRef::isHashTableDeletedValue const):
        (WebCore::GCReachableRef::isHashTableEmptyValue const):
        (WebCore::GCReachableRef::ptrAllowingHashTableEmptyValue const):
        (WebCore::GCReachableRef::ptrAllowingHashTableEmptyValue):
        (WebCore::GCReachableRef::assignToHashTableEmptyValue):
        (WTF::HashTraits<WebCore::GCReachableRef<P>>::emptyValue):
        (WTF::HashTraits<WebCore::GCReachableRef<P>>::constructEmptyValue):
        (WTF::HashTraits<WebCore::GCReachableRef<P>>::isEmptyValue):
        (WTF::HashTraits<WebCore::GCReachableRef<P>>::assignToEmpty):
        (WTF::HashTraits<WebCore::GCReachableRef<P>>::peek):
        (WTF::HashTraits<WebCore::GCReachableRef<P>>::take):
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::takeRecords): Don't clear m_pendingTargets because that would allow wrappers
        to be collected before elements in mutation records are accessed. We delay until the end of the current
        microtask at which point deliver() function is called.
        (WebCore::MutationObserver::disconnect):
        (WebCore::MutationObserver::enqueueMutationRecord): Add the target to the list of elements to keep alive.
        This is needed for a newly inserted node, a node with attribute change, etc...
        (WebCore::MutationObserver::deliver): Keep the set of transient registration targets alive until mutation
        records are delivered to each observer. These are nodes which had been removed from a tree and whose
        subtree had still been obsreved up until this point.
        * dom/MutationObserver.h:
        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::observedSubtreeNodeWillDetach):
        (WebCore::MutationObserverRegistration::takeTransientRegistrations): Return the hash set of elemenets
        that need to be kept alive so that MutationObserver::deliver can keep them alive until the deliver
        function had been called.
        (WebCore::MutationObserverRegistration::addRegistrationNodesToSet const):
        * dom/MutationObserverRegistration.h:

2018-10-03  Dean Jackson  <dino@apple.com>

        Make the Pointer Events feature description valid
        https://bugs.webkit.org/show_bug.cgi?id=190254

        Reviewed by Simon Fraser.

        * features.json:

2018-10-03  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r236781.

        The test added with this commit is timing out consistently.

        Reverted changeset:

        "GC can collect JS wrappers of nodes in the mutation records
        waiting to be delivered"
        https://bugs.webkit.org/show_bug.cgi?id=190115
        https://trac.webkit.org/changeset/236781

2018-10-03  Dean Jackson  <dino@apple.com>

        [macOS] Switching to discrete GPU should be done in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=189361
        <rdar://problem/43949622>

        Try to fix the IOSMAC build.

        * platform/graphics/GraphicsContext3D.h:

2018-10-03  Chris Dumez  <cdumez@apple.com>

        input.checked is incorrect while we're parsing its children
        https://bugs.webkit.org/show_bug.cgi?id=190227

        Reviewed by Ryosuke Niwa.

        input.checked was incorrect while we're parsing its children because we were delaying updating the
        checked state until HTMLInputElement::finishParsingChildren() is called, to avoid a bad interaction
        with form state restoration.

        In this patch, we update the checked state as soon as the 'checked' attribute is set, when we know
        that no form state to restore.

        fast/forms/radio/state-restore-radio-group.html covers the form restoration case and is still
        passing.

        No new tests, rebaselined existing test.

        * html/FormController.cpp:
        (WebCore::FormController::hasFormStateToRestore const):
        * html/FormController.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute):

2018-10-03  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Incorrect rendering of layers whose backingStore hasn't changed
        https://bugs.webkit.org/show_bug.cgi?id=190249

        Reviewed by Žan Doberšek.

        Do not overwrite m_nicosia.performLayerSync when updating the content buffers or we lose
        the value calculated during the layer flush. Use an OR instead to keep the old value.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):

2018-10-03  Youenn Fablet  <youenn@apple.com>

        Enable H264 simulcast
        https://bugs.webkit.org/show_bug.cgi?id=190167

        Reviewed by Eric Carlson.

        Activate H264 simulcast trial field.
        Make track.getSettings() expose width and height for incoming tracks.

        Test: webrtc/simulcast-h264.html

        * Configurations/WebCore.xcconfig:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::LibWebRTCMediaEndpoint):
        * platform/mediastream/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource):

2018-10-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        -Wunused-variable in RenderLayer::updateScrollableAreaSet
        https://bugs.webkit.org/show_bug.cgi?id=190200

        Reviewed by Yusuke Suzuki.

        Pass it through UNUSED_VARIABLE().

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):

2018-10-03  Zan Dobersek  <zdobersek@igalia.com>

        Ref<FetchResponse> use-after-move in DOMCache::put()
        https://bugs.webkit.org/show_bug.cgi?id=190239

        Reviewed by Youenn Fablet.

        Retrieve reference from the Ref<FetchResponse> object before it's
        move-captured in the lambda that's passed to the
        FetchResponse::consumeBodyReceivedByChunk() method that is invoked on
        that very same object. This is a classic use-after-move bug that pops
        up on compilers with different C++ calling convention.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::put):

2018-10-03  Ryosuke Niwa  <rniwa@webkit.org>

        Enable selectionAcrossShadowBoundariesEnabled by default in WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=190238

        Reviewed by Antti Koivisto.

        Enable the feature by default.

        * page/Settings.yaml:

2018-10-02  Ryosuke Niwa  <rniwa@webkit.org>

        Copying content with shadow DOM doesn't copy any contents
        https://bugs.webkit.org/show_bug.cgi?id=157443

        Reviewed by Wenson Hsieh.

        This patch adds the support for copying and pasting content across shadow boundaries in HTML and plain text,
        which is enabled whenever selection across shadow boundaries is enabled.

        To do this, TextIterator now has a constructor which takes two Positions, and the node traversal code in
        StyledMarkupAccumulator has been abstracted via helper functions as done for TextIterator.

        When serializing a HTMl slot element, serialize it as a span with "display: contents" to make sure when
        the content is pasted into a shadow tree, it wouldn't affect the slot assignment of the shadow tree.

        Tests: editing/pasteboard/copy-paste-across-shadow-boundaries-1.html
               editing/pasteboard/copy-paste-across-shadow-boundaries-2.html
               editing/pasteboard/copy-paste-across-shadow-boundaries-3.html
               editing/pasteboard/copy-paste-across-shadow-boundaries-4.html
               editing/pasteboard/copy-paste-across-shadow-boundaries-with-style-1.html
               editing/pasteboard/copy-paste-across-shadow-boundaries-with-style-2.html
               editing/pasteboard/copy-paste-with-shadow-content.html

        * dom/ComposedTreeIterator.h:
        (WebCore::assignedSlotIgnoringUserAgentShadow): Moved from TextIterator.cpp.
        (WebCore::shadowRootIgnoringUserAgentShadow): Ditto.
        (WebCore::firstChildInComposedTreeIgnoringUserAgentShadow): Ditto.
        (WebCore::nextSiblingInComposedTreeIgnoringUserAgentShadow): Ditto.
        * dom/Position.h:
        (WebCore::Position::treeScope const): Added.
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::addDisplayContents): Added.
        * editing/EditingStyle.h:
        * editing/Editor.cpp:
        (WebCore::Editor::selectedText const): Use the new behavior when selectionAcrossShadowBoundariesEnabled is set.
        (WebCore::Editor::selectedTextForDataTransfer const): Ditto.
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendEndElement): Renamed from appendEndTag. Now takes StringBuilder.
        * editing/MarkupAccumulator.h:
        (WebCore::MarkupAccumulator::appendEndTag):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator): Added a new variant which takes two positions.
        (WebCore::TextIterator::init):
        (WebCore::firstChild):
        (WebCore::nextSibling):
        (WebCore::plainText): Ditto.
        * editing/TextIterator.h:
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::selectionInHTMLFormat): Use the new behavior if selectionAcrossShadowBoundariesEnabled is set.
        * editing/gtk/EditorGtk.cpp:
        (WebCore::Editor::writeSelectionToPasteboard): Ditto.
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::parentNode): Added.
        (WebCore::StyledMarkupAccumulator::firstChild): Added.
        (WebCore::StyledMarkupAccumulator::nextSibling): Added.
        (WebCore::StyledMarkupAccumulator::nextSkippingChildren): Added.
        (WebCore::StyledMarkupAccumulator::hasChildNodes): Added.
        (WebCore::StyledMarkupAccumulator::isDescendantOf): Added.
        (WebCore::StyledMarkupAccumulator::StyledMarkupAccumulator):
        (WebCore::StyledMarkupAccumulator::appendElement): Serialize a slot element as a span with display: contents.
        (WebCore::StyledMarkupAccumulator::appendEndElement): Added. Ditto.
        (WebCore::StyledMarkupAccumulator::serializeNodes):
        (WebCore::StyledMarkupAccumulator::traverseNodesForSerialization): Use the newly added helper functions to
        traverse the composed tree when m_useComposedTree is set.
        (WebCore::commonShadowIncludingAncestor): Added.
        (WebCore::serializePreservingVisualAppearanceInternal): Added SerializeComposedTree as an argument. Also use
        StyledMarkupAccumulator::parentNode to serialize special common ancestors; e.g. to preserve b, i, etc...
        (WebCore::serializePreservingVisualAppearance): Ditto to the variant which takes VisibleSelection.
        (WebCore::sanitizedMarkupForFragmentInDocument):
        * editing/markup.h:
        * editing/wpe/EditorWPE.cpp:
        (WebCore::Editor::writeSelectionToPasteboard):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createFromSelection):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::SerializerMarkupAccumulator::appendEndElement):
        * testing/Internals.cpp:
        (WebCore::Internals::setSelectionWithoutValidation): Added. A helper function to create a selection across
        shadow boundaries for testing purposes.
        * testing/Internals.h:
        * testing/Internals.idl:

2018-10-02  Chris Dumez  <cdumez@apple.com>

        MessageEvent.ports should return the same object
        https://bugs.webkit.org/show_bug.cgi?id=190151

        Reviewed by Darin Adler.

        MessageEvent.ports should return the same object it was initialized to instead of
        constructing a new JSValue every time.

        No new tests, rebaselined existing test.

        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::ports const):
        (WebCore::JSMessageEvent::visitAdditionalChildren):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::initMessageEvent):
        * dom/MessageEvent.h:
        * dom/MessageEvent.idl:

2018-10-01  Ryosuke Niwa  <rniwa@webkit.org>

        GC can collect JS wrappers of nodes in the mutation records waiting to be delivered
        https://bugs.webkit.org/show_bug.cgi?id=190115

        Reviewed by Geoffrey Garen.

        Fixed the bug by retaining JS wrappers of elements in mutation records using GCReachableRef.

        This patch deploys GCReachableRef in two places: MutationObserver where each mutation record's
        target is kept alive and MutationObserverRegistration where each node which had been removed
        from an observed tree is kept alive for a subtree observation.

        Test: fast/dom/MutationObserver/mutation-observer-retains-js-wrappers-of-targets-alive.html

        * dom/GCReachableRef.h:
        (WebCore::GCReachableRef): Made it work with hash table.
        (WebCore::GCReachableRef::operator T& const):
        (WebCore::GCReachableRef::GCReachableRef):
        (WebCore::GCReachableRef::isHashTableDeletedValue const):
        (WebCore::GCReachableRef::isHashTableEmptyValue const):
        (WebCore::GCReachableRef::ptrAllowingHashTableEmptyValue const):
        (WebCore::GCReachableRef::ptrAllowingHashTableEmptyValue):
        (WebCore::GCReachableRef::assignToHashTableEmptyValue):
        (WTF::HashTraits<WebCore::GCReachableRef<P>>::emptyValue):
        (WTF::HashTraits<WebCore::GCReachableRef<P>>::constructEmptyValue):
        (WTF::HashTraits<WebCore::GCReachableRef<P>>::isEmptyValue):
        (WTF::HashTraits<WebCore::GCReachableRef<P>>::assignToEmpty):
        (WTF::HashTraits<WebCore::GCReachableRef<P>>::peek):
        (WTF::HashTraits<WebCore::GCReachableRef<P>>::take):
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::takeRecords): Don't clear m_pendingTargets because that would allow wrappers
        to be collected before elements in mutation records are accessed. We delay until the end of the current
        microtask at which point deliver() function is called.
        (WebCore::MutationObserver::disconnect):
        (WebCore::MutationObserver::enqueueMutationRecord): Add the target to the list of elements to keep alive.
        This is needed for a newly inserted node, a node with attribute change, etc...
        (WebCore::MutationObserver::deliver): Keep the set of transient registration targets alive until mutation
        records are delivered to each observer. These are nodes which had been removed from a tree and whose
        subtree had still been obsreved up until this point.
        * dom/MutationObserver.h:
        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::observedSubtreeNodeWillDetach):
        (WebCore::MutationObserverRegistration::takeTransientRegistrations): Return the hash set of elemenets
        that need to be kept alive so that MutationObserver::deliver can keep them alive until the deliver
        function had been called.
        (WebCore::MutationObserverRegistration::addRegistrationNodesToSet const):
        * dom/MutationObserverRegistration.h:

2018-10-02  Chris Dumez  <cdumez@apple.com>

        radio / checkbox inputs should fire "click, input, change" events in order when clicked
        https://bugs.webkit.org/show_bug.cgi?id=190223

        Reviewed by Ryosuke Niwa.

        radio / checkbox inputs should fire "click, input, change" events in order when clicked:
        - https://html.spec.whatwg.org/#radio-button-state-(type=radio)
        - https://html.spec.whatwg.org/#checkbox-state-(type=checkbox)
        - https://dom.spec.whatwg.org/#ref-for-eventtarget-activation-behavior③ (step 11)

        Gecko and Blink already behave this way. However, WebKit has the following issues:
        - the input event is not fired
        - the click event is fired after the change event

        No new tests, updated / rebaselined existing tests.

        * html/BaseCheckableInputType.cpp:
        (WebCore::BaseCheckableInputType::fireInputAndChangeEvents):
        * html/BaseCheckableInputType.h:
        * html/CheckboxInputType.cpp:
        (WebCore::CheckboxInputType::willDispatchClick):
        (WebCore::CheckboxInputType::didDispatchClick):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):
        * html/HTMLInputElement.h:
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::willDispatchClick):
        (WebCore::RadioInputType::didDispatchClick):

2018-10-02  Chris Dumez  <cdumez@apple.com>

        fieldset.elements should return an HTMLCollection instead of an HTMLFormControlsCollection
        https://bugs.webkit.org/show_bug.cgi?id=190218

        Reviewed by Alex Christensen.

        fieldset.elements should return an HTMLCollection instead of an HTMLFormControlsCollection:
        - https://github.com/whatwg/html/commit/8beedf0c2ffd38853caddec67490288f47afc8eb

        Gecko has always behaved this way. Blink aligned with Gecko and the HTML specification in December 2016:
        - https://bugs.chromium.org/p/chromium/issues/detail?id=665291

        This simplifies our HTMLFieldSetElement code a lot.

        Test: fast/forms/fieldset/fieldset-elements-htmlcollection.html

        * html/CollectionType.h:
        * html/GenericCachedHTMLCollection.cpp:
        (WebCore::GenericCachedHTMLCollection<traversalType>::elementMatches const):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::rootTypeFromCollectionType):
        (WebCore::invalidationTypeExcludingIdAndNameAttributes):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::elements):
        * html/HTMLFieldSetElement.h:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::HTMLFormControlsCollection):
        (WebCore:: const):
        (WebCore::HTMLFormControlsCollection::copyFormControlElementsVector const):
        (WebCore::HTMLFormControlsCollection::ownerNode const):
        (WebCore::HTMLFormControlsCollection::updateNamedElementCache const):
        * html/HTMLFormControlsCollection.h:

2018-10-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: prevent layer events from firing until the layer information is re-requested
        https://bugs.webkit.org/show_bug.cgi?id=190159

        Reviewed by Joseph Pecoraro.

        Test: inspector/layers/layerTreeDidChange.html

        * inspector/agents/InspectorLayerTreeAgent.h:
        * inspector/agents/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::reset):
        (WebCore::InspectorLayerTreeAgent::layerTreeDidChange):
        (WebCore::InspectorLayerTreeAgent::layersForNode):

2018-10-02  Brian Burg  <bburg@apple.com>

        Web Automation: tab default key handler should always cycle focus when page is controlled by automation
        https://bugs.webkit.org/show_bug.cgi?id=190221
        <rdar://problem/44914534>

        Reviewed by Joseph Pecoraro.

        This change progresses WPT WebDriver test special_keys.py::test_webdriver_special_key_sends_keydown[TAB-expected24].

        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusInDocumentOrder):
        Always cycle focus if the page is controlled by automation. If the chrome takes
        focus, then the first responder will be something other than the WebView, which
        causes subsequent WebDriver commands to hang.

2018-10-01  Dean Jackson  <dino@apple.com>

        [macOS] Switching to discrete GPU should be done in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=189361
        <rdar://problem/43949622>

        Reviewed by Simon Fraser.

        Based on an earlier patch by Per Arne Vollan.

        Due to the fact we can't talk to the Window Server, the Web Process can
        no longer muxing to the discrete GPU directly. Instead we have to get the
        UI Process to process the change. Do this by adding a new Chrome client
        called GPUClient, that will have implementations provided by both WebKit
        and legacy WebKit.

        Unfortunately this can't be tested by a regular WKTR since:
        - it requires specific hardware
        - swapping to/from the discrete GPU takes about 20 seconds
        - running concurrent tests could confuse the tests into thinking
          the wrong GPU is active

        Instead we'll write a specific test for this functionality and
        run it on a separate bot.

        * WebCore.xcodeproj/project.pbxproj: Add GPUClient files.

        * page/Chrome.cpp: Drive by clean-up.
        (WebCore::Chrome::windowScreenDidChange):

        * platform/graphics/GraphicsContext3D.h: We need to keep track of
        whether we've muxed for this context, in order to not respond to
        the screen change notifications (they are misleading in the case
        of muxing).

        * platform/graphics/GraphicsContext3DManager.cpp: Rather than try
        to mux directly, call into GPUClient.
        (WebCore::GraphicsContext3DManager::displayWasReconfigured):
        (WebCore::GraphicsContext3DManager::updateHighPerformanceState):
        (WebCore::GraphicsContext3DManager::disableHighPerformanceGPUTimerFired):
        (WebCore::GraphicsContext3DManager::recycleContextIfNecessary):
        * platform/graphics/GraphicsContext3DManager.h:

        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm: Only reconfigure
        the virtual display if it didn't happen from muxing.
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::updateCGLContext):
        (WebCore::GraphicsContext3D::screenDidChange):

        * platform/graphics/mac/SwitchingGPUClient.cpp: Added.
        (WebCore::SwitchingGPUClient::singleton):
        (WebCore::SwitchingGPUClient::setSingleton):
        * platform/graphics/mac/SwitchingGPUClient.h: Added.

        * testing/Internals.cpp: Testing helper.
        (WebCore::Internals::hasMuxableGPU):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-10-02  Chris Dumez  <cdumez@apple.com>

        Image.__proto__ should be Function.prototype, not HTMLElement.prototype
        https://bugs.webkit.org/show_bug.cgi?id=190216

        Reviewed by Alex Christensen.

        Properties created for named constructors should always use Function.prototype as prototype, as per:
        - https://heycam.github.io/webidl/#named-constructors

        Gecko and Blink agree with the Web IDL specification. However, WebKit was using the parent interface's
        prototype if such a parent existing. So Image.__proto__ would end up being HTMLElement.prototype
        instead of Function.prototype.

        No new tests, rebaselined existing test.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorHelperMethods):

2018-10-02  Alex Christensen  <achristensen@webkit.org>

        Prepare WebCoreNSURLExtras for ARC
        https://bugs.webkit.org/show_bug.cgi?id=190219

        Reviewed by Tim Horton.

        ARC doesn't like the explicit sending of -release.
        Use RetainPtr instead.

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::collectRangesThatNeedMapping):
        (WebCore::collectRangesThatNeedEncoding):
        (WebCore::collectRangesThatNeedDecoding):
        (WebCore::applyHostNameFunctionToMailToURLString):
        (WebCore::applyHostNameFunctionToURLString):
        (WebCore::mapHostNames):
        (WebCore::stringByTrimmingWhitespace):
        (WebCore::URLWithUserTypedString):
        (WebCore::userVisibleString):
        (WebCore::rangeOfURLScheme):
        (WebCore::looksLikeAbsoluteURL):
        (WebCore::retain): Deleted.

2018-10-02  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Fix missing values of  resource timing API.
        https://bugs.webkit.org/show_bug.cgi?id=190193

        Reviewed by Alex Christensen.

        The property nextHopProtocol was not returned correctly. It was
        returned only when remote inspector is opened.

        Tests: http/wpt/resource-timing/rt-nextHopProtocol.html
               http/wpt/resource-timing/rt-nextHopProtocol.worker.html

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::getNetworkLoadMetrics):
        (WebCore::CurlHandle::addExtraNetworkLoadMetrics):

2018-10-02  Alex Christensen  <achristensen@webkit.org>

        Remove unused linked-on-or-before-iOS5 check
        https://bugs.webkit.org/show_bug.cgi?id=190164

        Reviewed by Michael Saboff.

        If an app hasn't been updated since iOS5, it can't run supported iOS.
        This value is also only checked in an uninstantiated template function.

        * platform/URL.cpp:
        (WebCore::enableURLSchemeCanonicalization): Deleted.
        (WebCore::equal): Deleted.
        * platform/URL.h:

2018-10-02  Alex Christensen  <achristensen@webkit.org>

        Remove ParsedURLString
        https://bugs.webkit.org/show_bug.cgi?id=190154

        Reviewed by Chris Dumez.

        Before the introduction of URLParser, it would indicate that we should assume the String
        is from a valid URL so we can skip canonicalization and just find the offsets inside the String
        to quickly create a URL.  It was a performance optimization that caused security issues when
        misused.  Since the introduction of URLParser, we have a fast path for all URL parsing, so
        right now it actually doesn't change any behavior.  It's just a relic of the past that complicates
        the URL class, making it harder to express which constructor to use and making it harder to move
        the class.

        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp:
        (WebCore::NavigatorContentUtils::registerProtocolHandler):
        (WebCore::NavigatorContentUtils::isProtocolHandlerRegistered):
        (WebCore::NavigatorContentUtils::unregisterProtocolHandler):
        * dom/Document.cpp:
        (WebCore::Document::updateBaseURL):
        (WebCore::Document::initSecurityContext):
        * dom/ExtensionStyleSheets.cpp:
        (WebCore::ExtensionStyleSheets::updateInjectedStyleSheetCache const):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * editing/markup.cpp:
        (WebCore::completeURLs):
        * fileapi/BlobURL.cpp:
        (WebCore::BlobURL::createBlobURL):
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::url const):
        (WebCore::HistoryItem::originalURL const):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::location const):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript):
        * html/PublicURLManager.cpp:
        (WebCore::PublicURLManager::stop):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::resourceStyleSheetText const):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::deleteCookie):
        (WebCore::InspectorPageAgent::getResourceContent):
        (WebCore::InspectorPageAgent::searchInResource):
        * inspector/agents/page/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::sourceMapURLForScript):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::subresources const):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::initForSynthesizedDocument):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::pushState):
        (WebCore::HistoryController::replaceState):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::addResource):
        (WebCore::ApplicationCache::resourceForURL):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::startLoadingEntry):
        (WebCore::ApplicationCacheGroup::addEntry):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL):
        (WebCore::ApplicationCacheStorage::loadCache):
        (WebCore::ApplicationCacheStorage::manifestURLs):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::urlForBlankFrame):
        * platform/URL.cpp:
        (WebCore::blankURL):
        * platform/URL.h:
        (): Deleted.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::load):
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::populateBlobsForFileWriting):
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::decodeBase):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::sanitizeSuggestedFilename):
        * platform/network/cf/DNSResolveQueueCFNet.cpp:
        (WebCore::DNSResolveQueueCFNet::updateIsUsingProxy):
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::searchCookies):
        (WebCore::CookieJarDB::setCookie):
        (WebCore::CookieJarDB::deleteCookie):
        * platform/network/curl/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/soup/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::docLoaderFunc):

2018-10-02  Per Arne Vollan  <pvollan@apple.com>

        [WebVTT] Cue with line setting is not rendered correctly
        https://bugs.webkit.org/show_bug.cgi?id=190168

        Reviewed by Eric Carlson.

        When the line setting contains an optional alignment value, the cue is not rendered at the correct position,
        see https://w3c.github.io/webvtt/#webvtt-line-cue-setting. This patch does not implement correct handling of
        the line setting alignment values, it only makes sure parsing does not fail when the cue has line alignment
        settings.

        Test: media/track/track-cue-line-position.html

        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):
        (WebCore::VTTCue::getPositionCoordinates const):
        (WebCore::VTTCue::setCueSettings):

2018-10-02  Antti Koivisto  <antti@apple.com>

        User installed fonts are not always disabled when they should be
        https://bugs.webkit.org/show_bug.cgi?id=190195

        Reviewed by Geoffrey Garen.

        SVG images and some theme cases fail to respect the setting. Besides the obvious problem this
        is also a performance issue as various font caches include this setting in the key.

        * platform/graphics/FontDescription.cpp:
        (WebCore::m_shouldAllowUserInstalledFonts):

        Initialize to 'No' by default. All paths where user fonts make sense already set the bit from
        settings. This fixes some cases in system themes that construct FontDescriptions from scratch.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):

        Add assertion. This verified the change with the existing tests.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

        Always disallow user fonts in SVG used as images.

2018-10-01  Dean Jackson  <dino@apple.com>

        Remove CSS Animation Triggers
        https://bugs.webkit.org/show_bug.cgi?id=190175
        <rdar://problem/44925626>

        Reviewed by Simon Fraser.

        Remove the never-properly specified CSS Animation Triggers.

        * Configurations/FeatureDefines.xcconfig:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAnimationTriggerScrollValue.cpp: Removed.
        * css/CSSAnimationTriggerScrollValue.h: Removed.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        (WebCore::createAnimationTriggerValue): Deleted.
        (WebCore::animationTriggerValue): Deleted.
        * css/CSSProperties.json:
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapAnimationTrigger): Deleted.
        * css/CSSToStyleMap.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals const):
        (WebCore::CSSValue::cssText const):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isAnimationTriggerScrollValue const): Deleted.
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeAnimationValue):
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::consumeWebkitAnimationTrigger): Deleted.
        * page/FrameView.cpp:
        (WebCore::FrameView::sendScrollEvent):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setAnimationTriggersEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::animationTriggersEnabled const): Deleted.
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded):
        (WebCore::AnimationBase::timeToNextService):
        (WebCore::AnimationBase::getElapsedTime const):
        * page/animation/CSSAnimationController.cpp:
        (WebCore::CSSAnimationControllerPrivate::animationWillBeRemoved):
        (WebCore::CSSAnimationControllerPrivate::addToAnimationsDependentOnScroll): Deleted.
        (WebCore::CSSAnimationControllerPrivate::removeFromAnimationsDependentOnScroll): Deleted.
        (WebCore::CSSAnimationControllerPrivate::scrollWasUpdated): Deleted.
        (WebCore::CSSAnimationController::wantsScrollUpdates const): Deleted.
        (WebCore::CSSAnimationController::scrollWasUpdated): Deleted.
        * page/animation/CSSAnimationController.h:
        * page/animation/CSSAnimationControllerPrivate.h:
        (WebCore::CSSAnimationControllerPrivate::wantsScrollUpdates const): Deleted.
        (WebCore::CSSAnimationControllerPrivate::scrollPosition const): Deleted.
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        * page/animation/CompositeAnimation.h:
        (WebCore::CompositeAnimation::hasScrollTriggeredAnimation const): Deleted.
        * platform/animation/Animation.cpp:
        (WebCore::Animation::Animation):
        (WebCore::Animation::operator=):
        (WebCore::Animation::animationsMatch const):
        * platform/animation/Animation.h:
        (WebCore::Animation::isTimingFunctionSet const):
        (WebCore::Animation::isEmpty const):
        (WebCore::Animation::clearTimingFunction):
        (WebCore::Animation::clearAll):
        (WebCore::Animation::animationMode const):
        (WebCore::Animation::setAnimationMode):
        (WebCore::Animation::initialTimingFunction):
        (WebCore::Animation::isTriggerSet const): Deleted.
        (WebCore::Animation::clearTrigger): Deleted.
        (WebCore::Animation::trigger const): Deleted.
        (WebCore::Animation::setTrigger): Deleted.
        (WebCore::Animation::initialTrigger): Deleted.
        * platform/animation/AnimationTrigger.h: Removed.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::animationCanBeAccelerated const):
2018-10-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r236624 and r236671.
        https://bugs.webkit.org/show_bug.cgi?id=190207

        The change in r236624 introduced crashes on the bots
        (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "Refactoring: eliminate raw pointer usage in Fullscreen code"
        https://bugs.webkit.org/show_bug.cgi?id=188747
        https://trac.webkit.org/changeset/236624

        "Unify implementation in VideoFullscreenInterfaceAVKit"
        https://bugs.webkit.org/show_bug.cgi?id=190091
        https://trac.webkit.org/changeset/236671

2018-10-02  Sihui Liu  <sihui_liu@apple.com>

        Add release assertion to ensure m_owningPointerForClose is null in UniqueIDBDatabase::invokeOperationAndTransactionTimer()
        https://bugs.webkit.org/show_bug.cgi?id=190178

        Reviewed by Chris Dumez.

        This would help debug rdar://problem/44902833.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::invokeOperationAndTransactionTimer):

2018-10-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r236719.
        https://bugs.webkit.org/show_bug.cgi?id=190197

        this revision caused 39 layout test failures that tested for
        scrolling, a bug was also not present in the commit or change
        log. (Requested by Truitt on #webkit).

        Reverted changeset:

        "Unreviewed, fix unused variable in
        RenderLayer::updateScrollableAreaSet"
        https://trac.webkit.org/changeset/236719

2018-10-02  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Add h264parse to accept MP4 without stss
        https://bugs.webkit.org/show_bug.cgi?id=190143

        Reviewed by Xabier Rodriguez-Calvar.

        The MP4 file used in this URL does not contain a stss (Sync Sample
        Box). In consequence, in acordance with the ISO BMFF spec, all samples
        are assumed to be sync frames... But in this case that is not true,
        it's just that the file is wrong (e.g. created with a buggy muxer).

        http://orange-opensource.github.io/hasplayer.js/1.2.0/player.html?url=http://playready.directtaps.net/smoothstreaming/SSWSS720H264/SuperSpeedway_720.ism/Manifest

        The way it works in other browsers is because instead of trusting the
        MP4 stss table, they rely on parsing the h264 frames. We can do that
        too.

        This patch also changes RELEASE_ASSERT() when creating the parsers
        to GLib criticals.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::createOptionalParserForFormat):

2018-10-02  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] RealtimeMediaSource should be able to vend hashed IDs
        https://bugs.webkit.org/show_bug.cgi?id=190142
        <rdar://problem/44911109>

        Reviewed by Youenn Fablet.

        No new tests, covered by existing tests.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::Source): Update order of parameters passed
        to base class.

        * Modules/mediastream/MediaDevicesRequest.cpp:
        (WebCore::MediaDevicesRequest::start): ASSERT if document.deviceIDHashSalt is not the same
        as passed salt.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::getSettings const): Don't need to hash ID.
        (WebCore::MediaStreamTrack::getCapabilities const): Ditto.
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/MediaStreamTrack.idl:

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::allow): Pass hash salt to createMediaStream.

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::createReceiverForSource): Update order of parameters passed
        to base class.

        * Modules/webaudio/MediaStreamAudioSource.cpp:
        (WebCore::MediaStreamAudioSource::MediaStreamAudioSource): Ditto.
        * platform/mediastream/MediaConstraints.h:

        * platform/mediastream/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::RealtimeIncomingAudioSource): Ditto.

        * platform/mediastream/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource): Ditto.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::RealtimeMediaSource): Calculate hashed ID.
        (WebCore::RealtimeMediaSource::selectSettings): Use m_hashedID.
        (WebCore::RealtimeMediaSource::hashedId const): New.
        (WebCore::RealtimeMediaSource::deviceIDHashSalt const): New.
        * platform/mediastream/RealtimeMediaSource.h:

        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::createMediaStream): Take hash salt, pass it when creating
        a source.
        (WebCore::RealtimeMediaSourceCenter::getUserMediaDevices): Ditto.
        (WebCore::RealtimeMediaSourceCenter::validateRequestConstraints): Ditto.
        * platform/mediastream/RealtimeMediaSourceCenter.h:

        * platform/mediastream/RealtimeMediaSourceFactory.h:
        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::RealtimeVideoSource): Update parameters.
        * platform/mediastream/RealtimeVideoSource.h:

        * platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp:
        (WebCore::GStreamerAudioCaptureSource::create): Ditto.
        (WebCore::GStreamerAudioCaptureSource::GStreamerAudioCaptureSource): Ditto.
        * platform/mediastream/gstreamer/GStreamerAudioCaptureSource.h:

        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        (WebCore::GStreamerVideoCaptureSource::create): Ditto.
        (WebCore::GStreamerVideoCaptureSource::GStreamerVideoCaptureSource): Ditto.
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h:

        * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.cpp:
        (WebCore::WrappedMockRealtimeAudioSource::WrappedMockRealtimeAudioSource): Ditto.
        (WebCore::MockRealtimeAudioSource::create): Ditto.
        (WebCore::MockGStreamerAudioCaptureSource::MockGStreamerAudioCaptureSource): Ditto.
        * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.h:

        * platform/mediastream/gstreamer/MockGStreamerVideoCaptureSource.cpp:
        (WebCore::MockRealtimeVideoSource::create): Ditto.
        (WebCore::MockGStreamerVideoCaptureSource::MockGStreamerVideoCaptureSource): Ditto.
        * platform/mediastream/gstreamer/MockGStreamerVideoCaptureSource.h:

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::create): Ditto.
        (WebCore::AVVideoCaptureSource::AVVideoCaptureSource): Ditto.
        (WebCore::AVVideoCaptureSource::settings): Use hashedId to set device ID.
        (WebCore::AVVideoCaptureSource::capabilities): Ditto.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::create): Update parameters.
        (WebCore::CoreAudioCaptureSource::CoreAudioCaptureSource): Ditto.
        (WebCore::CoreAudioCaptureSource::capabilities): Use hashedId to set device ID.
        (WebCore::CoreAudioCaptureSource::settings): Ditto.
        * platform/mediastream/mac/CoreAudioCaptureSource.h:

        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        (WebCore::DisplayCaptureSourceCocoa::DisplayCaptureSourceCocoa): Update parameters.
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.h:

        * platform/mediastream/mac/MockRealtimeAudioSourceMac.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSource::create): Ditto.
        (WebCore::MockRealtimeAudioSourceMac::MockRealtimeAudioSourceMac): Ditto.

        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSource::create): Ditto.
        (WebCore::MockRealtimeVideoSourceMac::MockRealtimeVideoSourceMac): Ditto.

        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:

        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
        (WebCore::ScreenDisplayCaptureSourceMac::create): Ditto.
        (WebCore::ScreenDisplayCaptureSourceMac::ScreenDisplayCaptureSourceMac): Ditto.
        (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream): Update logging.
        (WebCore::ScreenDisplayCaptureSourceMac::startDisplayStream): Ditto.
        (WebCore::ScreenDisplayCaptureSourceMac::frameAvailable): Ditto.

        * platform/mediastream/mac/WindowDisplayCaptureSourceMac.h:
        * platform/mediastream/mac/WindowDisplayCaptureSourceMac.mm:
        (WebCore::WindowDisplayCaptureSourceMac::create): Update parameters.

        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::create): Ditto.
        (WebCore::MockRealtimeAudioSource::MockRealtimeAudioSource): Ditto.
        (WebCore::MockRealtimeAudioSource::settings): Use hashedId to set device ID.
        (WebCore::MockRealtimeAudioSource::capabilities): Ditto.
        * platform/mock/MockRealtimeAudioSource.h:

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::create): Update parameters.
        (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource): Ditto.
        (WebCore::MockRealtimeVideoSource::capabilities): Use hashedId to set device ID.
        (WebCore::MockRealtimeVideoSource::settings): Ditto.
        * platform/mock/MockRealtimeVideoSource.h:

2018-10-02  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][playbin3] Stream tag lists leaks
        https://bugs.webkit.org/show_bug.cgi?id=190192

        Reviewed by Xabier Rodriguez-Calvar.

        The gst_stream_get_tags() result is transfer-full, so needs to be adopted to prevent a leak.
        Also check the tags list pointer which might be NULL in some cases.

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

2018-10-01  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix unused variable in RenderLayer::updateScrollableAreaSet

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const): This is a prepare-ChangeLog bug. I don't
        have any changes in this function....

2018-10-02  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Make same thread assert non-release
        https://bugs.webkit.org/show_bug.cgi?id=189924

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::handleNewAppsinkSample):

2018-10-01  Ryosuke Niwa  <rniwa@webkit.org>

        Add a new variant of serializePreservingVisualAppearance which takes VisibleSelection
        https://bugs.webkit.org/show_bug.cgi?id=190108

        Reviewed by Wenson Hsieh.

        Added a version of serializePreservingVisualAppearance which takes VisibleSelection so that we can avoid creating
        a range simply to get the first node and the end node of the selection later. This simple change also fixes a bug
        demonstrated in editing/pasteboard/paste-table-003.html.

        Test: editing/pasteboard/paste-table-003.html

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::selectionInHTMLFormat): Adopt the new variant.
        * editing/gtk/EditorGtk.cpp:
        (WebCore::Editor::writeSelectionToPasteboard): Ditto.
        * editing/markup.cpp:
        (WebCore::serializePreservingVisualAppearance): Added.
        * editing/markup.h:
        * editing/wpe/EditorWPE.cpp:
        (WebCore::Editor::writeSelectionToPasteboard): Ditto.
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createFromSelection): Ditto.
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeSelection): Ditto.

2018-10-01  Alex Christensen  <achristensen@webkit.org>

        Don't read from WebCore's bundle for IDNScriptWhiteList
        https://bugs.webkit.org/show_bug.cgi?id=190157

        Reviewed by Dan Bernstein.

        No change in behavior.  This increases performance by not reading from the WebCore bundle,
        and it makes it so that URL-related functionality can be moved to a place without
        a bundle for resources.

        * Resources/IDNScriptWhiteList.txt: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::whiteListIDNScripts):
        (WebCore::allCharactersInIDNScriptWhiteList):
        (WebCore::readIDNScriptWhiteListFile): Deleted.

2018-10-01  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r236551.

        Fails URL validating too aggressively

        Reverted changeset:

        "URLWithUserTypedString should return nil for URLs deemed to
        be invalid by WebCore::URL"
        https://bugs.webkit.org/show_bug.cgi?id=189979
        https://trac.webkit.org/changeset/236551

2018-10-01  Keith Miller  <keith_miller@apple.com>

        Create a RELEASE_AND_RETURN macro for ExceptionScopes
        https://bugs.webkit.org/show_bug.cgi?id=190163

        Reviewed by Mark Lam.

        The new RELEASE_AND_RETURN does all the work for cases
        where you want to return the result of some expression
        without explicitly checking for an exception. This is
        much like the existing RETURN_IF_EXCEPTION macro.

        No new tests since this is a refactor.

        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::put):

2018-10-01  Daniel Bates  <dabates@apple.com>

        Attempt to fix the watchOS build after <https://trac.webkit.org/changeset/236678>
        (https://bugs.webkit.org/show_bug.cgi?id=189974)

        Explicitly cast index to unsigned to make the operator[] call unambiguous.

        * platform/ios/KeyEventIOS.mm:
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):

2018-10-01  Ryosuke Niwa  <rniwa@webkit.org>

        ASAN failure in ~GCReachableRef()
        https://bugs.webkit.org/show_bug.cgi?id=190113

        Reviewed by Darin Adler.

        The bug was caused by ~GCReachableRef accessing Ref after it had been poisoned for ASAN
        in Ref::leakRef via Ref(Ref&& other). Fixed the bug by using RefPtr instead since that's
        the simplest solution here although we could unpoison Ref temporarily as done in ~Ref.

        * dom/GCReachableRef.h:
        (WebCore::GCReachableRef::GCReachableRef):
        (WebCore::GCReachableRef::~GCReachableRef):
        (WebCore::GCReachableRef::operator-> const):
        (WebCore::GCReachableRef::get const):
        (WebCore::GCReachableRef::operator T& const):
        (WebCore::GCReachableRef::operator! const):
        (WebCore::GCReachableRef::isNull const): Deleted.

2018-10-01  Sihui Liu  <sihui_liu@apple.com>

        Remove StorageProcess
        https://bugs.webkit.org/show_bug.cgi?id=189975

        Reviewed by Geoffrey Garen.

        Clean up code. No behavior change.

        * English.lproj/Localizable.strings:

2018-10-01  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Set a minimum sample duration
        https://bugs.webkit.org/show_bug.cgi?id=190125

        Reviewed by Xabier Rodriguez-Calvar.

        The last sample of the audio track in the asset used in this test
        player has a tiny duration (100 ns):

        http://orange-opensource.github.io/hasplayer.js/1.2.0/player.html?url=http://playready.directtaps.net/smoothstreaming/SSWSS720H264/SuperSpeedway_720.ism/Manifest

        So small, we were truncating it to zero. We're not supposed to have
        frames with zero duration. Instead, lets set a minimum frame duration
        for those fringe cases.

        * platform/graphics/gstreamer/MediaSampleGStreamer.cpp:
        (WebCore::MediaSampleGStreamer::MediaSampleGStreamer):

2018-10-01  Daniel Bates  <dabates@apple.com>

        [iOS] Special keys are misidentified in DOM keyboard events
        https://bugs.webkit.org/show_bug.cgi?id=189974

        Reviewed by Wenson Hsieh.

        This patch fixes two issues:
            1. Special keyboard keys would be misidentified in dispatched DOM keyboard events.
            2. DOM keypress events may not be dispatched for some special keys.

        UIKit uses special input strings to identify the Page Up, Page Down, Escape, Up Arrow, Down Arrow,
        Left Arrow, and Right Arrow keys. It also uses ASCII control characters to represent some other
        special keys, including Num Lock / Clear, Home, End, Forward Delete, and F1, ..., F24. We need
        to explicitly handle these special keyboard keys in order to be able to identify the key that
        was pressed as well as to correctly disambiguate a key down to know whether to dispatch a DOM
        keypress event for the key.

        Unlike UIKit, AppKit reserves Unicode Private Use Area (PUA) code points in 0xF700–0xF8FF to
        represent special keyboard keys. This makes it straightforward to disambiguate such keys using
        the input string of the keyboard event alone. To simplify the implementation for iOS
        we normalize the input string be AppKit compatible. See the explaination for WebCore::windowsKeyCodeForCharCode()
        below for more details on why this is done.

        Tests: fast/events/ios/keydown-keyup-arrow-keys-in-non-editable-element.html
               fast/events/ios/keypress-keys-in-non-editable-element.html

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Do not use unified source build strategy when building WebEvent.mm as it makes
        use of SoftLinking macros that are incompatible with this strategy.

        * platform/ios/KeyEventIOS.mm:
        (WebCore::windowsKeyCodeForCharCode): Recognize some special AppKit special char codes.
        These special char codes are generated by WebKit. WebKit uses the same special char codes
        as AppKit as a convenience instead of defining our own constants for the same purpose.
        Encoding the special UIKit input strings (e.g. up arrow) as distinct char codes allows us
        to use integer arithmetic and switch blocks to map characters to Windows virtual key
        codes as opposed to special cased branches to perform pointer or string comparisions.
        The latter would be necessary in Modern WebKit in order for key down events to be properly
        disambiguated to dispatch a DOM keypress event because pointers are not perserved, though
        what they point to is, when sending the WebEvent from UIProcess to the WebProcess and
        vice versa.
        (WebCore::isFunctionKey): Convenience function that determines whether the specified char
        code corresponds to a function key on the keyboard. The term "function key" is taken from
        AppKit parlance to describe a special keyboard key. These keys include F1, F2, ..., F24,
        and cursor keys among other special keyboard keys.
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent): Write in terms of isFunctionKey().
        * platform/ios/PlatformEventFactoryIOS.h:
        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::keyIdentifierForKeyEvent): Remove code to handle UIKit special input strings as
        we now map such special input strings to char codes and hence can use the default code path.
        (WebCore::keyForKeyEvent): Ditto.
        (WebCore::codeForKeyEvent): Remove code to compute the Window virtual key code corresponding
        to a UIKit special key command now that we map such special input strings to char codes and
        subsequently map the char codes to the Windows virtual key code (see -[WebEvent initWithKeyEventType:...]
        constructors). So, we can now use WebEvent.keyCode directly to compute the DOM UIEvents code
        for the event.
        (WebCore::PlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder): Remove code to fix up
        WebEvent.keyCode to account for UIKit special input strings now that we map such special key
        commands to char codes and subsequently map the char codes to the Windows virtual key code (see -[WebEvent initWithKeyEventType:...]
        constructors). So, we can now take WebEvent.keyCode verbatim to be the Window virtual key code.
        (WebCore::convertSpecialKeyToCharCode): Deleted.
        (WebCore::keyCodeForEvent): Deleted.
        * platform/ios/WebEvent.mm:
        (normalizedStringWithAppKitCompatibilityMapping): Added; converts a UIKit character string
        to the corresponding AppKit-compatible one (if not already compatible). See the explaination
        for WebCore::windowsKeyCodeForCharCode() above for more details on why this is done.

        (-[WebEvent initWithKeyEventType:timeStamp:characters:charactersIgnoringModifiers:modifiers:isRepeating:withFlags:keyCode:isTabKey:characterSet:]):
        (-[WebEvent initWithKeyEventType:timeStamp:characters:charactersIgnoringModifiers:modifiers:isRepeating:withFlags:withInputManagerHint:keyCode:isTabKey:]):
        Normalize the character strings to be AppKit compatible.

2018-10-01  Simon Fraser  <simon.fraser@apple.com>

        Optimize RenderStyle::diff() and clean up the code
        https://bugs.webkit.org/show_bug.cgi?id=190104

        Reviewed by Dan Bernstein.

        RenderStyle::changeRequiresLayout() and related should only check values on 
        m_rareNonInheritedData and m_rareInheritedData after checking for pointer equality.
        To reduce the chances of future changes regressing this, move code comparing values
        on StyleRare[Non]InheritedData into dedication functions.
        
        In addition, the transform comparison double-compared the transformOperations,
        because m_rareNonInheritedData->transform != other.m_rareNonInheritedData->transform
        is a deep comparison, and it was followed by *m_rareNonInheritedData->transform != *other.m_rareNonInheritedData->transform.
        Change the first to be a pointer comparison.

        * rendering/style/RenderStyle.cpp:
        (WebCore::rareNonInheritedDataChangeRequiresLayout):
        (WebCore::rareInheritedDataChangeRequiresLayout):
        (WebCore::RenderStyle::changeRequiresLayout const):
        (WebCore::rareNonInheritedDataChangeRequiresLayerRepaint):
        (WebCore::RenderStyle::changeRequiresLayerRepaint const):
        (WebCore::rareNonInheritedDataChangeRequiresRepaint):
        (WebCore::rareInheritedDataChangeRequiresRepaint):
        (WebCore::RenderStyle::changeRequiresRepaint const):

2018-10-01  Alex Christensen  <achristensen@webkit.org>

        URL should not use TextEncoding internally
        https://bugs.webkit.org/show_bug.cgi?id=190111

        Reviewed by Andy Estes.

        That dependency makes it impossible to move or use elsewhere.
        Using TextEncoding was overkill because we know the credentials are UTF-8 percent-encoded in a parsed URL.
        No change in behavior as verified by new API tests.

        * page/SecurityOrigin.cpp:
        * page/csp/ContentSecurityPolicySourceList.cpp:
        * platform/URL.cpp:
        (WebCore::decodeEscapeSequencesFromParsedURL):
        (WebCore::URL::user const):
        (WebCore::URL::pass const):
        (WebCore::URL::fileSystemPath const):
        (WebCore::decodeURLEscapeSequences): Deleted.
        * platform/URL.h:
        * platform/network/DataURLDecoder.cpp:
        * platform/text/TextEncoding.cpp:
        (WebCore::decodeURLEscapeSequences):
        * platform/text/TextEncoding.h:

2018-10-01  Simon Pieters  <zcorpan@gmail.com>

        <form> in quirks mode should have margin-block-end: 1em
        https://bugs.webkit.org/show_bug.cgi?id=157788

        Reviewed by Simon Fraser.

        Change the default style for forms to take writing-mode into account
        in quirks mode. Matches the behavior of Gecko and Edge and the HTML
        standard.

        Spec: https://html.spec.whatwg.org/multipage/rendering.html#flow-content-3

        Test: imported/w3c/web-platform-tests/html/rendering/non-replaced-elements/flow-content-0/form-margin-quirk.html

        * css/quirks.css:
        (form):

2018-10-01  Jeremy Jones  <jeremyj@apple.com>

        Unify implementation in VideoFullscreenInterfaceAVKit
        https://bugs.webkit.org/show_bug.cgi?id=190091
        rdar://problem/44734523

        Reviewed by Jer Noble.

        No new tests because no behavior change.

        Unified code in VideoFullscreenInterfaceAVKit now that new code path is proven and include
        any changes that had been made in the old path.

        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerViewControllerDelegate playerViewControllerShouldStartPictureInPictureFromInlineWhenEnteringBackground:]):
        (VideoFullscreenInterfaceAVKit::preparedToExitFullscreen):
        (VideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::requestUpdateInlineRect):
        (VideoFullscreenControllerContext::requestVideoContentLayer):
        (VideoFullscreenControllerContext::returnVideoContentLayer):
        (VideoFullscreenControllerContext::didSetupFullscreen):
        (VideoFullscreenControllerContext::didExitFullscreen):

2018-10-01  Antoine Quint  <graouts@apple.com>

        [Web Animations] Ensure renderers with accelerated animations have layers
        https://bugs.webkit.org/show_bug.cgi?id=189990

        Reviewed by Simon Fraser.

        In r236501 we added code that would make a RenderBox and a RenderInline query the document timeline for whether a given element has
        accelerated animations running on it. Since the calls to requiresLayer() are in a hot path, we instead keep a list of elements with
        exclusively accelerated animations running.

        No new tests, this is already covered by webanimations/accelerated-animation-with-delay.html and webanimations/opacity-animation-yields-compositing-span.html
        which respectively check that we can apply an accelerated animation to a non-positioned block and an inline element.

        * animation/AnimationTimeline.h:
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::detachFromDocument):
        (WebCore::DocumentTimeline::animationWasAddedToElement):
        (WebCore::DocumentTimeline::animationWasRemovedFromElement):
        (WebCore::DocumentTimeline::animationAcceleratedRunningStateDidChange):
        (WebCore::DocumentTimeline::updateListOfElementsWithRunningAcceleratedAnimationsForElement): Iterate over an element's animations to determine
        whether all of its animations are running accelerated, then update the HashSet containing elements running accelerated animations to remove or
        add this element.
        (WebCore::DocumentTimeline::runningAnimationsForElementAreAllAccelerated const): Make a simple contains() call on the HashSet containing elements
        running accelerated animations.
        * animation/DocumentTimeline.h:
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::updateAcceleratedAnimationState):
        (WebCore::KeyframeEffectReadOnly::applyPendingAcceleratedActions):
        * rendering/RenderBoxModelObject.h:

2018-10-01  Alicia Boya García  <aboya@igalia.com>

        [GStreamer] Fix abort in gst_sample_get_info()
        https://bugs.webkit.org/show_bug.cgi?id=190135

        Reviewed by Philippe Normand.

        A flush can occur before any frame has finished decoding -- especially
        in tests, where actions on the player often occur in quick succession.

        Therefore, the code must not assume by the time a flush occurs any
        frame has reached the sink. This patch fixes a case when such wrong
        assumption was causing gst_sample_get_info() to abort (crashing
        WebKit).

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::flushCurrentBuffer):
        (WebCore::MediaPlayerPrivateGStreamerBase::createGLAppSink):

2018-10-01  Olivier Blin  <olivier.blin@softathome.com>

        [WPE] fix buffer over-read in RenderThemeWPE::mediaControlsStyleSheet()
        https://bugs.webkit.org/show_bug.cgi?id=190139

        Reviewed by Michael Catanzaro.

        Like done upstream for EFL in r210213
        https://bugs.webkit.org/show_bug.cgi?id=166622

        This has been detected by a charactersAreAllASCII() assert failure.

        This is because ASCIILiteral() is wrongly used in mediaControlsStyleSheet().
        mediaControlsBaseUserAgentStyleSheet is a char array, not a null-terminated string.
        It is thus incorrect to use StringImpl::createFromLiteral() that calls
        strlen() to get the string length.

        The String::ConstructFromLiteral constructor can not be used, since it
        skips the last character.

        * platform/wpe/RenderThemeWPE.cpp:
        (WebCore::RenderThemeWPE::mediaControlsStyleSheet):
        Explicitely pass the size to the String constructor.

2018-10-01  Rob Buis  <rbuis@igalia.com>

        Align XMLHttpRequest's overrideMimeType() with the standard
        https://bugs.webkit.org/show_bug.cgi?id=169276

        Reviewed by Chris Dumez.

        Implement the overrideMimeType() as specified in that standard, i.e.
        add a check that the passed mime type is valid and if not fallback
        to application/octet-stream.

        In order for this patch to have any effect, I went ahead and
        made an improvement to the ContentType parsing, parseContentType now
        will reject mime types that do not match the type / subtype format, I
        believe this is required by both RFC2045 and mimesniff specs.

        This behavior matches Chrome and Firefox.

        Test: web-platform-tests/xhr/overridemimetype-invalid-mime-type.htm

        * platform/network/ParsedContentType.cpp:
        (WebCore::parseContentType):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::overrideMimeType):


2018-10-01  Chris Dumez  <cdumez@apple.com>

        Make crossOriginObject.then undefined for promises
        https://bugs.webkit.org/show_bug.cgi?id=190094

        Reviewed by Darin Adler.

        Make crossOriginObject.then undefined for promises. This allows promises to work better with cross-origin WindowProxy
        and Location objects.

        Specification:
        - https://github.com/whatwg/html/pull/3242
        - https://github.com/whatwg/dom/issues/536

        This aligns our behavior with Blink and Gecko.

        No new tests, rebaselined existing test.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowGetOwnPropertySlotRestrictedAccess):
        (WebCore::addCrossOriginWindowOwnPropertyNames):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::getOwnPropertySlotCommon):
        (WebCore::addCrossOriginLocationOwnPropertyNames):

2018-10-01  Xan Lopez  <xan@igalia.com>

        [SOUP] Fix the build for libsoup > 2.61.90
        https://bugs.webkit.org/show_bug.cgi?id=190126

        Reviewed by Michael Catanzaro.

        * platform/network/soup/SocketStreamHandleImplSoup.cpp:

2018-10-01  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Reset running time in PlaybackPipeline::flush()
        https://bugs.webkit.org/show_bug.cgi?id=190076

        Reviewed by Philippe Normand.

        Test: media/media-source/media-source-seek-redundant-append.html

        PlaybackPipeline::flush() is called when already enqueued frames are
        appended again. This may be caused by a quality change or just a
        redundant append. Either way, the pipeline has to be flushed and
        playback begin again, but without changing the player position by
        much.

        There are two kinds of time to consider here: stream time (i.e. the
        time of a frame as written in the file, e.g. a frame may have stream
        time 0:01:00), and running time (i.e. how much time since playback
        started should pass before the frame should be played, e.g. if we
        started playing at 0:00:59 that same frame would have a running time
        of just 1 second).

        Notice how running time depends on where and when playback starts.
        Running time can also be optionally resetted after a flush. (This is
        indeed done currently by most demuxers after a seek.)

        Instead of resetting running time, PlaybackPipeline used to modify the
        first GstSegment emitted after the flush. A GstSegment declares the
        mapping between stream time and running time for the following frames.
        There, PlaybackPipeline used to set `base` (the running time at which
        the segment starts) to the position reported by a position query
        (which is stream time).

        This, of course, only worked when playback (or the last seek) started
        at stream time 0:00:00, since that's the only case where running time
        equals stream time. In other cases delays as long as the difference
        between these timelines would appear. This is demonstrated in the
        attached test, where seeks and appends are made in such an order that
        the difference is more than 5 minutes, making the playback stall for
        >5 minutes before playing 1 second of audio.

        This patch fixes the problem by resetting running time with the flush
        and not modifying GstSegment.base anymore (it will be left as zero,
        which is now correct since the running time has been reset).

        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
        (WebCore::PlaybackPipeline::flush):
        (WebCore::segmentFixerProbe): Deleted.

2018-09-30  Ryosuke Niwa  <rniwa@webkit.org>

        Use Position instead of Range in createMarkupInternal
        https://bugs.webkit.org/show_bug.cgi?id=190107

        Reviewed by Darin Adler.

        Use two Position's indicating start and end instead of Range in createMarkupInternal and StylizedMarkupAccumulator
        in order to support copy & paste across shadow boundaries in the bug 157443. This patch also removes the use of
        Range in MarkupAccumulator since all uses of range is via StylizedMarkupAccumulator.

        Also renamed createMarkupInternal to serializePreservingVisualAppearanceInternal to match the rename in r236612.

        * dom/Position.cpp:
        (WebCore::Position::firstNode const):  Added.
        * dom/Position.h:
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::MarkupAccumulator): No longer takes Range.
        (WebCore::MarkupAccumulator::appendText): Removed the code to truncate string at the boundary points of the range.
        * editing/MarkupAccumulator.h:
        (WebCore::MarkupAccumulator): Made this class non-copyable.
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::StyledMarkupAccumulator): Now takes and stores two positions.

        (WebCore::StyledMarkupAccumulator::appendText): Use textContentRespectingRange in the case annotation is disabled
        instead of calling to MarkupAccumulator::appendText, which no longer respects boundary offsets.

        (WebCore::StyledMarkupAccumulator::renderedTextRespectingRange): Renamed from renderedText. Updated to respect
        boundary offsets defined by m_start and m_end Positions instead of m_range Range.

        (WebCore::StyledMarkupAccumulator::textContentRespectingRange): Renamed from stringValueForRange. Ditto.

        (WebCore::StyledMarkupAccumulator::serializeNodes): Now computes startNode and pastEnd nodes from start and end
        Positions. Note that the end position is always the next node in the tree order  for a character node
        and computeNodeAfterPosition returns nullptr for a character data.

        (WebCore::highestAncestorToWrapMarkup): Now takes two positions instead of a range.

        (WebCore::serializePreservingVisualAppearanceInternal): Renamed from createMarkupInternal. Removed the obsolete
        comments which were added for DOMRange in WebKitLegacy.

        (WebCore::serializePreservingVisualAppearance):

        (WebCore::sanitizedMarkupForFragmentInDocument): Create positions instead of a range to pass to
        serializePreservingVisualAppearanceInternal.

        (WebCore::serializeFragment):

        * editing/markup.h:
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::SerializerMarkupAccumulator): Removed the unnecessary WebCore namespace qualifier.

2018-09-30  Walker Henderson  <wjahenderson@gmail.com>

        AudioNode.connect should return passed destination node
        https://bugs.webkit.org/show_bug.cgi?id=188834

        Reviewed by Eric Carlson.

        No new tests, rebaselined existing test.

        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        (WebCore::AudioBasicInspectorNode::connect): Deleted.
        * Modules/webaudio/AudioBasicInspectorNode.h:
        * Modules/webaudio/AudioNode.cpp:
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/AudioNode.idl:

2018-09-30  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Clean up RealtimeMediaSource settings change handling
        https://bugs.webkit.org/show_bug.cgi?id=189998
        <rdar://problem/44797884>

        Reviewed by Youenn Fablet.

        No new tests, updated webrtc/video-disabled-black.html.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::Source):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::settings):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::settingsDidChange):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasResized):
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.h:
        * platform/mediastream/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource):
        (WebCore::RealtimeIncomingVideoSource::settings):
        (WebCore::RealtimeIncomingVideoSource::settingsDidChange):
        * platform/mediastream/RealtimeIncomingVideoSource.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::settingsDidChange):
        (WebCore::RealtimeMediaSource::notifySettingsDidChangeObservers):
        (WebCore::RealtimeMediaSource::setSize):
        (WebCore::RealtimeMediaSource::setFrameRate):
        (WebCore::RealtimeMediaSource::setAspectRatio):
        (WebCore::RealtimeMediaSource::setFacingMode):
        (WebCore::RealtimeMediaSource::setVolume):
        (WebCore::RealtimeMediaSource::setSampleRate):
        (WebCore::RealtimeMediaSource::setSampleSize):
        (WebCore::RealtimeMediaSource::setEchoCancellation):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp:
        (WebCore::GStreamerAudioCaptureSource::settingsDidChange):
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        (WebCore::GStreamerVideoCaptureSource::settingsDidChange):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::settingsDidChange):
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::settingsDidChange):
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        (WebCore::DisplayCaptureSourceCocoa::settingsDidChange):
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::processNewSample):
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::settingsDidChange):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::settingsDidChange):

2018-09-30  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Use display-specific capture factories
        https://bugs.webkit.org/show_bug.cgi?id=190043
        <rdar://problem/44834412>

        Reviewed by Youenn Fablet.

        No new tests, no change in functionality.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::AudioCaptureFactory::~AudioCaptureFactory): Deleted.
        (WebCore::RealtimeMediaSource::VideoCaptureFactory::~VideoCaptureFactory): Deleted.
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::createMediaStream):
        (WebCore::RealtimeMediaSourceCenter::getDisplayMediaDevices):
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        (WebCore::RealtimeMediaSourceCenter::setAudioFactory):
        (WebCore::RealtimeMediaSourceCenter::unsetAudioFactory):
        * platform/mediastream/RealtimeMediaSourceFactory.cpp: Added.
        (WebCore::SingleSourceFactory::setActiveSource):
        (WebCore::SingleSourceFactory::unsetActiveSource):
        * platform/mediastream/RealtimeMediaSourceFactory.h: Added.
        (WebCore::SingleSourceFactory::activeSource):
        (WebCore::VideoCaptureFactory::setVideoCapturePageState):
        (WebCore::DisplayCaptureFactory::setDisplayCapturePageState):
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        (WebCore::libWebRTCVideoCaptureSourceFactory):
        (WebCore::libWebRTCDisplayCaptureSourceFactory):
        (WebCore::GStreamerVideoCaptureSource::factory):
        (WebCore::GStreamerVideoCaptureSource::displayFactory):
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h:
        * platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp:
        (WebCore::RealtimeMediaSourceCenterLibWebRTC::audioCaptureSourceFactory):
        (WebCore::RealtimeMediaSourceCenterLibWebRTC::audioFactory):
        (WebCore::RealtimeMediaSourceCenterLibWebRTC::videoFactory):
        (WebCore::RealtimeMediaSourceCenterLibWebRTC::displayCaptureFactory):
        * platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource):
        (WebCore::AVVideoCaptureSource::setupCaptureSession):
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::factory):
        * platform/mediastream/mac/CoreAudioCaptureSource.h:
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::videoCaptureSourceFactory):
        (WebCore::RealtimeMediaSourceCenterMac::displayCaptureSourceFactory):
        (WebCore::RealtimeMediaSourceCenterMac::audioCaptureSourceFactory):
        (WebCore::RealtimeMediaSourceCenterMac::audioFactory):
        (WebCore::RealtimeMediaSourceCenterMac::videoFactory):
        (WebCore::RealtimeMediaSourceCenterMac::displayCaptureFactory):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::~MockRealtimeAudioSource):
        (WebCore::MockRealtimeAudioSource::startProducingData):
        (): Deleted.
        (WebCore::mockAudioCaptureSourceFactory): Deleted.
        (WebCore::MockRealtimeAudioSource::factory): Deleted.
        * platform/mock/MockRealtimeAudioSource.h:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeVideoSourceFactory::setVideoCapturePageState):
        (WebCore::MockRealtimeMediaSourceCenter::audioFactory):
        (WebCore::MockRealtimeMediaSourceCenter::videoFactory):
        (WebCore::MockRealtimeMediaSourceCenter::displayCaptureFactory):
        * platform/mock/MockRealtimeMediaSourceCenter.h:
        * platform/mock/MockRealtimeVideoSource.cpp:
        (): Deleted.
        (WebCore::MockRealtimeVideoSourceFactory::setVideoCapturePageState): Deleted.
        (WebCore::mockVideoCaptureSourceFactory): Deleted.
        (WebCore::MockRealtimeVideoSource::factory): Deleted.
        * platform/mock/MockRealtimeVideoSource.h:

2018-09-29  Oriol Brufau  <obrufau@igalia.com>

        [css-grid] Properly align items next to collapsed tracks with gutters
        https://bugs.webkit.org/show_bug.cgi?id=190089

        Reviewed by Manuel Rego Casasnovas.

        gridAreaPositionForInFlowChild could return a wrong end position for
        grid items adjacent to a collapsed track, because it didn't take into
        account that gutters collapse in that case. Therefore, "center" or
        "end" alignments displayed the item at the wrong position.

        Test: imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-013.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::gridAreaPositionForInFlowChild const):

2018-09-29  Alicia Boya García  <aboya@igalia.com>

        [GStreamer][MSE] Use GObject for GST_TRACE_OBJECT
        https://bugs.webkit.org/show_bug.cgi?id=190045

        Reviewed by Philippe Normand.

        Passing a non-GObject object to GST_TRACE_OBJECT() can be
        theoretically misunderstood by the GStreamer logging function, so this
        patch avoids that.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::appsrcEndOfAppendCheckerProbe):
        (WebCore::AppendPipeline::handleEndOfAppend):
        (WebCore::AppendPipeline::consumeAppsinkAvailableSamples):
        (WebCore::AppendPipeline::pushNewBuffer):

2018-09-28  Zamiul Haque  <zhaque@apple.com>

        Angled gradient backgrounds in body render vertically when body height is 0
        https://bugs.webkit.org/show_bug.cgi?id=177232
        <rdar://problem/34548230>.

        Reviewed by Tim Horton.

        Specifically, gradients displayed at an angle (ie. 45 degrees) are rendered
        as if they are vertical when the body tag containing the gradient
        has a height of 0. Other browsers do not render under these circumstances,
        so WebKit was modified to follow in suit. The problem was due to layout sizes for
        fill tiles being calculated with a minimum height of 1px. A simple change of the
        minimum height and width to 0px was enough to bring about the desired behavior.

        Tests: angled-background-repeating-gradient-rendering-vertical.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateFillTileSize const):

2018-09-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        No DOM API to instantiate an attachment for an img element
        https://bugs.webkit.org/show_bug.cgi?id=189934
        <rdar://problem/44743222>

        Reviewed by Ryosuke Niwa.

        Adds support for HTMLAttachmentElement.getAttachmentIdentifier, a function that internal WebKit clients can use
        to ensure that an image element is backed by a unique _WKAttachment. See below for more details.

        Tests:  WKAttachmentTests.AddAttachmentToConnectedImageElement
                WKAttachmentTests.ChangeFileWrapperForPastedImage
                WKAttachmentTests.ConnectImageWithAttachmentToDocument

        * dom/Document.cpp:
        (WebCore::Document::registerAttachmentIdentifier):

        Add a new hook to register an empty _WKAttachment in the UI process with a given identifier. Used when creating
        a new empty attachment to back an image element.

        * dom/Document.h:
        * editing/Editor.cpp:
        (WebCore::Editor::registerAttachmentIdentifier):
        (WebCore::Editor::notifyClientOfAttachmentUpdates):
        * editing/Editor.h:
        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::getAttachmentIdentifier):

        Creates an attachment element to back the image element, if an attachment does not already exist, and returns
        the unique identifier. This also causes an empty corresponding _WKAttachment to be created in the client, whose
        file wrapper determines the contents of the image.

        (WebCore::HTMLAttachmentElement::ensureUniqueIdentifier):
        (WebCore::HTMLAttachmentElement::hasEnclosingImage const):
        (WebCore::HTMLAttachmentElement::updateEnclosingImageWithData):

        Add a helper that updates the source of the enclosing image element given a content type and image data, by
        creating a new blob and blob URL.

        * html/HTMLAttachmentElement.h:
        * html/HTMLAttachmentElement.idl:
        * html/HTMLImageElement.idl:

        Rename webkitAttachmentIdentifier to just attachmentIdentifier.

        * page/EditorClient.h:
        (WebCore::EditorClient::registerAttachmentIdentifier):
        (WebCore::EditorClient::didInsertAttachmentWithIdentifier):

2018-09-28  Chris Dumez  <cdumez@apple.com>

        The return value of an OnBeforeUnloadEventHandler should always be coerced into a DOMString
        https://bugs.webkit.org/show_bug.cgi?id=190090

        Reviewed by Ryosuke Niwa.

        The return value of an OnBeforeUnloadEventHandler should always be coerced into a DOMString:
        - https://html.spec.whatwg.org/#onbeforeunloadeventhandler
        - https://html.spec.whatwg.org/#the-event-handler-processing-algorithm (Step 5)

        In particular, this means that returning false in an OnBeforeUnloadEventHandler should NOT
        cancel the event when the event is a CustomEvent (and not a BeforeUnloadEvent). This is
        because the return value cannot be false at:
        - https://html.spec.whatwg.org/#the-event-handler-processing-algorithm (Step 5. Otherwise case).

        No new tests, rebaselined existing test.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):

2018-09-28  Simon Fraser  <simon.fraser@apple.com>

        RenderLayer::removeOnlyThisLayer() should not call updateLayerPositions()
        https://bugs.webkit.org/show_bug.cgi?id=190093

        Reviewed by Dean Jackson and Zalan Bujtas.
        
        It's wrong for RenderLayer::removeOnlyThisLayer() to call updateLayerPositions(),
        because this is called at style update time, and layout will be stale.
        
        It was added (see webkit.org/b/25252) so that opacity changes, which can destroy layers, correctly update
        descendants. However, RenderStyle::changeRequiresLayout() checks for opacity <=> no opacity
        changes and triggers layout accordingly, which will result in a full post-layout
        updateLayerPositions().
        
        This also revealed that changes to the "isolate" property fail to trigger any kind of style recalc or layout;
        we need it to trigger layout (for now) because it affects z-order.

        Covered by existing tests.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::removeOnlyThisLayer):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout const):

2018-09-28  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Polish WebAuthN auto-test environment
        https://bugs.webkit.org/show_bug.cgi?id=189283
        <rdar://problem/44117828>

        Reviewed by Chris Dumez.

        This patch removes the old mocking mechanism.

        Tests: http/wpt/webauthn/public-key-credential-create-with-invalid-parameters.https.html
               http/wpt/webauthn/public-key-credential-get-with-invalid-parameters.https.html
               http/wpt/webauthn/public-key-credential-same-origin-with-ancestors.https.html

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::mockAuthenticatorCoordinator const): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/MockAuthenticatorCoordinator.cpp: Removed.
        * testing/MockAuthenticatorCoordinator.h: Removed.
        * testing/MockAuthenticatorCoordinator.idl: Removed.

2018-09-28  Jer Noble  <jer.noble@apple.com>

        Refactoring: eliminate raw pointer usage in Fullscreen code
        https://bugs.webkit.org/show_bug.cgi?id=188747
        <rdar://problem/43541164>

        Reviewed by Alex Christensen.

        Two sources of raw pointers in the Fullscreen code:
        - Model classes (PlaybackSessionModel and VideoFullscreenModel) aren't ref-able, so
          they are passed around as raw references.
        - Observer classes (PlaybackSessionModelClient and VideoFullscreenModelClient, and
          VideoFullscreenChangeObserver) are also passed around as raw pointers, but shouldn't
          be ref-able.

        Make Model classes ref-able by adding ref() and deref() which call virtual refModel and
        derefModel methods, overridden by implementing subclasses. Make every concrete observer
        inherit from CanMakeWeakPtr, and every registration method take WeakPtr wrappers around
        the client interface.

        Since every Interface class now holds a strong reference to its Model classes, and each
        Model class holds a weak reference to all its clients, no explicit invalidate() method
        is necessary.

        Notes:

        - Since the weak pointer methods need to be able to downcast to the abstract base class,
          observers need to inherit publically (rather than privately) from those base classes.
        - Media element Models should compose EventListener rather than inheriting from it, since
          EventListener has its own RefCount.
        - WeakPtrs can't be held in HashSets (because they change value, and therefore hash, when
          their underlying object is destroyed), so clients should be stored in a Vector instead.
        - Interfaces should be given all required Refs at creation time, so that they can store
          those parameters as Refs instead of RefPtrs.

        * platform/cocoa/PlaybackSessionInterface.h:
        (WebCore::PlaybackSessionInterface::~PlaybackSessionInterface): Deleted.
        * platform/cocoa/PlaybackSessionModel.h:
        (WebCore::PlaybackSessionModel::ref):
        (WebCore::PlaybackSessionModel::deref):
        (WebCore::PlaybackSessionModel::~PlaybackSessionModel): Deleted.
        * platform/cocoa/PlaybackSessionModelMediaElement.h:
        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::PlaybackSessionModelMediaElement):
        (WebCore::PlaybackSessionModelMediaElement::~PlaybackSessionModelMediaElement):
        (WebCore::PlaybackSessionModelMediaElement::setMediaElement):
        (WebCore::PlaybackSessionModelMediaElement::updateForEventName):
        (WebCore::PlaybackSessionModelMediaElement::addClient):
        (WebCore::PlaybackSessionModelMediaElement::removeClient):
        (WebCore::PlaybackSessionModelMediaElement::updateMediaSelectionOptions):
        (WebCore::PlaybackSessionModelMediaElement::updateMediaSelectionIndices):
        (WebCore::PlaybackSessionModelMediaElement::handleEvent): Deleted.
        * platform/cocoa/VideoFullscreenChangeObserver.h:
        (WebCore::VideoFullscreenChangeObserver::~VideoFullscreenChangeObserver): Deleted.
        * platform/cocoa/VideoFullscreenModel.h:
        (WebCore::VideoFullscreenModel::ref):
        (WebCore::VideoFullscreenModel::deref):
        (WebCore::VideoFullscreenModel::~VideoFullscreenModel): Deleted.
        * platform/cocoa/VideoFullscreenModelVideoElement.h:
        * platform/cocoa/VideoFullscreenModelVideoElement.mm:
        (VideoFullscreenModelVideoElement::VideoFullscreenModelVideoElement):
        (VideoFullscreenModelVideoElement::setVideoElement):
        (VideoFullscreenModelVideoElement::addClient):
        (VideoFullscreenModelVideoElement::removeClient):
        (VideoFullscreenModelVideoElement::setHasVideo):
        (VideoFullscreenModelVideoElement::setVideoDimensions):
        (VideoFullscreenModelVideoElement::willEnterPictureInPicture):
        (VideoFullscreenModelVideoElement::didEnterPictureInPicture):
        (VideoFullscreenModelVideoElement::failedToEnterPictureInPicture):
        (VideoFullscreenModelVideoElement::willExitPictureInPicture):
        (VideoFullscreenModelVideoElement::didExitPictureInPicture):
        (VideoFullscreenModelVideoElement::handleEvent): Deleted.
        * platform/ios/PlaybackSessionInterfaceAVKit.h:
        (WebCore::PlaybackSessionInterfaceAVKit::create):
        (WebCore::PlaybackSessionInterfaceAVKit::playbackSessionModel const):
        (): Deleted.
        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        (WebCore::PlaybackSessionInterfaceAVKit::PlaybackSessionInterfaceAVKit):
        (WebCore::PlaybackSessionInterfaceAVKit::~PlaybackSessionInterfaceAVKit):
        (WebCore::PlaybackSessionInterfaceAVKit::invalidate): Deleted.
        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerLayer layoutSublayers]):
        (-[WebAVPlayerLayer resolveBounds]):
        (-[WebAVPlayerLayer setVideoGravity:]):
        (VideoFullscreenInterfaceAVKit::create):
        (VideoFullscreenInterfaceAVKit::VideoFullscreenInterfaceAVKit):
        (VideoFullscreenInterfaceAVKit::~VideoFullscreenInterfaceAVKit):
        (VideoFullscreenInterfaceAVKit::setVideoFullscreenChangeObserver):
        (VideoFullscreenInterfaceAVKit::applicationDidBecomeActive):
        (VideoFullscreenInterfaceAVKit::setupFullscreen):
        (VideoFullscreenInterfaceAVKit::presentingViewController):
        (VideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen):
        (VideoFullscreenInterfaceAVKit::preparedToExitFullscreen):
        (VideoFullscreenInterfaceAVKit::willStartPictureInPicture):
        (VideoFullscreenInterfaceAVKit::didStartPictureInPicture):
        (VideoFullscreenInterfaceAVKit::failedToStartPictureInPicture):
        (VideoFullscreenInterfaceAVKit::willStopPictureInPicture):
        (VideoFullscreenInterfaceAVKit::didStopPictureInPicture):
        (VideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason):
        (VideoFullscreenInterfaceAVKit::doSetup):
        (VideoFullscreenInterfaceAVKit::setMode):
        (VideoFullscreenInterfaceAVKit::clearMode):
        (VideoFullscreenInterfaceAVKit::setVideoFullscreenModel): Deleted.
        (VideoFullscreenInterfaceAVKit::invalidate): Deleted.
        * platform/ios/WebAVPlayerController.h:
        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController delegate]):
        (-[WebAVPlayerController playbackSessionInterface]):
        (-[WebAVPlayerController setPlaybackSessionInterface:]):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::didCleanupFullscreen):
        (VideoFullscreenControllerContext::addClient):
        (VideoFullscreenControllerContext::removeClient):
        (VideoFullscreenControllerContext::willEnterPictureInPicture):
        (VideoFullscreenControllerContext::didEnterPictureInPicture):
        (VideoFullscreenControllerContext::failedToEnterPictureInPicture):
        (VideoFullscreenControllerContext::willExitPictureInPicture):
        (VideoFullscreenControllerContext::didExitPictureInPicture):
        (VideoFullscreenControllerContext::setUpFullscreen):
        * platform/mac/PlaybackSessionInterfaceMac.h:
        * platform/mac/PlaybackSessionInterfaceMac.mm:
        (WebCore::PlaybackSessionInterfaceMac::create):
        (WebCore::PlaybackSessionInterfaceMac::PlaybackSessionInterfaceMac):
        (WebCore::PlaybackSessionInterfaceMac::playbackSessionModel const):
        (WebCore::PlaybackSessionInterfaceMac::rateChanged):
        (WebCore::PlaybackSessionInterfaceMac::beginScrubbing):
        (WebCore::PlaybackSessionInterfaceMac::endScrubbing):
        (WebCore::PlaybackSessionInterfaceMac::setPlayBackControlsManager):
        (WebCore::PlaybackSessionInterfaceMac::updatePlaybackControlsManagerTiming):
        (WebCore::PlaybackSessionInterfaceMac::~PlaybackSessionInterfaceMac): Deleted.
        (WebCore::PlaybackSessionInterfaceMac::invalidate): Deleted.
        * platform/mac/VideoFullscreenInterfaceMac.h:
        (WebCore::VideoFullscreenInterfaceMac::create):
        (WebCore::VideoFullscreenInterfaceMac::videoFullscreenModel const):
        (WebCore::VideoFullscreenInterfaceMac::playbackSessionModel const):
        (WebCore::VideoFullscreenInterfaceMac::videoFullscreenChangeObserver const):
        * platform/mac/VideoFullscreenInterfaceMac.mm:
        (-[WebVideoFullscreenInterfaceMacObjC setUpPIPForVideoView:withFrame:inWindow:]):
        (-[WebVideoFullscreenInterfaceMacObjC boundsDidChangeForVideoViewContainer:]):
        (-[WebVideoFullscreenInterfaceMacObjC pipDidClose:]):
        (-[WebVideoFullscreenInterfaceMacObjC pipActionPlay:]):
        (-[WebVideoFullscreenInterfaceMacObjC pipActionPause:]):
        (-[WebVideoFullscreenInterfaceMacObjC pipActionStop:]):
        (WebCore::VideoFullscreenInterfaceMac::VideoFullscreenInterfaceMac):
        (WebCore::VideoFullscreenInterfaceMac::~VideoFullscreenInterfaceMac):
        (WebCore::VideoFullscreenInterfaceMac::setVideoFullscreenChangeObserver):
        (WebCore::VideoFullscreenInterfaceMac::setMode):
        (WebCore::VideoFullscreenInterfaceMac::clearMode):
        (WebCore::VideoFullscreenInterfaceMac::invalidate):
        (WebCore::VideoFullscreenInterfaceMac::requestHideAndExitPiP):
        (WebCore::VideoFullscreenInterfaceMac::setVideoFullscreenModel): Deleted.
        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager seekToTime:toleranceBefore:toleranceAfter:]):
        (-[WebPlaybackControlsManager setCurrentAudioTouchBarMediaSelectionOption:]):
        (-[WebPlaybackControlsManager setCurrentLegibleTouchBarMediaSelectionOption:]):
        (-[WebPlaybackControlsManager togglePlayback]):
        (-[WebPlaybackControlsManager setPlaying:]):
        (-[WebPlaybackControlsManager isPlaying]):
        (-[WebPlaybackControlsManager togglePictureInPicture]):

2018-09-28  Chris Dumez  <cdumez@apple.com>

        Drop support for cross-origin-window-policy header
        https://bugs.webkit.org/show_bug.cgi?id=190081

        Reviewed by Ryosuke Niwa.

        Drop support for cross-origin-window-policy header as this was never enabled and its design has
        some issues we have not resolved. An alternative is being worked on but will be substantially
        different so there is not much value in keeping this code around.

        * bindings/js/JSDOMBindingSecurity.cpp:
        * bindings/js/JSDOMBindingSecurity.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowGetOwnPropertySlotRestrictedAccess):
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):
        (WebCore::addCrossOriginWindowPropertyNames):
        (WebCore::addScopedChildrenIndexes):
        (WebCore::addCrossOriginWindowOwnPropertyNames):
        (WebCore::JSDOMWindow::getOwnPropertyNames):
        * bindings/js/JSDOMWindowCustom.h:
        * bindings/js/JSRemoteDOMWindowCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeGetterBodyDefinition):
        (GenerateAttributeSetterBodyDefinition):
        (GenerateOperationBodyDefinition):
        * bindings/scripts/IDLAttributes.json:
        * dom/Document.cpp:
        (WebCore::Document::canNavigate):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument):
        * page/AbstractDOMWindow.cpp:
        (WebCore::AbstractDOMWindow::AbstractDOMWindow):
        * page/AbstractDOMWindow.h:
        * page/DOMWindow.idl:
        * page/Settings.yaml:
        * platform/network/HTTPParsers.cpp:
        * platform/network/HTTPParsers.h:

2018-09-28  Daniel Bates  <dabates@apple.com>

        [iOS] Allow programmatic focus when hardware keyboard is attached
        https://bugs.webkit.org/show_bug.cgi?id=190017
        <rdar://problem/42270463>

        Reviewed by Wenson Hsieh.

        Add support for checking if the embedding client is WebKitTestRunner and export isDumpRenderTree()
        so that we can make use of it from WebKit. We will make use of these functions to keep the current
        behavior of disallowing programmatic focus when running tests in these apps. This is needed to
        keep testing deterministic. Otherwise, test results would be dependent on whether a hardware
        keyboard is attached. When running tests in Simulator.app the hardware keyboard may also not be
        connected (i.e. Hardware > Keyboard > Connect Hardware Keyboard is disabled).

        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isWebKitTestRunner): Added.

2018-09-28  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r236609): API tests for mso list preservation are failing
        https://bugs.webkit.org/show_bug.cgi?id=190095

        Reviewed by Wenson Hsieh.

        The regression was caused by appendNodeToPreserveMSOList called after an early return for not having renderer.
        Clearly, comment & style elements coming from a MS word document wouldn't have a renderer.

        Fixed the bug by changing the order.

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::traverseNodesForSerialization):

2018-09-28  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r236612.

        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeSelection):

2018-09-28  Andy Estes  <aestes@apple.com>

        [Apple Pay] Remove the "in-store" button type
        https://bugs.webkit.org/show_bug.cgi?id=190079

        Reviewed by Tim Horton.

        According to <https://developer.apple.com/design/human-interface-guidelines/apple-pay/buttons-and-marks/buttons/>,
        this button is meant only for certain kinds of native apps. It shouldn't be available on the web.

        Updated http/tests/ssl/applepay/ApplePayButton.html.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ApplePayButtonType const):
        * css/CSSValueKeywords.in:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        * rendering/RenderThemeCocoa.mm:
        (WebCore::toPKPaymentButtonType):
        * rendering/style/RenderStyleConstants.h:

2018-09-28  Chris Dumez  <cdumez@apple.com>

        document.open() should throw errors for cross-origin calls
        https://bugs.webkit.org/show_bug.cgi?id=189371
        <rdar://problem/44282700>

        Reviewed by Youenn Fablet.

        document.open() / document.write() should throw errors for cross-origin calls as per:
        - https://html.spec.whatwg.org/#document-open-steps (Step 4)

        No new tests, rebaselined existing tests.

        * dom/Document.cpp:
        (WebCore::Document::open):
        (WebCore::Document::write):
        (WebCore::Document::writeln):
        * dom/Document.h:

2018-09-28  Ryosuke Niwa  <rniwa@webkit.org>

        Rename createMarkup to serializePreservingVisualAppearance
        https://bugs.webkit.org/show_bug.cgi?id=190086

        Reviewed by Wenson Hsieh.

        Renamed the function to clarify what it does. Also removed the unused Range::toHTML.

        * dom/Range.cpp:
        (WebCore::Range::toHTML const): Deleted.
        * dom/Range.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::selectionInHTMLFormat):
        * editing/gtk/EditorGtk.cpp:
        (WebCore::Editor::writeSelectionToPasteboard):
        * editing/markup.cpp:
        (WebCore::serializePreservingVisualAppearance):
        (WebCore::createMarkup): Deleted.
        * editing/markup.h:
        * editing/wpe/EditorWPE.cpp:
        (WebCore::Editor::writeSelectionToPasteboard):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        (WebCore::LegacyWebArchive::createFromSelection):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeRangeToDataObject):

2018-09-28  Simon Fraser  <simon.fraser@apple.com>

        Remove some unused RenderLayer code
        https://bugs.webkit.org/show_bug.cgi?id=190078

        Reviewed by Zalan Bujtas.

        The 'outOfFlowDescendantContainingBlocks' code was related to the accelerated overflow scrolling code that
        I removed recently.
        
        updateDescendantsLayerListsIfNeeded() is never called.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateDescendantDependentFlags):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:

2018-09-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r236605.
        https://bugs.webkit.org/show_bug.cgi?id=190087

        caused three API test timeouts (Requested by jernoble on
        #webkit).

        Reverted changeset:

        "Refactoring: eliminate raw pointer usage in Fullscreen code"
        https://bugs.webkit.org/show_bug.cgi?id=188747
        https://trac.webkit.org/changeset/236605

2018-09-28  Ryosuke Niwa  <rniwa@webkit.org>

        Simplify StyledMarkupAccumulator::traverseNodesForSerialization
        https://bugs.webkit.org/show_bug.cgi?id=190073

        Reviewed by Antti Koivisto.

        Simplified the range traversal algorithm in traverseNodesForSerialization as it was too complicated
        to support shadow DOM for copy and paste.

        Instead of using NodeTraversal::next to traverse past ancestors and then figuring out which ancestor
        must be closed or to wrap the existing markup with, new code collects the list of ancestors as we
        traverse out of them.

        Also extracted lambdas for generating markup and deciding whether to skip a node as well as keeping
        track of the depth of the current markup. This further reduces the code complexity of the actual
        node traversal algorithm. Keeping track of the depth allows us to now generate ancestor elements'
        closing tags without keeping a stack of ancestor nodes we opened at all times.

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::traverseNodesForSerialization):

2018-09-27  Ryosuke Niwa  <rniwa@webkit.org>

        Replace every use of Node::offsetInCharacters() by Node::isCharacterDataNode()
        https://bugs.webkit.org/show_bug.cgi?id=190069

        Reviewed by Zalan Bujtas.

        Removed Node::offsetInCharacters() and replaced every use of it by isCharacterDataNode()
        because their implementations are identical.

        Note that offsetInCharacters() sounds like a function which returns some kind of an offset
        but it doesn't. It returns true when called on a CharacterData and false elsewhere.

        * accessibility/AXObjectCache.cpp:
        (WebCore::characterOffsetsInOrder):
        (WebCore::AXObjectCache::startOrEndCharacterOffsetForRange):
        (WebCore::AXObjectCache::characterOffsetFromVisiblePosition):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::offsetInCharacters const): Deleted.
        * dom/CharacterData.h:
        * dom/Node.cpp:
        (WebCore::Node::offsetInCharacters const): Deleted.
        * dom/Node.h:
        * dom/Position.cpp:
        (WebCore::Position::parentAnchoredEquivalent const):
        * dom/Position.h:
        (WebCore::lastOffsetInNode):
        (WebCore::minOffsetForNode):
        (WebCore::offsetIsBeforeLastNodeOffset):
        * dom/Range.cpp:
        (WebCore::Range::firstNode const):
        (WebCore::Range::pastLastNode const):
        * dom/RangeBoundaryPoint.h:
        (WebCore::RangeBoundaryPoint::setOffset):
        (WebCore::RangeBoundaryPoint::setToEndOfNode):
        * editing/Editing.cpp:
        (WebCore::lastOffsetForEditing):
        * editing/TextIterator.cpp:
        (WebCore::nextInPreOrderCrossingShadowBoundaries):
        (WebCore::TextIterator::node const):
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::extend):

2018-09-28  Jer Noble  <jer.noble@apple.com>

        Refactoring: eliminate raw pointer usage in Fullscreen code
        https://bugs.webkit.org/show_bug.cgi?id=188747
        <rdar://problem/43541164>

        Reviewed by Alex Christensen.

        Two sources of raw pointers in the Fullscreen code:
        - Model classes (PlaybackSessionModel and VideoFullscreenModel) aren't ref-able, so
          they are passed around as raw references.
        - Observer classes (PlaybackSessionModelClient and VideoFullscreenModelClient, and
          VideoFullscreenChangeObserver) are also passed around as raw pointers, but shouldn't
          be ref-able.

        Make Model classes ref-able by adding ref() and deref() which call virtual refModel and
        derefModel methods, overridden by implementing subclasses. Make every concrete observer
        inherit from CanMakeWeakPtr, and every registration method take WeakPtr wrappers around
        the client interface.

        Since every Interface class now holds a strong reference to its Model classes, and each
        Model class holds a weak reference to all its clients, no explicit invalidate() method
        is necessary.

        Notes:

        - Since the weak pointer methods need to be able to downcast to the abstract base class,
          observers need to inherit publically (rather than privately) from those base classes.
        - Media element Models should compose EventListener rather than inheriting from it, since
          EventListener has its own RefCount.
        - WeakPtrs can't be held in HashSets (because they change value, and therefore hash, when
          their underlying object is destroyed), so clients should be stored in a Vector instead.
        - Interfaces should be given all required Refs at creation time, so that they can store
          those parameters as Refs instead of RefPtrs.

        * platform/cocoa/PlaybackSessionInterface.h:
        (WebCore::PlaybackSessionInterface::~PlaybackSessionInterface): Deleted.
        * platform/cocoa/PlaybackSessionModel.h:
        (WebCore::PlaybackSessionModel::ref):
        (WebCore::PlaybackSessionModel::deref):
        (WebCore::PlaybackSessionModel::~PlaybackSessionModel): Deleted.
        * platform/cocoa/PlaybackSessionModelMediaElement.h:
        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::PlaybackSessionModelMediaElement):
        (WebCore::PlaybackSessionModelMediaElement::~PlaybackSessionModelMediaElement):
        (WebCore::PlaybackSessionModelMediaElement::setMediaElement):
        (WebCore::PlaybackSessionModelMediaElement::updateForEventName):
        (WebCore::PlaybackSessionModelMediaElement::addClient):
        (WebCore::PlaybackSessionModelMediaElement::removeClient):
        (WebCore::PlaybackSessionModelMediaElement::updateMediaSelectionOptions):
        (WebCore::PlaybackSessionModelMediaElement::updateMediaSelectionIndices):
        (WebCore::PlaybackSessionModelMediaElement::handleEvent): Deleted.
        * platform/cocoa/VideoFullscreenChangeObserver.h:
        (WebCore::VideoFullscreenChangeObserver::~VideoFullscreenChangeObserver): Deleted.
        * platform/cocoa/VideoFullscreenModel.h:
        (WebCore::VideoFullscreenModel::ref):
        (WebCore::VideoFullscreenModel::deref):
        (WebCore::VideoFullscreenModel::~VideoFullscreenModel): Deleted.
        * platform/cocoa/VideoFullscreenModelVideoElement.h:
        * platform/cocoa/VideoFullscreenModelVideoElement.mm:
        (VideoFullscreenModelVideoElement::VideoFullscreenModelVideoElement):
        (VideoFullscreenModelVideoElement::setVideoElement):
        (VideoFullscreenModelVideoElement::addClient):
        (VideoFullscreenModelVideoElement::removeClient):
        (VideoFullscreenModelVideoElement::setHasVideo):
        (VideoFullscreenModelVideoElement::setVideoDimensions):
        (VideoFullscreenModelVideoElement::willEnterPictureInPicture):
        (VideoFullscreenModelVideoElement::didEnterPictureInPicture):
        (VideoFullscreenModelVideoElement::failedToEnterPictureInPicture):
        (VideoFullscreenModelVideoElement::willExitPictureInPicture):
        (VideoFullscreenModelVideoElement::didExitPictureInPicture):
        (VideoFullscreenModelVideoElement::handleEvent): Deleted.
        * platform/ios/PlaybackSessionInterfaceAVKit.h:
        (WebCore::PlaybackSessionInterfaceAVKit::create):
        (WebCore::PlaybackSessionInterfaceAVKit::playbackSessionModel const):
        (): Deleted.
        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        (WebCore::PlaybackSessionInterfaceAVKit::PlaybackSessionInterfaceAVKit):
        (WebCore::PlaybackSessionInterfaceAVKit::~PlaybackSessionInterfaceAVKit):
        (WebCore::PlaybackSessionInterfaceAVKit::invalidate): Deleted.
        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerLayer layoutSublayers]):
        (-[WebAVPlayerLayer resolveBounds]):
        (-[WebAVPlayerLayer setVideoGravity:]):
        (VideoFullscreenInterfaceAVKit::create):
        (VideoFullscreenInterfaceAVKit::VideoFullscreenInterfaceAVKit):
        (VideoFullscreenInterfaceAVKit::~VideoFullscreenInterfaceAVKit):
        (VideoFullscreenInterfaceAVKit::setVideoFullscreenChangeObserver):
        (VideoFullscreenInterfaceAVKit::applicationDidBecomeActive):
        (VideoFullscreenInterfaceAVKit::setupFullscreen):
        (VideoFullscreenInterfaceAVKit::presentingViewController):
        (VideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen):
        (VideoFullscreenInterfaceAVKit::preparedToExitFullscreen):
        (VideoFullscreenInterfaceAVKit::willStartPictureInPicture):
        (VideoFullscreenInterfaceAVKit::didStartPictureInPicture):
        (VideoFullscreenInterfaceAVKit::failedToStartPictureInPicture):
        (VideoFullscreenInterfaceAVKit::willStopPictureInPicture):
        (VideoFullscreenInterfaceAVKit::didStopPictureInPicture):
        (VideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason):
        (VideoFullscreenInterfaceAVKit::doSetup):
        (VideoFullscreenInterfaceAVKit::setMode):
        (VideoFullscreenInterfaceAVKit::clearMode):
        (VideoFullscreenInterfaceAVKit::setVideoFullscreenModel): Deleted.
        (VideoFullscreenInterfaceAVKit::invalidate): Deleted.
        * platform/ios/WebAVPlayerController.h:
        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController delegate]):
        (-[WebAVPlayerController playbackSessionInterface]):
        (-[WebAVPlayerController setPlaybackSessionInterface:]):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::didCleanupFullscreen):
        (VideoFullscreenControllerContext::addClient):
        (VideoFullscreenControllerContext::removeClient):
        (VideoFullscreenControllerContext::willEnterPictureInPicture):
        (VideoFullscreenControllerContext::didEnterPictureInPicture):
        (VideoFullscreenControllerContext::failedToEnterPictureInPicture):
        (VideoFullscreenControllerContext::willExitPictureInPicture):
        (VideoFullscreenControllerContext::didExitPictureInPicture):
        (VideoFullscreenControllerContext::setUpFullscreen):
        * platform/mac/PlaybackSessionInterfaceMac.h:
        * platform/mac/PlaybackSessionInterfaceMac.mm:
        (WebCore::PlaybackSessionInterfaceMac::create):
        (WebCore::PlaybackSessionInterfaceMac::PlaybackSessionInterfaceMac):
        (WebCore::PlaybackSessionInterfaceMac::playbackSessionModel const):
        (WebCore::PlaybackSessionInterfaceMac::rateChanged):
        (WebCore::PlaybackSessionInterfaceMac::beginScrubbing):
        (WebCore::PlaybackSessionInterfaceMac::endScrubbing):
        (WebCore::PlaybackSessionInterfaceMac::setPlayBackControlsManager):
        (WebCore::PlaybackSessionInterfaceMac::updatePlaybackControlsManagerTiming):
        (WebCore::PlaybackSessionInterfaceMac::~PlaybackSessionInterfaceMac): Deleted.
        (WebCore::PlaybackSessionInterfaceMac::invalidate): Deleted.
        * platform/mac/VideoFullscreenInterfaceMac.h:
        (WebCore::VideoFullscreenInterfaceMac::create):
        (WebCore::VideoFullscreenInterfaceMac::videoFullscreenModel const):
        (WebCore::VideoFullscreenInterfaceMac::playbackSessionModel const):
        (WebCore::VideoFullscreenInterfaceMac::videoFullscreenChangeObserver const):
        * platform/mac/VideoFullscreenInterfaceMac.mm:
        (-[WebVideoFullscreenInterfaceMacObjC setUpPIPForVideoView:withFrame:inWindow:]):
        (-[WebVideoFullscreenInterfaceMacObjC boundsDidChangeForVideoViewContainer:]):
        (-[WebVideoFullscreenInterfaceMacObjC pipDidClose:]):
        (-[WebVideoFullscreenInterfaceMacObjC pipActionPlay:]):
        (-[WebVideoFullscreenInterfaceMacObjC pipActionPause:]):
        (-[WebVideoFullscreenInterfaceMacObjC pipActionStop:]):
        (WebCore::VideoFullscreenInterfaceMac::VideoFullscreenInterfaceMac):
        (WebCore::VideoFullscreenInterfaceMac::~VideoFullscreenInterfaceMac):
        (WebCore::VideoFullscreenInterfaceMac::setVideoFullscreenChangeObserver):
        (WebCore::VideoFullscreenInterfaceMac::setMode):
        (WebCore::VideoFullscreenInterfaceMac::clearMode):
        (WebCore::VideoFullscreenInterfaceMac::invalidate):
        (WebCore::VideoFullscreenInterfaceMac::requestHideAndExitPiP):
        (WebCore::VideoFullscreenInterfaceMac::setVideoFullscreenModel): Deleted.
        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager seekToTime:toleranceBefore:toleranceAfter:]):
        (-[WebPlaybackControlsManager setCurrentAudioTouchBarMediaSelectionOption:]):
        (-[WebPlaybackControlsManager setCurrentLegibleTouchBarMediaSelectionOption:]):
        (-[WebPlaybackControlsManager togglePlayback]):
        (-[WebPlaybackControlsManager setPlaying:]):
        (-[WebPlaybackControlsManager isPlaying]):
        (-[WebPlaybackControlsManager togglePictureInPicture]):

2018-09-28  Chris Dumez  <cdumez@apple.com>

        Drop iOS specific quirk in SettingsBase::scriptEnabledChanged()
        https://bugs.webkit.org/show_bug.cgi?id=190077
        <rdar://problem/44812613>

        Reviewed by Zalan Bujtas.

        Drop iOS specific quirk in SettingsBase::scriptEnabledChanged() that would dirty style after the
        "JavaScriptEnabled" setting's state is toggled. I do not see a good reason to do this given that
        scripts would not get executed until a reload.

        If we find out after dropping this that this is actually useful for some reason, then we can
        always bring it back and consider making this non-iOS specific, as well as documenting why this
        it is needed.

        * page/Settings.yaml:
        * page/SettingsBase.cpp:
        (WebCore::SettingsBase::scriptEnabledChanged): Deleted.
        * page/SettingsBase.h:

2018-09-27  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Fix priority issue with multiple cookies with different level of path.
        https://bugs.webkit.org/show_bug.cgi?id=189920

        Reviewed by Fujii Hironori.

        When multiple cookies are stored in the database for same site, the priority of
        multiple cookies which matches path criteria was not defined. The backend
        implementation `sqlite` then returns the first matching result, which is the one
        stored earlier.

        Test: http/tests/cookies/cookie-with-multiple-level-path.html

        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::searchCookies):

2018-09-26  Ryosuke Niwa  <rniwa@webkit.org>

        Use enum class in createMarkup arguments
        https://bugs.webkit.org/show_bug.cgi?id=190028

        Reviewed by Wenson Hsieh.

        Replaced enums used by createMarkup with equivalent enum classes: EChildrenOnly with SerializedNodes,
        EAbsoluteURLs with ResolveURLs, and EFragmentSerialization with SerializationSyntax.

        Also replaced the boolean convertBlocksToInlines with an enum class of the same name.

        Finally, renamed the createMarkup variant which doesn't serialize style and used for innerHTML and XMLSerializer
        to serializeFragment.

        * dom/Element.cpp:
        (WebCore::Element::innerHTML const):
        (WebCore::Element::outerHTML const):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::innerHTML const):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/HTMLInterchange.h:
        (WebCore::AnnotateForInterchange): Renamed from EAnnotateForInterchange.
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::MarkupAccumulator):
        (WebCore::MarkupAccumulator::serializeNodes):
        (WebCore::MarkupAccumulator::serializeNodesWithNamespaces):
        (WebCore::MarkupAccumulator::resolveURLIfNeeded const):
        * editing/MarkupAccumulator.h:
        (WebCore::MarkupAccumulator::inXMLFragmentSerialization const):
        * editing/ReplaceRangeWithTextCommand.cpp:
        (WebCore::ReplaceRangeWithTextCommand::inputEventDataTransfer const):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::willApplyCommand):
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::inputEventDataTransfer const):
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::selectionInHTMLFormat):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::WebContentMarkupReader::readRTFD):
        (WebCore::WebContentMarkupReader::readRTF):
        * editing/gtk/EditorGtk.cpp:
        (WebCore::Editor::writeImageToPasteboard):
        (WebCore::Editor::writeSelectionToPasteboard):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::StyledMarkupAccumulator):
        (WebCore::StyledMarkupAccumulator::serializeNodes):
        (WebCore::StyledMarkupAccumulator::traverseNodesForSerialization):
        (WebCore::highestAncestorToWrapMarkup):
        (WebCore::createMarkupInternal):
        (WebCore::createMarkup):
        (WebCore::sanitizedMarkupForFragmentInDocument):
        (WebCore::serializeFragment): Renamed from createMarkup. This is used for innerHTML and XMLSerializer,
        which faithfully serializes the fragment without any computed style as inline styles.
        (WebCore::documentTypeString):
        (WebCore::createFullMarkup): Deleted two varinats used in WebKitLegacy.
        * editing/markup.h:
        (WebCore::ResolveURLs): Renamed from EAbsoluteURLs.
        (WebCore::ConvertBlocksToInlines): Added.
        (WebCore::SerializedNodes): Renamed from EChildrenOnly.
        (WebCore::SerializationSyntax): Renamed from EFragmentSerialization.
        * editing/wpe/EditorWPE.cpp:
        (WebCore::Editor::writeSelectionToPasteboard):
        * inspector/DOMEditor.cpp:
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getOuterHTML):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        (WebCore::LegacyWebArchive::createFromSelection):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::SerializerMarkupAccumulator::SerializerMarkupAccumulator):
        (WebCore::PageSerializer::serializeFrame):
        * page/win/DragControllerWin.cpp:
        (WebCore::DragController::declareAndWriteDragImage):
        * Source/WebCore/platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeRangeToDataObject):
        (WebCore::Pasteboard::writeSelection):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        * xml/XMLSerializer.cpp:
        (WebCore::XMLSerializer::serializeToString):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::xsltStylesheetPointer):
        (WebCore::xmlDocPtrFromNode):

2018-09-27  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Non-redirected top frame navigation should not get captured in statistics
        https://bugs.webkit.org/show_bug.cgi?id=190055
        <rdar://problem/44843460>

        Reviewed by Chris Dumez.

        Test: http/tests/resourceLoadStatistics/do-not-capture-statistics-for-simple-top-navigations.html

        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::decode):
            Corrects legacy statistics for frames and triggers a re-classification.

2018-09-27  Jer Noble  <jer.noble@apple.com>

        Unreviewed watchOS build fix; Fix declaration for ports which USE(ENCRYPTED_MEDIA) but don't
        HAVE(AVCONTENTKEYSESSION).

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:

2018-09-27  Justin Michaud  <justin_michaud@apple.com>

        Remove duplicate CSS Properties and Values feature on status page
        https://bugs.webkit.org/show_bug.cgi?id=189909

        Reviewed by Simon Fraser.

        Update CSS properties and values api feature in features.json

        * features.json:

2018-09-27  Jer Noble  <jer.noble@apple.com>

        MediaPlayer should have mediaPlayerWaitingForKeyChanged() / bool waitingForKey() accessor
        https://bugs.webkit.org/show_bug.cgi?id=189951

        Reviewed by Eric Carlson.

        In order to implement the "Resume Playback" section of EME, part 4, we need to be able
        to query whether the MediaPlayer is still waiting for a key after attemptToDecrypt()
        has been called. Currently this involves no behavioral changes, as all modern EME ports
        will still just notify the media element that they no longer need keys after one has
        been added, but future ports may be able to wait for multiple keys before reporting
        that it is no longer waiting for keys.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerWaitingForKeyChanged):
        (WebCore::HTMLMediaElement::attemptToResumePlaybackIfNecessary):
        (WebCore::HTMLMediaElement::mediaPlayerWaitingForKey): Deleted.
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::waitingForKeyChanged):
        (WebCore::MediaPlayer::waitingForKey const):
        (WebCore::MediaPlayer::waitingForKey): Deleted.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerWaitingForKeyChanged):
        (WebCore::MediaPlayerClient::mediaPlayerWaitingForKey): Deleted.
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::waitingForKey const):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::attemptToDecryptWithInstance):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::attemptToDecryptWithInstance):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::waitingForKey const):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::waitingForKeyChanged):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::initializationDataEncountered):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID):
        (WebCore::SourceBufferPrivateAVFObjC::attemptToDecrypt):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::reportWaitingForKey):
        (WebCore::MediaPlayerPrivateGStreamerBase::setWaitingForKey):
        (WebCore::MediaPlayerPrivateGStreamerBase::waitingForKey const):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (webkitMediaCommonEncryptionDecryptSinkEventHandler):

2018-09-27  Alicia Boya García  <aboya@igalia.com>

        [MSE] Fix unwanted sample erase from the decode queue
        https://bugs.webkit.org/show_bug.cgi?id=180643

        Reviewed by Jer Noble.

        Test: media/media-source/media-source-append-acb-no-frame-lost.html

        This bug reproduced when unordered appends were made. For instance, if
        the application appended [0, 10) and then [20, 30), the frame at 20
        would be wrongly discarded from the decode queue.

        Later the application could append [10, 20) and the gap at [20, 21)
        would persist in the decode queue, even if the frame remained in the
        track buffer table.

        Thanks to Daniel Zhang for reporting the issue.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::provideMediaData):

2018-09-27  Alex Christensen  <achristensen@webkit.org>

        URLParser should use TextEncoding through an abstract class
        https://bugs.webkit.org/show_bug.cgi?id=190027

        Reviewed by Andy Estes.

        URLParser uses TextEncoding for one call to encode, which is only used for encoding the query of URLs in documents with non-UTF encodings.
        There are 3 call sites that specify the TextEncoding to use from the Document, and even those call sites use a UTF encoding most of the time.
        All other URL parsing is done using a well-optimized path which assumes UTF-8 encoding and uses macros from ICU headers, not a TextEncoding.
        Moving the logic in this way breaks URL and URLParser's dependency on TextEncoding, which makes it possible to use in a lower-level project
        without also moving TextEncoding, TextCodec, TextCodecICU, ThreadGlobalData, and the rest of WebCore and JavaScriptCore.

        There is no observable change in behavior.  There is now one virtual function call in a code path in URLParser that is not performance-sensitive,
        and TextEncodings now have a vtable, which uses a few more bytes of memory total for WebKit.

        * css/parser/CSSParserContext.h:
        (WebCore::CSSParserContext::completeURL const):
        * css/parser/CSSParserIdioms.cpp:
        (WebCore::completeURL):
        * dom/Document.cpp:
        (WebCore::Document::completeURL const):
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::href const):
        Move the call to encodingForFormSubmission from the URL constructor to the 3 call sites that specify the encoding from the Document.
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::encodingForURLParsing):
        * loader/TextResourceDecoder.h:
        * platform/URL.cpp:
        (WebCore::URL::URL):
        * platform/URL.h:
        (WebCore::URLTextEncoding::~URLTextEncoding):
        * platform/URLParser.cpp:
        (WebCore::URLParser::encodeNonUTF8Query):
        (WebCore::URLParser::copyURLPartsUntil):
        (WebCore::URLParser::URLParser):
        (WebCore::URLParser::parse):
        (WebCore::URLParser::encodeQuery): Deleted.
        A pointer replaces the boolean isUTF8Encoding and the TextEncoding& which had a default value of UTF8Encoding.
        Now the pointer being null means that we use UTF8, and the pointer being non-null means we use that encoding.
        * platform/URLParser.h:
        (WebCore::URLParser::URLParser):
        * platform/text/TextEncoding.cpp:
        (WebCore::UTF7Encoding):
        (WebCore::TextEncoding::encodingForFormSubmissionOrURLParsing const):
        (WebCore::ASCIIEncoding):
        (WebCore::Latin1Encoding):
        (WebCore::UTF16BigEndianEncoding):
        (WebCore::UTF16LittleEndianEncoding):
        (WebCore::UTF8Encoding):
        (WebCore::WindowsLatin1Encoding):
        (WebCore::TextEncoding::encodingForFormSubmission const): Deleted.
        Use NeverDestroyed because TextEncoding now has a virtual destructor.
        * platform/text/TextEncoding.h:
        Rename encodingForFormSubmission to encodingForFormSubmissionOrURLParsing to make it more clear that we are intentionally using it for both.

2018-09-27  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Remove temporary compatibility fix for auto-dismiss popups
        https://bugs.webkit.org/show_bug.cgi?id=189980
        <rdar://problem/44780645>

        Reviewed by Alex Christensen.

        Test: http/tests/storageAccess/deny-storage-access-under-opener-if-auto-dismiss.html

        The change in https://bugs.webkit.org/show_bug.cgi?id=183620 was a temporary
        compatibility fix as explained in:
        https://webkit.org/blog/8311/intelligent-tracking-prevention-2-0/. We should
        remove it.

        Most of these changes remove the parameter isTriggeredByUserGesture since it's no longer needed.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::setRequestStorageAccessUnderOpenerCallback):
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        (WebCore::ResourceLoadObserver::requestStorageAccessUnderOpener):
        (WebCore::ResourceLoadObserver::logWindowCreation): Deleted.
        * loader/ResourceLoadObserver.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
            Now no longer logs anything to ResourceLoadObserver.

2018-09-27  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r236557.

        Really roll out r236557 this time because it breaks internal
        builds.

        Reverted changeset:

        "Add VP8 support to WebRTC"
        https://bugs.webkit.org/show_bug.cgi?id=189976
        https://trac.webkit.org/changeset/236557

2018-09-27  Chris Dumez  <cdumez@apple.com>

        Fragment should be stripped from document URL during document.open() URL propagation
        https://bugs.webkit.org/show_bug.cgi?id=189374
        <rdar://problem/44282736>

        Reviewed by Alex Christensen.

        Strip the Document URL fragment during document.open() URL propagation if the entry document
        is not the current document, as per:
        - https://html.spec.whatwg.org/#document-open-steps (Step 11.2.)

        No new tests, rebaselined existing test.

        * dom/Document.cpp:
        (WebCore::Document::open):

2018-09-27  Youenn Fablet  <youenn@apple.com>

        Add VP8 support to WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=189976

        Reviewed by Eric Carlson.

        Add a runtime flag to control activation of VP8 codec.
        Bind this runtime flag to the video codec factories.
        Test: webrtc/video-mute-vp8.html

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::createLibWebRTCPeerConnectionBackend):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webRTCVP8CodecEnabled const):
        (WebCore::RuntimeEnabledFeatures::setWebRTCVP8CodecEnabled):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:
        (WebCore::LibWebRTCProviderCocoa::createDecoderFactory):
        (WebCore::LibWebRTCProviderCocoa::createEncoderFactory):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        Enable VP8 codec for tests.

2018-09-27  Chris Dumez  <cdumez@apple.com>

        Crash under WebCore::deleteCookiesForHostnames()
        https://bugs.webkit.org/show_bug.cgi?id=190040
        <rdar://problem/38020368>

        Reviewed by Alex Christensen.

        Update NetworkStorageSession::deleteCookiesForHostnames() to properly deal with the fact
        that NSHTTPCookie.domain can return nil.

        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::deleteCookiesForHostnames):

2018-09-27  Youenn Fablet  <youenn@apple.com>

        Use kCVPixelFormatType_420YpCbCr8Planar for capturing frames
        https://bugs.webkit.org/show_bug.cgi?id=190014

        Reviewed by Eric Carlson.

        On Mac, rely on the monoplanar format which can be displayed without any issue.
        Once rendering is fixed, we should change it back to biplanar as it is closer to what libwebrtc consumes.
        Covered by manual testing.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::avVideoCapturePixelBufferFormat):
        (WebCore::AVVideoCaptureSource::setSizeAndFrameRateWithPreset):
        (WebCore::AVVideoCaptureSource::setupCaptureSession):
        (WebCore::AVVideoCaptureSource::captureOutputDidOutputSampleBufferFromConnection):

2018-09-27  Andy Estes  <aestes@apple.com>

        [Apple Pay] Support granular errors in PaymentDetailsUpdate
        https://bugs.webkit.org/show_bug.cgi?id=189938

        Reviewed by Youenn Fablet.

        Implemented the shippingAddressErrors, payerErrors, and paymentMethodErrors properties on
        PaymentDetailsUpdate, as specified in the Payment Request API W3C Editor's Draft of
        26 September 2018.

        When these errors are specified in a PaymentDetailsUpdate, map them to PaymentErrors. For
        shippingAddressErrors and payerErrors, we use the "shippingContactInvalid" code and a
        contact field that matches the shippingAddressError or payerError property specified.

        For paymentMethodErrors, we interpret this as a sequence of ApplePayErrors, which are
        converted to PaymentErrors as in Apple Pay JS.

        Tests: http/tests/ssl/applepay/ApplePayShippingAddressChangeEventErrors.https.html
               http/tests/ssl/applepay/ApplePayShippingAddressChangeEventErrorsV3.https.html

        * DerivedSources.make: Removed some tabs and added new .idl files.
        * Modules/applepay/ApplePayError.idl: Moved ApplePayErrorCode and ApplePayErrorContactField
        into their own .idl files so they can be used in MockPaymentError.
        * Modules/applepay/ApplePayErrorCode.h: Added.
        * Modules/applepay/ApplePayErrorCode.idl: Added.
        * Modules/applepay/ApplePayErrorContactField.h: Added.
        * Modules/applepay/ApplePayErrorContactField.idl: Added.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::appendShippingContactInvalidError): Appended a "shippingContactInvalid"
        PaymentError to errors if the message is non-null.
        (WebCore::ApplePayPaymentHandler::computeErrors const):
        (WebCore::ApplePayPaymentHandler::detailsUpdated):
        (WebCore::ApplePayPaymentHandler::shippingAddressUpdated): Computed a vector of PaymentErrors
        based on shippingAddressErrors, payerErrors, and paymentMethodErrors.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:

        * Modules/paymentrequest/PaymentDetailsUpdate.h:
        * Modules/paymentrequest/PaymentDetailsUpdate.idl: Defined shippingAddressErrors,
        payerErrors, and paymentMethodErrors.

        * Modules/paymentrequest/PaymentHandler.h:
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::paymentMethodChanged):
        (WebCore::PaymentRequest::settleDetailsPromise): Passed shippingAddressErrors, payerErrors,
        and paymentMethodErrors to the payment handler.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::completeShippingContactSelection): Stored errors in m_errors.
        * testing/MockPaymentCoordinator.h:
        * testing/MockPaymentCoordinator.idl: Added an errors attribute.

        * testing/MockPaymentError.h: Added.
        * testing/MockPaymentError.idl: Added.

2018-09-27  Alex Christensen  <achristensen@webkit.org>

        URLWithUserTypedString should return nil for URLs deemed to be invalid by WebCore::URL
        https://bugs.webkit.org/show_bug.cgi?id=189979

        Reviewed by Youenn Fablet.

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::URLWithUserTypedString):
        (WebCore::dataForURLComponentType):
        (WebCore::URLByRemovingComponentAndSubsequentCharacter):
        (WebCore::URLByCanonicalizingURL):
        (WebCore::originalURLData):
        (WebCore::userVisibleString):

2018-09-27  Chris Dumez  <cdumez@apple.com>

        document.open() should not propagate URLs to non-fully active documents
        https://bugs.webkit.org/show_bug.cgi?id=189375
        <rdar://problem/44282755>

        Reviewed by Youenn Fablet.

        Update our document.open() to not propagate URLs to non-fully active documents, as per:
        - https://html.spec.whatwg.org/#document-open-steps (Step 11)

        A "fully active" document is defined by at:
        - https://html.spec.whatwg.org/#fully-active

        No new tests, rebaselined existing test.

        * dom/Document.cpp:
        (WebCore::Document::open):
        (WebCore::Document::isFullyActive const):
        * dom/Document.h:
        * dom/Document.idl:

2018-09-27  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Use sentinel buffer to detect end of append
        https://bugs.webkit.org/show_bug.cgi?id=189924

        Reviewed by Philippe Normand.

        This patch introduces a new mechanism to detect when an append has
        been consumed completely by the demuxer. It takes advantage of the
        fact that buffer pushing is synchronous: both the appsrc and the
        demuxer live in the same streaming thread. When appsrc pushes a
        buffer, it's actually making a qtdemux function call (it calls its
        "chain" function). The demuxer will return from that call when it has
        finished processing that buffer; only then the control returns to
        appsrc, that can push the next buffer.

        By pushing an additional buffer and capturing it in a probe we can
        detect reliably when the previous buffer has been processed.
        Because the pipeline only has one thread, at this point no more frames
        can arrive to the appsink.

        This replaces the old method of detecting end of append which relied
        on the `need-data` event, which is more difficult to handle correctly
        because it fires whenever the appsrc is empty (or below a given
        level), which also happens when a buffer has not been pushed yet or
        in response to a flush.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::EndOfAppendMeta::init):
        (WebCore::EndOfAppendMeta::transform):
        (WebCore::EndOfAppendMeta::free):
        (WebCore::AppendPipeline::staticInitialization):
        (WebCore::AppendPipeline::AppendPipeline):
        (WebCore::AppendPipeline::~AppendPipeline):
        (WebCore::AppendPipeline::appsrcEndOfAppendCheckerProbe):
        (WebCore::AppendPipeline::handleApplicationMessage):
        (WebCore::AppendPipeline::handleEndOfAppend):
        (WebCore::AppendPipeline::consumeAppsinkAvailableSamples):
        (WebCore::AppendPipeline::resetPipeline):
        (WebCore::AppendPipeline::pushNewBuffer):
        (WebCore::AppendPipeline::handleAppsrcNeedDataReceived): Deleted.:
        (WebCore::AppendPipeline::handleAppsrcAtLeastABufferLeft): Deleted.
        (WebCore::AppendPipeline::checkEndOfAppend): Deleted.
        (WebCore::AppendPipeline::setAppsrcDataLeavingProbe): Deleted.
        (WebCore::AppendPipeline::removeAppsrcDataLeavingProbe): Deleted.
        (WebCore::AppendPipeline::reportAppsrcAtLeastABufferLeft): Deleted.
        (WebCore::AppendPipeline::reportAppsrcNeedDataReceived): Deleted.
        (WebCore::appendPipelineAppsrcDataLeaving): Deleted.
        (WebCore::appendPipelineAppsrcNeedData): Deleted.
        * platform/graphics/gstreamer/mse/AppendPipeline.h:

2018-09-27  Chris Dumez  <cdumez@apple.com>

        The WebContent process should not process incoming IPC while waiting for a sync IPC reply
        https://bugs.webkit.org/show_bug.cgi?id=184183
        <rdar://problem/36800576>

        Reviewed by Ryosuke Niwa.

        Drop test infrastructure for the DoNotProcessIncomingMessagesWhenWaitingForSyncReply IPC::SendOption
        given that this SendOption was removed from this patch.

        * page/ChromeClient.h:
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:

2018-09-27  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK Ubuntu LTS build fix attempt after r236396.

        * platform/graphics/gstreamer/GStreamerCommon.h:

2018-09-27  Antoine Quint  <graouts@apple.com>

        [Web Animations] Turn Web Animations with CSS integration on
        https://bugs.webkit.org/show_bug.cgi?id=184819
        <rdar://problem/39597337>

        Reviewed by Dean Jackson.

        * page/RuntimeEnabledFeatures.h:

2018-09-26  YUHAN WU  <yuhan_wu@apple.com>

        Video track clone cannot preserve original property
        https://bugs.webkit.org/show_bug.cgi?id=189872
        <rdar://problem/44706579>

        Reviewed by Youenn Fablet.

        Fix the issue that the cloned track created by canvas.captureStream().getVideoTracks() cannot keep some attributes, such as enabled.
        Updated a testcase expected result:
        LayoutTests/imported/w3c/web-platform-tests/mst-content-hint/MediaStreamTrack-contentHint.html

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack):
        (WebCore::CanvasCaptureMediaStreamTrack::create):
        (WebCore::CanvasCaptureMediaStreamTrack::clone):
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.h:
        * Modules/mediastream/MediaStreamTrack.h:

2018-09-26  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r236524.

        Broke API tests

        Reverted changeset:

        "URLWithUserTypedString should return nil for URLs deemed to
        be invalid by WebCore::URL"
        https://bugs.webkit.org/show_bug.cgi?id=189979
        https://trac.webkit.org/changeset/236524

2018-09-26  Per Arne Vollan  <pvollan@apple.com>

        WebVTT cue alignment broken
        https://bugs.webkit.org/show_bug.cgi?id=190004

        Reviewed by Eric Carlson.

        If the position of the queue is unspecified, the default value of 50 was used, which is incorrect.
        This patch also updates the API according to https://w3c.github.io/webvtt/#the-vttcue-interface.
        The position attribute should not be a double, but either a double or the "auto" keyword. Parts
        of this patch is inspired by the associated code in the Chromium project.

        Test: media/track/track-cue-left-align.html

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties):
        (WebCore::TextTrackCueGeneric::setPosition):
        * html/track/TextTrackCueGeneric.h:
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):
        (WebCore::VTTCue::initialize):
        (WebCore::VTTCue::position const):
        (WebCore::VTTCue::setPosition):
        (WebCore::VTTCue::textPositionIsAuto const):
        (WebCore::VTTCue::calculateComputedTextPosition const):
        (WebCore::VTTCue::calculateDisplayParameters):
        (WebCore::VTTCue::toJSON const):
        * html/track/VTTCue.h:
        (WebCore::VTTCue::position const): Deleted.
        * html/track/VTTCue.idl:

2018-09-26  James Savage  <james.savage@apple.com>

        Allow override of viewport configuration.
        https://bugs.webkit.org/show_bug.cgi?id=188772.
        <rdar://problem/43538892>.

        Reviewed by Simon Fraser.

        * page/Settings.yaml:
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::nativeWebpageParameters): Provide a viewport configuration
        similar to width=device-width, with initial scale set to 1.
        * page/ViewportConfiguration.h:

2018-09-26  Alex Christensen  <achristensen@webkit.org>

        URLs with mismatched surrogate pairs in the host should fail to parse
        https://bugs.webkit.org/show_bug.cgi?id=190005

        Reviewed by Chris Dumez.

        Elsewhere in the URLParser, when we encounter mismatched surrogate pairs we use the replacement character,
        but that just fails later on in domainToASCII, so we may as well just fail.
        This behavior matches Chrome, but is unclear in the spec.  There are no valid uses of hosts containing mismatched surrogate pairs.
        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parseHostAndPort):

2018-09-26  Alex Christensen  <achristensen@webkit.org>

        uidna_nameToASCII only needs a buffer capacity of 64
        https://bugs.webkit.org/show_bug.cgi?id=190006

        Reviewed by Chris Dumez.

        This is specified in https://www.unicode.org/reports/tr46/#ToASCII
        This is how Chrome and Firefox also behave with long unicode hosts.

        * platform/URLParser.cpp:
        (WebCore::URLParser::domainToASCII):

2018-09-26  Alex Christensen  <achristensen@webkit.org>

        URLWithUserTypedString should return nil for URLs deemed to be invalid by WebCore::URL
        https://bugs.webkit.org/show_bug.cgi?id=189979
        <rdar://problem/44119696>

        Reviewed by Chris Dumez.

        Covered by an API test.

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::URLWithData):

2018-09-26  Ryosuke Niwa  <rniwa@webkit.org>

        Selection should work across shadow boundary when initiated by a mouse drag
        https://bugs.webkit.org/show_bug.cgi?id=151380
        <rdar://problem/24363872>

        Revert the change that I said I would from r236519.

        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingShadowBoundaries):

2018-09-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r236511.
        https://bugs.webkit.org/show_bug.cgi?id=190008

        It is breaking some WebRTC tests (Requested by youenn on
        #webkit).

        Reverted changeset:

        "[MediaStream] Clean up RealtimeMediaSource settings change
        handling"
        https://bugs.webkit.org/show_bug.cgi?id=189998
        https://trac.webkit.org/changeset/236511

2018-09-26  Ryosuke Niwa  <rniwa@webkit.org>

        Selection should work across shadow boundary when initiated by a mouse drag
        https://bugs.webkit.org/show_bug.cgi?id=151380
        <rdar://problem/24363872>

        Reviewed by Antti Koivisto and Wenson Hsieh.

        This patch adds the basic support for selecting content across shadow DOM boundaries to VisibleSelection,
        which is enough to allow users to select content across shadow DOM boundaries via a mouse drag.

        This is the first step in allowing users to select, copy and paste content across shadow DOM boundaries,
        which is a serious user experience regression right now. The new behavior is disabled by default under
        an interal debug feature flag: selectionAcrossShadowBoundariesEnabled.

        Like Chrome, we are not going to support selecting editable content across shadow DOM boundaries since
        we'd have to generalize every editing commands to make that work, and there aren't any HTML editors that
        use shadow DOM boundaries within an editable region yet. For simplicity, we also don't support extending
        a selection out of a shadow root which resides inside an editing region.

        The keyboard based navigation & manipulation of selection as well as allowing copy & paste of content
        across shadow DOM boundaries will be implemented by separate patches. DOMSelection will not expose this new
        behavior either. This is tracked in the spec as https://github.com/w3c/webcomponents/issues/79

        Tests: editing/selection/selection-across-shadow-boundaries-mixed-editability-1.html
               editing/selection/selection-across-shadow-boundaries-mixed-editability-2.html
               editing/selection/selection-across-shadow-boundaries-mixed-editability-3.html
               editing/selection/selection-across-shadow-boundaries-mixed-editability-4.html
               editing/selection/selection-across-shadow-boundaries-mixed-editability-5.html
               editing/selection/selection-across-shadow-boundaries-readonly-1.html
               editing/selection/selection-across-shadow-boundaries-readonly-2.html
               editing/selection/selection-across-shadow-boundaries-readonly-3.html
               editing/selection/selection-across-shadow-boundaries-user-select-all-1.html

        * editing/VisibleSelection.cpp:
        (WebCore::isInUserAgentShadowRootOrHasEditableShadowAncestor): Added.
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingShadowBoundaries): When the feature is enabled,
        allow crossing shadow DOM boundaries except when either end is inside an user agent shadow root, or one of
        its shadow includign ancestor is inside an editable region. The latter check is needed to disallow
        an extension of a selection starting in a shadow tree inside a non-editable region inside an editable region
        to outside the editable region. The rest of the editing code is not ready to deal with selection like that.
        * page/Settings.yaml: Added an internal debug feature to enable this new behavior.

2018-09-26  Chris Dumez  <cdumez@apple.com>

        Ignore-opens-during-unload counter of a parent should apply to its children during beforeunload event
        https://bugs.webkit.org/show_bug.cgi?id=189376
        <rdar://problem/44282754>

        Reviewed by Ryosuke Niwa.

        Make sure the Ignore-opens-during-unload counter of a parent stays incremented while we are firing the
        beforeunload event for its descendants, as per:
        - https://html.spec.whatwg.org/multipage/browsing-the-web.html#prompt-to-unload-a-document

        No new tests, rebaselined existing tests.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldClose):
        (WebCore::FrameLoader::dispatchBeforeUnloadEvent):

2018-09-26  Justin Fan  <justin_fan@apple.com>

        WebGL 2: Adding logging to in-progress features
        https://bugs.webkit.org/show_bug.cgi?id=189978

        Reviewed by Jon Lee.

        Logging will allow us to better identify the most in-demand WebGL 2 features and prioritize our efforts.

        No tests as no change in WebGL functionality.

        * html/canvas/WebGL2RenderingContext.cpp: Added logging statement to every function not yet implemented.
        (WebCore::WebGL2RenderingContext::blitFramebuffer):
        (WebCore::WebGL2RenderingContext::framebufferTextureLayer):
        (WebCore::WebGL2RenderingContext::invalidateFramebuffer):
        (WebCore::WebGL2RenderingContext::invalidateSubFramebuffer):
        (WebCore::WebGL2RenderingContext::readBuffer):
        (WebCore::WebGL2RenderingContext::texStorage3D):
        (WebCore::WebGL2RenderingContext::texImage2D):
        (WebCore::WebGL2RenderingContext::texImage3D):
        (WebCore::WebGL2RenderingContext::texSubImage2D):
        (WebCore::WebGL2RenderingContext::texSubImage3D):
        (WebCore::WebGL2RenderingContext::copyTexSubImage3D):
        (WebCore::WebGL2RenderingContext::compressedTexImage2D):
        (WebCore::WebGL2RenderingContext::compressedTexImage3D):
        (WebCore::WebGL2RenderingContext::compressedTexSubImage3D):
        (WebCore::WebGL2RenderingContext::getFragDataLocation):
        (WebCore::WebGL2RenderingContext::uniform1ui):
        (WebCore::WebGL2RenderingContext::uniform2ui):
        (WebCore::WebGL2RenderingContext::uniform3ui):
        (WebCore::WebGL2RenderingContext::uniform4ui):
        (WebCore::WebGL2RenderingContext::uniform1uiv):
        (WebCore::WebGL2RenderingContext::uniform2uiv):
        (WebCore::WebGL2RenderingContext::uniform3uiv):
        (WebCore::WebGL2RenderingContext::uniform4uiv):
        (WebCore::WebGL2RenderingContext::uniformMatrix2x3fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix3x2fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix2x4fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix4x2fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix3x4fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix4x3fv):
        (WebCore::WebGL2RenderingContext::vertexAttribI4i):
        (WebCore::WebGL2RenderingContext::vertexAttribI4iv):
        (WebCore::WebGL2RenderingContext::vertexAttribI4ui):
        (WebCore::WebGL2RenderingContext::vertexAttribI4uiv):
        (WebCore::WebGL2RenderingContext::vertexAttribIPointer):
        (WebCore::WebGL2RenderingContext::drawRangeElements):
        (WebCore::WebGL2RenderingContext::createQuery):
        (WebCore::WebGL2RenderingContext::deleteQuery):
        (WebCore::WebGL2RenderingContext::isQuery):
        (WebCore::WebGL2RenderingContext::beginQuery):
        (WebCore::WebGL2RenderingContext::endQuery):
        (WebCore::WebGL2RenderingContext::getQuery):
        (WebCore::WebGL2RenderingContext::getQueryParameter):
        (WebCore::WebGL2RenderingContext::createSampler):
        (WebCore::WebGL2RenderingContext::deleteSampler):
        (WebCore::WebGL2RenderingContext::isSampler):
        (WebCore::WebGL2RenderingContext::bindSampler):
        (WebCore::WebGL2RenderingContext::samplerParameteri):
        (WebCore::WebGL2RenderingContext::samplerParameterf):
        (WebCore::WebGL2RenderingContext::getSamplerParameter):
        (WebCore::WebGL2RenderingContext::fenceSync):
        (WebCore::WebGL2RenderingContext::isSync):
        (WebCore::WebGL2RenderingContext::deleteSync):
        (WebCore::WebGL2RenderingContext::clientWaitSync):
        (WebCore::WebGL2RenderingContext::waitSync):
        (WebCore::WebGL2RenderingContext::getSyncParameter):
        (WebCore::WebGL2RenderingContext::createTransformFeedback):
        (WebCore::WebGL2RenderingContext::deleteTransformFeedback):
        (WebCore::WebGL2RenderingContext::isTransformFeedback):
        (WebCore::WebGL2RenderingContext::bindTransformFeedback):
        (WebCore::WebGL2RenderingContext::beginTransformFeedback):
        (WebCore::WebGL2RenderingContext::endTransformFeedback):
        (WebCore::WebGL2RenderingContext::transformFeedbackVaryings):
        (WebCore::WebGL2RenderingContext::getTransformFeedbackVarying):
        (WebCore::WebGL2RenderingContext::pauseTransformFeedback):
        (WebCore::WebGL2RenderingContext::resumeTransformFeedback):
        (WebCore::WebGL2RenderingContext::bindBufferBase):
        (WebCore::WebGL2RenderingContext::bindBufferRange):
        (WebCore::WebGL2RenderingContext::getUniformIndices):
        (WebCore::WebGL2RenderingContext::getUniformBlockIndex):
        (WebCore::WebGL2RenderingContext::getActiveUniformBlockParameter):
        (WebCore::WebGL2RenderingContext::getActiveUniformBlockName):
        (WebCore::WebGL2RenderingContext::uniformBlockBinding):

2018-09-26  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Clean up RealtimeMediaSource settings change handling
        https://bugs.webkit.org/show_bug.cgi?id=189998
        <rdar://problem/44797884>

        Reviewed by Youenn Fablet.

        No new tests, no change in functionality.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::notifySettingsDidChangeObservers):
        (WebCore::RealtimeMediaSource::setSize):
        (WebCore::RealtimeMediaSource::setFrameRate):
        (WebCore::RealtimeMediaSource::setAspectRatio):
        (WebCore::RealtimeMediaSource::setFacingMode):
        (WebCore::RealtimeMediaSource::setVolume):
        (WebCore::RealtimeMediaSource::setSampleRate):
        (WebCore::RealtimeMediaSource::setSampleSize):
        (WebCore::RealtimeMediaSource::setEchoCancellation):
        (WebCore::RealtimeMediaSource::settingsDidChange): Deleted.
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::settingsDidChange):
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::settingsDidChange):
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        (WebCore::DisplayCaptureSourceCocoa::settingsDidChange):
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::settingsDidChange):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::settingsDidChange):

2018-09-26  Antoine Quint  <graouts@apple.com>

        [Web Animations] Ensure renderers with accelerated animations have layers
        https://bugs.webkit.org/show_bug.cgi?id=189990
        <rdar://problem/44791222>

        Reviewed by Zalan Bujtas.

        We have done some work already in webkit.org/b/189784 to prevent never-ending calls to DocumentTimeline::updateAnimations(). This was due to
        the change made for webkit.org/b/186930 where we queued calls to updateAnimations() in KeyframeEffectReadOnly::applyPendingAcceleratedActions()
        while we were waiting for a renderer with a layer backing for a given animation target. Instead of doing this, we now ensure renderers always
        have a layer when they have an accelerated animation applied.

        No new tests, this is already covered by webanimations/accelerated-animation-with-delay.html and webanimations/opacity-animation-yields-compositing-span.html
        which respectively check that we can apply an accelerated animation to a non-positioned block and an inline element.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::runningAnimationsForElementAreAllAccelerated const): This method should have been marked const all along and it is
        now required so it can be called through RenderBox::requiresLayer() and RenderInline::requiresLayer().
        (WebCore::DocumentTimeline::runningAnimationsForElementAreAllAccelerated): Deleted.
        * animation/DocumentTimeline.h:
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::applyPendingAcceleratedActions): Stop enqueuing the accelerated actions in case we're lacking a composited renderer
        since this situation should no longer arise.
        * rendering/RenderBox.h: Make requiresLayer() return true if this renderer's element is the target of accelerated animations.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::hasRunningAcceleratedAnimations const): Query the document timeline, if it exists, to check that this renderer's element
        has accelerated animations applied.
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderInline.h: Make requiresLayer() return true if this renderer's element is the target of accelerated animations.

2018-09-25  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Add Mac window capture source
        https://bugs.webkit.org/show_bug.cgi?id=189958
        <rdar://problem/44767616>

        Reviewed by Youenn Fablet.

        * SourcesCocoa.txt: Add WindowDisplayCaptureSourceMac.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:
        (WebCore::DisplayCaptureManagerCocoa::captureDevices): Include window "devices".
        (WebCore::DisplayCaptureManagerCocoa::updateWindowCaptureDevices): New.
        (WebCore::DisplayCaptureManagerCocoa::windowCaptureDeviceWithPersistentID): New.
        (WebCore::DisplayCaptureManagerCocoa::captureDeviceWithPersistentID): Include window devices.
        * platform/mediastream/mac/DisplayCaptureManagerCocoa.h:

        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        (WebCore::DisplayCaptureSourceCocoa::DisplayCaptureSourceCocoa):
        (WebCore::DisplayCaptureSourceCocoa::settings): Use frameSize, report surface type and 
        logical surface.
        (WebCore::DisplayCaptureSourceCocoa::settingsDidChange): Clear m_lastSampleBuffer when size changes.
        (WebCore::DisplayCaptureSourceCocoa::frameSize const): New, return size() or intrinsic size.
        (WebCore::DisplayCaptureSourceCocoa::setIntrinsicSize): New.
        (WebCore::DisplayCaptureSourceCocoa::emitFrame): generateFrame now returns a CVPixelBuffer
        so derived classes don't have to deal with resizing/transforming.
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.h:

        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:

        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
        (WebCore::ScreenDisplayCaptureSourceMac::ScreenDisplayCaptureSourceMac): Add fixme.
        (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream): Update intrinsic size when
        width/height changes.
        (WebCore::ScreenDisplayCaptureSourceMac::generateFrame): Return a CVPixelBuffer.

        * platform/mediastream/mac/WindowDisplayCaptureSourceMac.h: Added.
        * platform/mediastream/mac/WindowDisplayCaptureSourceMac.mm: Added.
        (WebCore::anyOfCGWindow):
        (WebCore::windowDescription):
        (WebCore::WindowDisplayCaptureSourceMac::create):
        (WebCore::WindowDisplayCaptureSourceMac::WindowDisplayCaptureSourceMac):
        (WebCore::WindowDisplayCaptureSourceMac::windowImage):
        (WebCore::WindowDisplayCaptureSourceMac::generateFrame):
        (WebCore::WindowDisplayCaptureSourceMac::pixelBufferFromCGImage):
        (WebCore::WindowDisplayCaptureSourceMac::windowCaptureDeviceWithPersistentID):
        (WebCore::WindowDisplayCaptureSourceMac::windowCaptureDevices):

2018-09-25  Justin Fan  <justin_fan@apple.com>

        WebGL 2 Conformance: primitive restart and draw_primitive_restart WebGL2 sample
        https://bugs.webkit.org/show_bug.cgi?id=189625
        <rdar://problem/42882620>

        Reviewed by Dean Jackson.

        Ref test: webgl/webgl2-primitive-restart.html.

        Implement support for Primitive Restart Fixed Index as expected 
        by the WebGL 2 specifications. 

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::validateIndexArrayConservative):
        * html/canvas/WebGLRenderingContextBase.h:
        (WebCore::WebGLRenderingContextBase::getLastIndex): Template that must be defined in header.
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateIndexArrayPrecise):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::primitiveRestartIndex):

2018-09-25  John Wilander  <wilander@apple.com>

        Change from HAVE(CFNETWORK_STORAGE_PARTITIONING) to ENABLE(RESOURCE_LOAD_STATISTICS)
        https://bugs.webkit.org/show_bug.cgi?id=189959
        <rdar://problem/44767642>

        Reviewed by Chris Dumez.

        No new tests because of no code change.

        We no longer make use of CFNetwork's cookie partitioning so we should
        change the compile-time flag to something that makes sense. This should
        also make it easier/cleaner for other ports.

        * dom/Document.cpp:
        (WebCore::Document::hasStorageAccess):
        (WebCore::Document::requestStorageAccess):
        (WebCore::Document::setHasRequestedPageSpecificStorageAccessWithUserInteraction):
        * dom/Document.h:
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        (WebCore::ResourceLoadObserver::logWindowCreation):
        * loader/ResourceLoadObserver.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::cookiesForURL):
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):

2018-09-25  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Make AuthenticatorManager
        https://bugs.webkit.org/show_bug.cgi?id=189279
        <rdar://problem/44116792>

        Reviewed by Chris Dumez.

        This patch does the following things in WebCore in order to support AuthenticatorManager:
        1) It separates AuthenticatorTransport from PublicKeyCredentialDescriptor such that the enum
        can be queried from WebKit directly.
        2) It adds AuthenticatorAttachment to PublicKeyCredentialCreationOptions such that relying parties
        could express their interests in cross platform authenticators.
        3) It enhances IPC encoder/decoder of a few such that Vectors and empty objects can be correctly coded.
        4) It moves the LocalAuthenticator implementation to WebKit to better integrate with AuthenticatorManager.
        5) It moves linking to LocalAuthentication.framework to WebKit as well.
        6) It temporarily bans old mock test mechanism in Internals so we could enable the new mock test mechanism in
        WebKitTestRunner which we will have a better coverage of codes in UI Process. Those tests will be either
        removed or ported to the new mechanism in Bug 189283.
        7) It also removes "using namespace WebCore" from the top namespace in some .mm files as they are reordered
        to where they could introduce name confusions.

        Tests: http/wpt/webauthn/public-key-credential-create-failure-local.https.html
               http/wpt/webauthn/public-key-credential-create-success-local.https.html
               http/wpt/webauthn/public-key-credential-get-failure-local.https.html
               http/wpt/webauthn/public-key-credential-get-success-local.https.html
               http/wpt/webauthn/public-key-credential-is-user-verifying-platform-authenticator-available.html

        * CMakeLists.txt:
        * Configurations/WebCore.xcconfig:
        * DerivedSources.make:
        * Modules/webauthn/AuthenticatorTransport.h: Copied from Source/WebCore/platform/cocoa/LocalAuthenticationSoftLink.h.
        * Modules/webauthn/AuthenticatorTransport.idl: Copied from Source/WebCore/Modules/webauthn/PublicKeyCredentialDescriptor.idl.
        * Modules/webauthn/PublicKeyCredentialCreationOptions.h:
        (WebCore::PublicKeyCredentialCreationOptions::encode const):
        (WebCore::PublicKeyCredentialCreationOptions::decode):
        * Modules/webauthn/PublicKeyCredentialCreationOptions.idl:
        * Modules/webauthn/PublicKeyCredentialData.h:
        (WebCore::PublicKeyCredentialData::encode const):
        (WebCore::PublicKeyCredentialData::decode):
        * Modules/webauthn/PublicKeyCredentialDescriptor.h:
        (WebCore::PublicKeyCredentialDescriptor::encode const):
        * Modules/webauthn/PublicKeyCredentialDescriptor.idl:
        * Modules/webauthn/cocoa/LocalAuthenticator.mm: Removed.
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ExceptionData.h:
        * platform/cocoa/LocalAuthenticationSoftLink.mm: Removed.
        * platform/cocoa/SharedBufferCocoa.mm:
        (-[WebCoreSharedBufferData initWithSharedBufferDataSegment:]):
        * platform/cocoa/VideoFullscreenModelVideoElement.mm:
        (VideoFullscreenModelVideoElement::VideoFullscreenModelVideoElement): Deleted.
        (VideoFullscreenModelVideoElement::~VideoFullscreenModelVideoElement): Deleted.
        (VideoFullscreenModelVideoElement::setVideoElement): Deleted.
        (VideoFullscreenModelVideoElement::handleEvent): Deleted.
        (VideoFullscreenModelVideoElement::updateForEventName): Deleted.
        (VideoFullscreenModelVideoElement::willExitFullscreen): Deleted.
        (VideoFullscreenModelVideoElement::setVideoFullscreenLayer): Deleted.
        (VideoFullscreenModelVideoElement::waitForPreparedForInlineThen): Deleted.
        (VideoFullscreenModelVideoElement::requestFullscreenMode): Deleted.
        (VideoFullscreenModelVideoElement::setVideoLayerFrame): Deleted.
        (VideoFullscreenModelVideoElement::setVideoLayerGravity): Deleted.
        (VideoFullscreenModelVideoElement::observedEventNames): Deleted.
        (VideoFullscreenModelVideoElement::eventNameAll): Deleted.
        (VideoFullscreenModelVideoElement::fullscreenModeChanged): Deleted.
        (VideoFullscreenModelVideoElement::addClient): Deleted.
        (VideoFullscreenModelVideoElement::removeClient): Deleted.
        (VideoFullscreenModelVideoElement::isVisible const): Deleted.
        (VideoFullscreenModelVideoElement::setHasVideo): Deleted.
        (VideoFullscreenModelVideoElement::setVideoDimensions): Deleted.
        (VideoFullscreenModelVideoElement::willEnterPictureInPicture): Deleted.
        (VideoFullscreenModelVideoElement::didEnterPictureInPicture): Deleted.
        (VideoFullscreenModelVideoElement::failedToEnterPictureInPicture): Deleted.
        (VideoFullscreenModelVideoElement::willExitPictureInPicture): Deleted.
        (VideoFullscreenModelVideoElement::didExitPictureInPicture): Deleted.
        * platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:
        (WebCore::hasExplicitBeginTime):
        (WebCore::setHasExplicitBeginTime):
        (WebCore::toCAFillModeType):
        (WebCore::toCAValueFunctionType):
        (WebCore::toCAMediaTimingFunction):
        (WebCore::PlatformCAAnimationCocoa::setFromValue):
        (WebCore::PlatformCAAnimationCocoa::setToValue):
        (WebCore::PlatformCAAnimationCocoa::setValues):
        (fromCAFillModeType): Deleted.
        (fromCAValueFunctionType): Deleted.
        (PlatformCAAnimationCocoa::create): Deleted.
        (PlatformCAAnimationCocoa::PlatformCAAnimationCocoa): Deleted.
        (PlatformCAAnimationCocoa::~PlatformCAAnimationCocoa): Deleted.
        (PlatformCAAnimationCocoa::copy const): Deleted.
        (PlatformCAAnimationCocoa::platformAnimation const): Deleted.
        (PlatformCAAnimationCocoa::keyPath const): Deleted.
        (PlatformCAAnimationCocoa::beginTime const): Deleted.
        (PlatformCAAnimationCocoa::setBeginTime): Deleted.
        (PlatformCAAnimationCocoa::duration const): Deleted.
        (PlatformCAAnimationCocoa::setDuration): Deleted.
        (PlatformCAAnimationCocoa::speed const): Deleted.
        (PlatformCAAnimationCocoa::setSpeed): Deleted.
        (PlatformCAAnimationCocoa::timeOffset const): Deleted.
        (PlatformCAAnimationCocoa::setTimeOffset): Deleted.
        (PlatformCAAnimationCocoa::repeatCount const): Deleted.
        (PlatformCAAnimationCocoa::setRepeatCount): Deleted.
        (PlatformCAAnimationCocoa::autoreverses const): Deleted.
        (PlatformCAAnimationCocoa::setAutoreverses): Deleted.
        (PlatformCAAnimationCocoa::fillMode const): Deleted.
        (PlatformCAAnimationCocoa::setFillMode): Deleted.
        (PlatformCAAnimationCocoa::setTimingFunction): Deleted.
        (PlatformCAAnimationCocoa::copyTimingFunctionFrom): Deleted.
        (PlatformCAAnimationCocoa::isRemovedOnCompletion const): Deleted.
        (PlatformCAAnimationCocoa::setRemovedOnCompletion): Deleted.
        (PlatformCAAnimationCocoa::isAdditive const): Deleted.
        (PlatformCAAnimationCocoa::setAdditive): Deleted.
        (PlatformCAAnimationCocoa::valueFunction const): Deleted.
        (PlatformCAAnimationCocoa::setValueFunction): Deleted.
        (PlatformCAAnimationCocoa::setFromValue): Deleted.
        (PlatformCAAnimationCocoa::copyFromValueFrom): Deleted.
        (PlatformCAAnimationCocoa::setToValue): Deleted.
        (PlatformCAAnimationCocoa::copyToValueFrom): Deleted.
        (PlatformCAAnimationCocoa::setValues): Deleted.
        (PlatformCAAnimationCocoa::copyValuesFrom): Deleted.
        (PlatformCAAnimationCocoa::setKeyTimes): Deleted.
        (PlatformCAAnimationCocoa::copyKeyTimesFrom): Deleted.
        (PlatformCAAnimationCocoa::setTimingFunctions): Deleted.
        (PlatformCAAnimationCocoa::copyTimingFunctionsFrom): Deleted.
        * platform/graphics/ca/cocoa/PlatformCAFiltersCocoa.mm:
        (PlatformCAFilters::filterValueForOperation): Deleted.
        (PlatformCAFilters::colorMatrixValueForFilter): Deleted.
        (PlatformCAFilters::setBlendingFiltersOnLayer): Deleted.
        (PlatformCAFilters::numAnimatedFilterProperties): Deleted.
        (PlatformCAFilters::animatedFilterPropertyName): Deleted.
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (-[WebAnimationDelegate animationDidStart:]):
        (-[WebAnimationDelegate animationDidStop:finished:]):
        (-[WebAnimationDelegate setOwner:]):
        (PlatformCALayerCocoa::create): Deleted.
        (PlatformCALayer::platformCALayer): Deleted.
        (mediaTimeToCurrentTime): Deleted.
        (PlatformCALayerCocoa::setOwner): Deleted.
        (toCAFilterType): Deleted.
        (PlatformCALayerCocoa::layerTypeForPlatformLayer): Deleted.
        (PlatformCALayerCocoa::PlatformCALayerCocoa): Deleted.
        (PlatformCALayerCocoa::commonInit): Deleted.
        (PlatformCALayerCocoa::clone const): Deleted.
        (PlatformCALayerCocoa::~PlatformCALayerCocoa): Deleted.
        (PlatformCALayerCocoa::animationStarted): Deleted.
        (PlatformCALayerCocoa::animationEnded): Deleted.
        (PlatformCALayerCocoa::setNeedsDisplay): Deleted.
        (PlatformCALayerCocoa::setNeedsDisplayInRect): Deleted.
        (PlatformCALayerCocoa::copyContentsFromLayer): Deleted.
        (PlatformCALayerCocoa::superlayer const): Deleted.
        (PlatformCALayerCocoa::removeFromSuperlayer): Deleted.
        (PlatformCALayerCocoa::setSublayers): Deleted.
        (PlatformCALayerCocoa::removeAllSublayers): Deleted.
        (PlatformCALayerCocoa::appendSublayer): Deleted.
        (PlatformCALayerCocoa::insertSublayer): Deleted.
        (PlatformCALayerCocoa::replaceSublayer): Deleted.
        (PlatformCALayerCocoa::adoptSublayers): Deleted.
        (PlatformCALayerCocoa::addAnimationForKey): Deleted.
        (PlatformCALayerCocoa::removeAnimationForKey): Deleted.
        (PlatformCALayerCocoa::animationForKey): Deleted.
        (PlatformCALayerCocoa::setMask): Deleted.
        (PlatformCALayerCocoa::isOpaque const): Deleted.
        (PlatformCALayerCocoa::setOpaque): Deleted.
        (PlatformCALayerCocoa::bounds const): Deleted.
        (PlatformCALayerCocoa::setBounds): Deleted.
        (PlatformCALayerCocoa::position const): Deleted.
        (PlatformCALayerCocoa::setPosition): Deleted.
        (PlatformCALayerCocoa::anchorPoint const): Deleted.
        (PlatformCALayerCocoa::setAnchorPoint): Deleted.
        (PlatformCALayerCocoa::transform const): Deleted.
        (PlatformCALayerCocoa::setTransform): Deleted.
        (PlatformCALayerCocoa::sublayerTransform const): Deleted.
        (PlatformCALayerCocoa::setSublayerTransform): Deleted.
        (PlatformCALayerCocoa::isHidden const): Deleted.
        (PlatformCALayerCocoa::setHidden): Deleted.
        (PlatformCALayerCocoa::contentsHidden const): Deleted.
        (PlatformCALayerCocoa::setContentsHidden): Deleted.
        (PlatformCALayerCocoa::userInteractionEnabled const): Deleted.
        (PlatformCALayerCocoa::setUserInteractionEnabled): Deleted.
        (PlatformCALayerCocoa::setBackingStoreAttached): Deleted.
        (PlatformCALayerCocoa::backingStoreAttached const): Deleted.
        (PlatformCALayerCocoa::geometryFlipped const): Deleted.
        (PlatformCALayerCocoa::setGeometryFlipped): Deleted.
        (PlatformCALayerCocoa::isDoubleSided const): Deleted.
        (PlatformCALayerCocoa::setDoubleSided): Deleted.
        (PlatformCALayerCocoa::masksToBounds const): Deleted.
        (PlatformCALayerCocoa::setMasksToBounds): Deleted.
        (PlatformCALayerCocoa::acceleratesDrawing const): Deleted.
        (PlatformCALayerCocoa::setAcceleratesDrawing): Deleted.
        (PlatformCALayerCocoa::wantsDeepColorBackingStore const): Deleted.
        (PlatformCALayerCocoa::setWantsDeepColorBackingStore): Deleted.
        (PlatformCALayerCocoa::supportsSubpixelAntialiasedText const): Deleted.
        (PlatformCALayerCocoa::setSupportsSubpixelAntialiasedText): Deleted.
        (PlatformCALayerCocoa::hasContents const): Deleted.
        (PlatformCALayerCocoa::contents const): Deleted.
        (PlatformCALayerCocoa::setContents): Deleted.
        (PlatformCALayerCocoa::setContentsRect): Deleted.
        (PlatformCALayerCocoa::setMinificationFilter): Deleted.
        (PlatformCALayerCocoa::setMagnificationFilter): Deleted.
        (PlatformCALayerCocoa::backgroundColor const): Deleted.
        (PlatformCALayerCocoa::setBackgroundColor): Deleted.
        (PlatformCALayerCocoa::setBorderWidth): Deleted.
        (PlatformCALayerCocoa::setBorderColor): Deleted.
        (PlatformCALayerCocoa::opacity const): Deleted.
        (PlatformCALayerCocoa::setOpacity): Deleted.
        (PlatformCALayerCocoa::setFilters): Deleted.
        (PlatformCALayerCocoa::copyFiltersFrom): Deleted.
        (PlatformCALayerCocoa::filtersCanBeComposited): Deleted.
        (PlatformCALayerCocoa::setBlendMode): Deleted.
        (PlatformCALayerCocoa::setName): Deleted.
        (PlatformCALayerCocoa::setSpeed): Deleted.
        (PlatformCALayerCocoa::setTimeOffset): Deleted.
        (PlatformCALayerCocoa::contentsScale const): Deleted.
        (PlatformCALayerCocoa::setContentsScale): Deleted.
        (PlatformCALayerCocoa::cornerRadius const): Deleted.
        (PlatformCALayerCocoa::setCornerRadius): Deleted.
        (PlatformCALayerCocoa::setEdgeAntialiasingMask): Deleted.
        (PlatformCALayerCocoa::shapeRoundedRect const): Deleted.
        (PlatformCALayerCocoa::setShapeRoundedRect): Deleted.
        (PlatformCALayerCocoa::shapeWindRule const): Deleted.
        (PlatformCALayerCocoa::setShapeWindRule): Deleted.
        (PlatformCALayerCocoa::shapePath const): Deleted.
        (PlatformCALayerCocoa::setShapePath): Deleted.
        (PlatformCALayerCocoa::requiresCustomAppearanceUpdateOnBoundsChange const): Deleted.
        (PlatformCALayerCocoa::updateCustomAppearance): Deleted.
        (layerContentsFormat): Deleted.
        (PlatformCALayerCocoa::updateContentsFormat): Deleted.
        (PlatformCALayerCocoa::tiledBacking): Deleted.
        (PlatformCALayer::isWebLayer): Deleted.
        (PlatformCALayer::setBoundsOnMainThread): Deleted.
        (PlatformCALayer::setPositionOnMainThread): Deleted.
        (PlatformCALayer::setAnchorPointOnMainThread): Deleted.
        (PlatformCALayer::collectRectsToPaint): Deleted.
        (PlatformCALayer::drawLayerContents): Deleted.
        (PlatformCALayer::frameForLayer): Deleted.
        (PlatformCALayerCocoa::createCompatibleLayer const): Deleted.
        (PlatformCALayerCocoa::enumerateRectsBeingDrawn): Deleted.
        (PlatformCALayerCocoa::backingStoreBytesPerPixel const): Deleted.
        (PlatformCALayerCocoa::avPlayerLayer const): Deleted.
        * platform/graphics/ca/cocoa/WebSystemBackdropLayer.mm:
        (-[WebLightSystemBackdropLayer init]):
        (-[WebDarkSystemBackdropLayer init]):
        * platform/graphics/ca/cocoa/WebTiledBackingLayer.mm:
        (-[WebTiledBackingLayer createTileController:]):
        (-[WebTiledBackingLayer setNeedsDisplayInRect:]):
        (-[WebTiledBackingLayer setBorderColor:]):
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):

2018-09-25  YUHAN WU  <yuhan_wu@apple.com>

        Implement MediaStreamTrack Content Hints
        https://bugs.webkit.org/show_bug.cgi?id=189262
        <rdar://problem/44101773>

        Reviewed by Youenn Fablet.

        contentHint is a new attribute which is stored in MediaStreamTrackPrivate.
        https://w3c.github.io/mst-content-hint/

        Covered by tests: 
        LayoutTests/imported/w3c/web-platform-tests/mst-content-hint/MediaStreamTrack-contentHint.html
        LayoutTests/imported/w3c/web-platform-tests/mst-content-hint/idlharness.window.html

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::contentHint const):
        (WebCore::MediaStreamTrack::setContentHint):
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/MediaStreamTrack.idl:
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::setContentHint):
        (WebCore::MediaStreamTrackPrivate::clone):
        * platform/mediastream/MediaStreamTrackPrivate.h:
        (WebCore::MediaStreamTrackPrivate::contentHint):

2018-09-25  Alex Christensen  <achristensen@webkit.org>

        Allow for suffixes to com.apple.WebKit.WebContent
        https://bugs.webkit.org/show_bug.cgi?id=189972

        Reviewed by Chris Dumez.

        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::isInWebProcess):

2018-09-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Fix the open source iOS 12 build after r236445
        https://bugs.webkit.org/show_bug.cgi?id=189953

        Reviewed by Alex Christensen.

        Remove soft-linking macros from several sources in WebCore, and instead import UIKitSoftLink from PAL. This
        allows different WebCore sources to soft-link UIKit (and its classes and symbols) without reimplementing
        WebCore::UIKitLibrary.

        * editing/cocoa/FontAttributesCocoa.mm:
        * editing/cocoa/FontShadowCocoa.mm:
        (WebCore::FontShadow::createShadow const):
        * platform/graphics/cocoa/ColorCocoa.mm:
        (WebCore::platformColor):
        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::screenIsMonochrome):
        (WebCore::screenHasInvertedColors):
        (WebCore::screenSize):
        (WebCore::availableScreenSize):
        (WebCore::screenScaleFactor):

2018-09-25  Thibault Saunier  <tsaunier@igalia.com>

        [WPE][GTK][WebRTC] Fixup VP8 encoding support
        https://bugs.webkit.org/show_bug.cgi?id=189921

        Previous leak fixing commit introduced a regression in
        the way the encoded buffer were prepared in the default
        GStreamerVideoEncoder::Fragmentize implementation (when
        encoding with VP8 basically).

        + Fix a build warning in the decoder.
        + Fix some wrong object members namings.
        + Properly move the caps reference when setting restriction caps.
        + Do not raise a GStreamer error when GStreamerVideoEncoder::OnEncodedImage
          fails - this might be a network issue and other encoders do not consider that
          fatal.
        + Use GstMappedBuffer where appropriate.

        Reviewed by Philippe Normand.

        * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::InitEncode):
        (WebCore::GStreamerVideoEncoder::newSampleCallback):
        (WebCore::GStreamerVideoEncoder::Fragmentize):
        (WebCore::GStreamerVideoEncoder::SetRestrictionCaps):

2018-09-25  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Update constraints supported by getDisplayMedia
        https://bugs.webkit.org/show_bug.cgi?id=189930

        Reviewed by Youenn Fablet.

        No new tests, updated http/tests/media/media-stream/get-display-media-prompt.html.

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::getDisplayMedia const): Ignore audio constraints.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::hasInvalidGetDisplayMediaConstraint): Check for invalid constraints.
        (WebCore::UserMediaRequest::start): Check for invalid constraints.
        (WebCore::UserMediaRequest::deny): Support new error.
        * Modules/mediastream/UserMediaRequest.h:

        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::validateRequestConstraints):

2018-09-25  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [EME] Fix variable name that should have gone in r236317
        https://bugs.webkit.org/show_bug.cgi?id=189944

        Reviewed by Jer Noble.

        m_cdmInstanceClientWeakPtrFactory becomes
        m_cdmInstanceSessionClientWeakPtrFactory as its type changes to
        CDMInstanceSessionClient.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::MediaKeySession):
        * Modules/encryptedmedia/MediaKeySession.h:

2018-09-25  Simon Fraser  <simon.fraser@apple.com>

        Clean up code around RenderLayer's "has accelerated scrolling" functions
        https://bugs.webkit.org/show_bug.cgi?id=189932

        Reviewed by Zalan Bujtas.
        
        RenderLayer had:
        
        bool hasAcceleratedTouchScrolling()
        bool hasTouchScrollableOverflow()
        bool usesAcceleratedScrolling()
        bool usesCompositedScrolling()
        bool usesAsyncScrolling()
        
        which are hard to keep in your head. Removed usesAcceleratedScrolling() since it just returns hasTouchScrollableOverflow().
        Renamed hasAcceleratedTouchScrolling() to canUseAcceleratedTouchScrolling() to indicate that it just looks at style,
        not whether layout has given the layer scrollable overflow yet. Tidy up some #ifdefs.
        
        usesCompositedScrolling() and usesAsyncScrolling() are ScrollableArea overrides, and
        look at backing layers, so require that compositing has run already. Note this in comments.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::canUseAcceleratedTouchScrolling const):
        (WebCore::RenderLayer::hasTouchScrollableOverflow const):
        (WebCore::RenderLayer::handleTouchEvent):
        (WebCore::RenderLayer::usesAsyncScrolling const):
        (WebCore::RenderLayer::showsOverflowControls const):
        (WebCore::RenderLayer::calculateClipRects const):
        (WebCore::RenderLayer::hasAcceleratedTouchScrolling const): Deleted.
        (WebCore::RenderLayer::usesAcceleratedScrolling const): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::layerOrAncestorIsTransformedOrUsingCompositedScrolling):
        (WebCore::RenderLayerBacking::updateConfiguration):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::useCoordinatedScrollingForLayer const):
        (WebCore::RenderLayerCompositor::requiresCompositingForOverflowScrolling const):

2018-09-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        Rename WTF_COMPILER_GCC_OR_CLANG to WTF_COMPILER_GCC_COMPATIBLE
        https://bugs.webkit.org/show_bug.cgi?id=189733

        Reviewed by Michael Catanzaro.

        No new tests (No behavior change).

        * platform/graphics/cpu/arm/filters/FELightingNEON.cpp:
        * platform/graphics/cpu/arm/filters/FELightingNEON.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApply):
        * platform/graphics/filters/FELighting.h:

2018-09-24  John Wilander  <wilander@apple.com>

        Cap lifetime of persistent cookies created client-side through document.cookie
        https://bugs.webkit.org/show_bug.cgi?id=189933
        <rdar://problem/44741888>

        Reviewed by Chris Dumez.

        Test: http/tests/cookies/capped-lifetime-for-cookie-set-in-js.html

        As pointed out in https://github.com/mikewest/http-state-tokens:

        1) Cookies are available to JavaScript by default via document.cookie, which
        enables a smooth upgrade from one-time XSS to theft of persistent credentials
        and also makes cookies available to Spectre-like attacks on memory.

        2) Though the HttpOnly attribute was introduced well over a decade ago, only
        ~8.31% of Set-Cookie operations use it today (stats from Chrome). We need
        developer incentives to put proper protections in place.

        3) The median (uncompressed) Cookie request header is 409 bytes, while the 90th
        percentile is 1,589 bytes, the 95th 2,549 bytes, the 99th 4,601 bytes, and
        ~0.1% of Cookie headers are over 10kB (stats from Chrome). This is bad for load
        performance.

        In addition to this, third-party scripts running in first-party contexts can
        read user data through document.cookie and even store cross-site tracking data
        in them.

        Authentication cookies should be HttpOnly and thus not be affected by
        restrictions to document.cookie. Cookies that persist for a long time should
        be Secure, HttpOnly, and SameSite to provide good security and privacy.

        By capping the lifetime of persistent cookies set through document.cookie we
        embark on a journey towards better cookie management on the web.

        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::filterCookies):
            Now caps the life time of persistent cookies to one week (seven days).
        * testing/Internals.cpp:
        (WebCore::Internals::getCookies const):
            New test function to get to cookie meta data such as expiry.
        * testing/Internals.h:
        * testing/Internals.idl:

2018-09-24  Simon Fraser  <simon.fraser@apple.com>

        Remove filterRes parameter from SVG filters
        https://bugs.webkit.org/show_bug.cgi?id=129565
        <rdar://problem/44714340>

        Reviewed by Dean Jackson.
        
        Remove support for the "filterRes" attribute on SVG filters. It's marked as
        deprecated in https://drafts.fxtf.org/filter-effects/#element-attrdef-filter-filterres
        and no longer supported by Chrome or Firefox.
        
        Removed existing filterRes tests, added new test checking that it has no effect.

        Tests: svg/filters/filterRes-is-noop.svg

        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::animatableAttributeForName):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::registerAttributes):
        (WebCore::SVGFilterElement::parseAttribute):
        (WebCore::SVGFilterElement::filterResXIdentifier): Deleted.
        (WebCore::SVGFilterElement::filterResYIdentifier): Deleted.
        (WebCore::SVGFilterElement::setFilterRes): Deleted.
        * svg/SVGFilterElement.h:
        * svg/SVGFilterElement.idl:
        * svg/svgattrs.in:

2018-09-24  Ryosuke Niwa  <rniwa@webkit.org>

        Don't cause a crash even when some IDL attribute is missing CEReactions
        https://bugs.webkit.org/show_bug.cgi?id=189937

        Reviewed by Simon Fraser.

        Replaced release assertions in ElementQueue::add and ElementQueue::invokeAll by debug assertions
        since a missing CEReactions resulting in a crash is a terrible user experience.

        Also made the iteration in invokeAll safe when more elements were added to m_elements.

        No new tests since we would still hit debug assertions, and this behavior should only come up
        when some IDL attribute is erroneously missing CEReactions.

        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionQueue::ElementQueue::add):
        (WebCore::CustomElementReactionQueue::ElementQueue::invokeAll):

2018-09-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor Editor::fontAttributesForSelectionStart to be platform-agnostic
        https://bugs.webkit.org/show_bug.cgi?id=189918
        Work towards <rdar://problem/44648705>

        Reviewed by Tim Horton.

        Refactors the functionality in Editor::fontAttributesForSelectionStart to not be Cocoa-only. Rename this to
        fontAttributesAtSelectionStart (to be consistent with `EditingStyle::styleAtSelectionStart`) and move it from
        EditorCocoa.mm to Editor.cpp; instead of creating and populating an NSDictionary with font attribute
        information, create and populate a new `FontAttributes` struct that contains the same information. Cocoa clients
        in WebKitLegacy may then create an `NSDictionary` as needed from the `FontAttributes`.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::platformFontAttributesAtSelectionStart const):

        Add a hook to allow platforms to supply additional information in FontAttributes. On Cocoa, this adds a UIFont
        or NSFont to FontAttributes; otherwise, this is a no-op.

        (WebCore::Editor::fontAttributesAtSelectionStart const):
        * editing/Editor.h:
        * editing/FontAttributeChanges.cpp:
        (WebCore::cssValueListForShadow):
        * editing/FontAttributeChanges.h:
        (): Deleted.
        (WebCore::FontShadow::encode const): Deleted.
        (WebCore::FontShadow::decode): Deleted.
        * editing/FontAttributes.h: Added.

        Introduce a new struct that contains font attribute information. May be converted into an NSDictionary for use
        by Cocoa clients in WebKitLegacy and WebKit. In a future patch, this will become serializable over IPC for use
        in WebKit2.

        * editing/FontShadow.h: Added.

        Move FontShadow out into a separate header file, included in `FontAttributeChanges.h` and `FontAttributes.h`.

        (WebCore::FontShadow::encode const):
        (WebCore::FontShadow::decode):
        * editing/cocoa/EditorCocoa.mm:

        Add a helper function to convert a WebCore::Color to either `UIColor` on iOS or `NSColor` when AppKit is being
        used.

        (WebCore::Editor::platformFontAttributesAtSelectionStart const):
        (WebCore::Editor::getTextDecorationAttributesRespectingTypingStyle const): Deleted.

        Remove a helper function that was only used to compute text decoration attributes in
        fontAttributesForSelectionStart.

        (WebCore::Editor::fontAttributesForSelectionStart const): Deleted.
        * editing/cocoa/FontAttributesCocoa.mm: Added.
        (WebCore::FontAttributes::createDictionary const):
        * editing/cocoa/FontShadowCocoa.mm: Added.
        (WebCore::FontShadow::createShadow const):
        * editing/cocoa/HTMLConverter.mm:
        (_webKitBundle):
        (HTMLConverter::_colorForElement):
        (_platformColor): Deleted.

        Adopt platformColor().

        * platform/graphics/cocoa/ColorCocoa.h: Added.
        * platform/graphics/cocoa/ColorCocoa.mm: Added.
        (WebCore::platformColor):
        * platform/graphics/metal/GPURenderPassDescriptorMetal.mm:

        Build fix due to changes in unified sources.

        * platform/mac/WebCoreNSFontManagerExtras.mm:
        (WebCore::computedFontAttributeChanges):
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:

        More build fixes due to changes in unified sources.

2018-09-24  Jer Noble  <jer.noble@apple.com>

        SharedBuffer should have an equality test
        https://bugs.webkit.org/show_bug.cgi?id=189919

        Reviewed by Alex Christensen.

        Test: TestWebKitAPI SharedBuffer.isEqualTo.

        * platform/SharedBuffer.cpp:
        * platform/SharedBuffer.h:
        (WebCore::operator==):
        (WebCore::operator!=):

2018-09-24  Ryosuke Niwa  <rniwa@webkit.org>

        imported/w3c/web-platform-tests/shadow-dom/slotchange.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=167652

        Reviewed by Saam Barati.

        The bug appears to be caused by the JS wrappers of slot elements getting prematurely collected.
        Deployed GCReachableRef introduced in r236376 to fix the bug.

        Test: fast/shadow-dom/signal-slot-list-retains-js-wrappers.html

        * dom/MutationObserver.cpp:
        (WebCore::signalSlotList):
        (WebCore::MutationObserver::enqueueSlotChangeEvent):
        (WebCore::MutationObserver::notifyMutationObservers):

2018-09-24  Ryosuke Niwa  <rniwa@webkit.org>

        Release assert when using paper-textarea due to autocorrect IDL attribute missing CEReactions
        https://bugs.webkit.org/show_bug.cgi?id=174629
        <rdar://problem/33407620>

        Reviewed by Simon Fraser.

        The bug was caused by autocorrect and autocapitalize IDL attributes missing CEReactions.

        Test: fast/custom-elements/autocorrect-autocapitalize-idl-attributes-crash.html

        * html/HTMLElement.idl:

2018-09-24  Chris Dumez  <cdumez@apple.com>

        No-op document.open() calls should not have any side effects
        https://bugs.webkit.org/show_bug.cgi?id=189373
        <rdar://problem/44282702>

        Reviewed by Geoffrey Garen.

        Update document.open() implementation to match the specification [1] more closely.
        In particular, URLs updates should happen much later, at step 11. They were happening
        too early and would cause side effects when returning early.

        [1] https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#document-open-steps

        No new tests, rebaselined existing test.

        * dom/Document.cpp:
        (WebCore::Document::open):

2018-09-24  Daniel Bates  <dabates@apple.com>

        Include more headers in IOSurface.mm, PixelBufferResizer.{h, mm}
        https://bugs.webkit.org/show_bug.cgi?id=189928

        Reviewed by Andy Estes.

        Make building IOSurface.mm and PixelBufferResizer.mm deterministic regardless of
        which bundle of unified sources they are built in.

        * platform/graphics/cocoa/IOSurface.mm: Include headers HostWindow.h and PlatformScreen.h
        since we make use of functionality from these headers.
        * platform/graphics/cv/PixelBufferResizer.h: Include header IntSize.h since
        we need the size of an IntSize for m_size.
        * platform/graphics/cv/PixelBufferResizer.mm: Include header Logging.h since
        this file makes use of logging facilities. Also substitute #import for #include
        while I am here since this file is an Objective-C++ file.

2018-09-24  Andy Estes  <aestes@apple.com>

        [Payment Request] Events cleanup
        https://bugs.webkit.org/show_bug.cgi?id=189925

        Reviewed by Simon Fraser.

        1. Constructed MerchantValidationEvents (and ApplePayValidateMerchantEvents) with rvalue
        references to validationURLs.
        2. Instead of MerchantValidationEvent and PaymentRequestUpdateEvent having a
        RefPtr<PaymentRequest>, downcasted their target to a PaymentRequest. Trusted versions of
        these events are always dispatched to a PaymentRequest object.
        3. Defined MerchantValidationEventInit in MerchantValidationEvent.idl instead of having a
        separate .idl and .h for this dictionary.

        No new tests. No change in behavior.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::validateMerchant):
        * Modules/applepay/ApplePaySession.h:
        * Modules/applepay/ApplePayValidateMerchantEvent.cpp:
        (WebCore::ApplePayValidateMerchantEvent::ApplePayValidateMerchantEvent):
        * Modules/applepay/ApplePayValidateMerchantEvent.h:
        (WebCore::ApplePayValidateMerchantEvent::create):
        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::validateMerchant):
        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentSession.h:
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::validateMerchant):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
        * Modules/paymentrequest/MerchantValidationEvent.cpp:
        (WebCore::MerchantValidationEvent::create):
        (WebCore::MerchantValidationEvent::MerchantValidationEvent):
        (WebCore::MerchantValidationEvent::complete):
        * Modules/paymentrequest/MerchantValidationEvent.h:
        * Modules/paymentrequest/MerchantValidationEvent.idl:
        * Modules/paymentrequest/MerchantValidationEventInit.h: Removed.
        * Modules/paymentrequest/MerchantValidationEventInit.idl: Removed.
        * Modules/paymentrequest/PaymentMethodChangeEvent.cpp:
        (WebCore::PaymentMethodChangeEvent::PaymentMethodChangeEvent):
        * Modules/paymentrequest/PaymentMethodChangeEvent.h:
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::shippingAddressChanged):
        (WebCore::PaymentRequest::shippingOptionChanged):
        (WebCore::PaymentRequest::paymentMethodChanged):
        * Modules/paymentrequest/PaymentRequest.h:
        (isType):
        * Modules/paymentrequest/PaymentRequestUpdateEvent.cpp:
        (WebCore::PaymentRequestUpdateEvent::PaymentRequestUpdateEvent):
        (WebCore::PaymentRequestUpdateEvent::updateWith):
        * Modules/paymentrequest/PaymentRequestUpdateEvent.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::isPaymentRequest const):
        * dom/EventTarget.h:

2018-09-24  Daniel Bates  <dabates@apple.com>

        Separate Mac and iOS implementation of windowsKeyCodeForCharCode()
        https://bugs.webkit.org/show_bug.cgi?id=189898

        Reviewed by Tim Horton.

        Extract the Mac and iOS implementations into a windowsKeyCodeForCharCode() defined in file
        KeyEventMac.mm and file KeyEventIOS, respectively.

        Mac and iOS have significant differences in how they represent function keys. It is not worthwhile
        to share windowsKeyCodeForCharCode() between them given these differences. On Mac function keys
        are represented by a char code in the range 0xF700-0xF8FF. On iOS these keys may not have a unique
        char code (e.g. F1 = 0x10 = F10) and must be identified either by special string (e.g. UIKeyInputUpArrow)
        or key code.

        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::windowsKeyCodeForCharCode): Deleted.
        * platform/ios/KeyEventIOS.mm:
        (WebCore::windowsKeyCodeForCharCode): Added. Remove the handling of NS*FunctionKey char codes
        as function keys are not represented using them as of iOS 12.
        * platform/mac/KeyEventMac.mm:
        (WebCore::windowsKeyCodeForCharCode): Added.

2018-09-21  Simon Fraser  <simon.fraser@apple.com>

        Remove the old "AcceleratedCompositingForOverflowScroll" code
        https://bugs.webkit.org/show_bug.cgi?id=189870

        Reviewed by Zalan Bujtas.

        The "AcceleratedCompositingForOverflowScroll" code was added to allow overflow:scroll to use
        composited scrolling if an overflow:scroll could be made a stacking context without affecting
        z-order. We need overflow:scroll to be accelerated always, so a different approach is needed.
        Remove this old code (unused by any platform?) to make working on new code easier.

        * page/Settings.yaml:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::setHasVisibleContent):
        (WebCore::RenderLayer::updateDescendantDependentFlags):
        (WebCore::RenderLayer::dirty3DTransformedDescendantStatus):
        (WebCore::RenderLayer::stackingContext const):
        (WebCore::compositingContainer):
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::hasAcceleratedTouchScrolling const):
        (WebCore::RenderLayer::usesAcceleratedScrolling const):
        (WebCore::adjustedScrollDelta):
        (WebCore::RenderLayer::updateCompositingLayersAfterScroll):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        (WebCore::RenderLayer::enclosingFragmentedFlowAncestor const):
        (WebCore::RenderLayer::calculateClipRects const):
        (WebCore::RenderLayer::acceleratedCompositingForOverflowScrollEnabled const): Deleted.
        (WebCore::RenderLayer::updateDescendantsAreContiguousInStackingOrder): Deleted.
        (WebCore::RenderLayer::updateDescendantsAreContiguousInStackingOrderRecursive): Deleted.
        (WebCore::RenderLayer::positionNewlyCreatedOverflowControls): Deleted.
        (WebCore::RenderLayer::canBeStackingContainer const): Deleted.
        (WebCore::RenderLayer::stackingContainer const): Deleted.
        (WebCore::RenderLayer::needsCompositedScrolling const): Deleted.
        (WebCore::RenderLayer::updateNeedsCompositedScrolling): Deleted.
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::clearZOrderLists):
        (WebCore::RenderLayer::updateZOrderLists):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterLayout):
        (WebCore::RenderLayerBacking::computeParentGraphicsLayerRect const):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::requiresHorizontalScrollbarLayer const):
        (WebCore::RenderLayerBacking::requiresVerticalScrollbarLayer const):
        (WebCore::RenderLayerBacking::requiresScrollCornerLayer const):
        (WebCore::RenderLayerBacking::compositingOpacity const):
        (WebCore::traverseVisibleNonCompositedDescendantLayers):
        (WebCore::RenderLayerBacking::hasUnpositionedOverflowControlsLayers const): Deleted.
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayersAfterFlush):
        (WebCore::RenderLayerCompositor::updateCustomLayersAfterFlush):
        (WebCore::styleChangeRequiresLayerRebuild):
        (WebCore::RenderLayerCompositor::enclosingNonStackingClippingLayer const):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer const):
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore const):
        (WebCore::RenderLayerCompositor::reasonsForCompositing const):
        (WebCore::RenderLayerCompositor::requiresCompositingForBackfaceVisibility const):
        (WebCore::RenderLayerCompositor::isViewportConstrainedFixedOrStickyLayer const):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition const):
        (WebCore::RenderLayerCompositor::requiresCompositingForOverflowScrolling const):
        (WebCore::RenderLayerCompositor::requiresCompositingForScrolling const): Deleted.
        * rendering/RenderLayerCompositor.h:

2018-09-24  Youenn Fablet  <youenn@apple.com>

        Enable conversion of libwebrtc internal frames as CVPixelBuffer
        https://bugs.webkit.org/show_bug.cgi?id=189892

        Reviewed by Eric Carlson.

        Make sure to handle the case of libwebrtc frames that are not backed by CVPixelBuffer.
        No observable change of behavior.

        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:
        (WebCore::LibWebRTCProviderCocoa::createDecoderFactory):
        (WebCore::LibWebRTCProviderCocoa::createEncoderFactory):
        Update according renamed methods.
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.h:
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferFromVideoFrame):
        In case of libwebrtc frame that are not backed by CVPixelBuffer, we create
        a CVPixelBuffer from a pixel buffer pool.
        This CVPixelBuffer is then filled as part of webrtc::pixelBufferFromFrame.
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.mm:
        (WebCore::RealtimeOutgoingVideoSourceCocoa::convertToYUV):
        Make sure to use preferred pixel buffer format.

2018-09-24  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Add mock window capture source
        https://bugs.webkit.org/show_bug.cgi?id=189843
        <rdar://problem/44687445>

        Reviewed by Youenn Fablet.

        No new tests, the API is disabled and it isn't possible to test yet.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::processNewFrame): Remove an extra blank line.

        * platform/mock/MockMediaDevice.h:
        (WebCore::MockDisplayProperties::encode const): Get rid of defaultFrameRate, add type.
        (WebCore::MockDisplayProperties::decode): Ditto.
        (WebCore::MockMediaDevice::type const):

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::defaultDevices): Add mock window devices.
        (WebCore::MockRealtimeMediaSourceCenter::audioDevices): Cleanup.
        (WebCore::MockRealtimeMediaSourceCenter::videoDevices): Cleanup.
        (WebCore::MockRealtimeMediaSourceCenter::displayDevices): New.

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource): Set default size on displays.
        (WebCore::MockRealtimeVideoSource::supportsSizeAndFrameRate): Call RealtimeVideoSource for 
        mock camera, base class for device.
        (WebCore::MockRealtimeVideoSource::setSizeAndFrameRate): Ditto.
        (WebCore::MockRealtimeVideoSource::generatePresets): ASSERT if called as a camera.
        (WebCore::MockRealtimeVideoSource::capabilities): updateCapabilities is only appropriate for cameras.
        (WebCore::MockRealtimeVideoSource::settings): Camera and Device are different surface types.
        (WebCore::MockRealtimeVideoSource::drawText): Render name, not ID.
        (WebCore::MockRealtimeVideoSource::mockDisplayType const):

        * platform/mock/MockRealtimeVideoSource.h:
        (WebCore::MockRealtimeVideoSource::mockDisplay const):
        (WebCore::MockRealtimeVideoSource::mockScreen const):
        (WebCore::MockRealtimeVideoSource::mockWindow const):

2018-09-24  Daniel Bates  <dabates@apple.com>

        [iOS] Key code is 0 for many hardware keyboard keys
        https://bugs.webkit.org/show_bug.cgi?id=189604

        Reviewed by Wenson Hsieh.

        Based off a patch by Jeremy Jones.

        Add iOS-specific implementation of windowsKeyCodeForKeyCode() to map an iOS virtual key code to
        the corresponding Windows virtual key code. Only hardware keyboard-generated events have a
        virtual key code. For software-generated keyboard events we do what we do now and compute the
        Windows virtual key code from the character string associated with the event.

        When a WebEvent is instantiated with a non-zero iOS virtual key code (keyCode) we now always
        convert it to its corresponding Windows virtual key code without considering the specified
        charactersIgnoringModifiers character string. Currently we prefer computing the key code from
        charactersIgnoringModifiers regardless of whether a non-zero iOS virtual key code was given.
        However this causes special keys, including function keys (e.g. F10) to be misidentified because
        keyboard layouts in iOS (at least iOS 12) map such special keys to ASCII control characters (e.g.
        F10 maps to ASCII control character "data link escape" = 0x10) as opposed to special 16-bit
        integral constants as we do on Mac (e.g. F10 maps to NSF10FunctionKey = 0xF70D on Mac). I will
        look to fix up the computation of a Windows virtual key code from a char code on iOS in a
        subsequent commit(s). For now, computing the Windows virtual key code directly from the iOS
        virtual key code specified to the WebEvent constructor avoids the misidentification using
        an ANSI US keyboard layout.

        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::windowsKeyCodeForKeyCode): Deleted; moved to KeyEventMac.mm as this mapping is specific to Mac.
        * platform/ios/KeyEventIOS.mm:
        (WebCore::windowsKeyCodeForKeyCode): Added.
        * platform/ios/WebEvent.mm:
        (-[WebEvent initWithKeyEventType:timeStamp:characters:charactersIgnoringModifiers:modifiers:isRepeating:withFlags:keyCode:isTabKey:characterSet:]): Address the NOTE comment and compute the Windows virtual key code from
        the iOS virtual key code when we have one. Also inline the value of an unncessary local variable.
        (-[WebEvent initWithKeyEventType:timeStamp:characters:charactersIgnoringModifiers:modifiers:isRepeating:withFlags:withInputManagerHint:keyCode:isTabKey:]): Ditto.
        * platform/mac/KeyEventMac.mm:
        (WebCore::windowsKeyCodeForKeyCode): Moved from KeyEventCocoa.mm. Updated code to make use of WTF_ARRAY_LENGTH() instead
        of hardcoding the upper bound of the lookup table.

2018-09-24  Simon Fraser  <simon.fraser@apple.com>

        feMorphology filter in CSS doesn't update when element moves
        https://bugs.webkit.org/show_bug.cgi?id=189895

        Reviewed by Dean Jackson.
        
        SourceAlpha needs to be invalidated from clearIntermediateResults(),
        so get it from the SVGFilterBuilder (which always creates one) and store in
        a member variable.

        Test: css3/filters/invalidate-sourceAlpha.html

        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::buildReferenceFilter):
        (WebCore::CSSFilter::clearIntermediateResults):
        * rendering/CSSFilter.h:
        * svg/graphics/filters/SVGFilterBuilder.h:

2018-09-24  Simon Fraser  <simon.fraser@apple.com>

        CSS reference filter with feDisplacementMap shows buffer corruption on Retina displays
        https://bugs.webkit.org/show_bug.cgi?id=188486
        <rdar://problem/43189750>

        Reviewed by Dean Jackson.
        
        The paintSize needs to be scaled by filterScale on Retina displays.

        Test: css3/filters/hidpi-feDisplacementMap.html

        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::platformApplySoftware):
        * platform/graphics/filters/FEDisplacementMap.h:

2018-09-24  Simon Fraser  <simon.fraser@apple.com>

        ReferenceFilterOperation doesn't need to store the FilterEffect
        https://bugs.webkit.org/show_bug.cgi?id=189904

        Reviewed by Dean Jackson.

        ReferenceFilterOperation doesn't do anything with m_filterEffect so don't store it.

        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::ReferenceFilterOperation::setFilterEffect): Deleted.
        * platform/graphics/filters/FilterOperation.h:
        (WebCore::ReferenceFilterOperation::filterEffect const): Deleted.
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::build):

2018-09-24  Simon Fraser  <simon.fraser@apple.com>

        Garbled rendering of image when applied feConvolveMatrix to it, on Retina display
        https://bugs.webkit.org/show_bug.cgi?id=189748
        <rdar://problem/44621494>

        Reviewed by Jon Lee.
        
        feConvolveMatrix needs to scale the paintSize by the filter scale (2x on Retina displays),
        otherwise parts of the output buffer are uninitialized and the result is incorrect.

        Test: css3/filters/hidpi-feConvolveMatrix.html

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::platformApplySoftware):

2018-09-22  Dean Jackson  <dino@apple.com>

        Ensure PointerEvent is not visible when disabled
        https://bugs.webkit.org/show_bug.cgi?id=189889
        <rdar://problem/44708253>

        Reviewed by Eric Carlson.

        Test: pointerevents/disabled.html

        * bindings/js/WebCoreBuiltinNames.h: Now that it is enabled at runtime, it needs
        a built-in name.
        * dom/PointerEvent.idl: Add EnabledAtRuntime.

2018-09-24  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Pull demuxed samples in batches
        https://bugs.webkit.org/show_bug.cgi?id=189871

        Reviewed by Xabier Rodriguez-Calvar.

        After this patch, only the notifications of "new samples available"
        (appsink-new-sample bus messages) travel from the streaming thread to
        the main thread through the bus and the main thread is the responsible
        of pulling as many samples as it can from appsink. Before, the samples
        were pulled from appsink in the non-main thread and traveled to the
        main thread through the bus one by one.

        This reduces drastically the amount of context switches and waiting
        time in the streaming thread, resulting in a noticeable performance
        improvement.

        This fixes stutter while loading YouTube videos.

        * platform/graphics/gstreamer/MediaSampleGStreamer.cpp:
        (WebCore::MediaSampleGStreamer::MediaSampleGStreamer):
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::AppendPipeline):
        (WebCore::AppendPipeline::~AppendPipeline):
        (WebCore::AppendPipeline::clearPlayerPrivate):
        (WebCore::AppendPipeline::handleApplicationMessage):
        (WebCore::AppendPipeline::appsinkNewSample):
        (WebCore::AppendPipeline::consumeAppSinkAvailableSamples):
        (WebCore::AppendPipeline::resetPipeline):
        (WebCore::AppendPipeline::handleNewAppsinkSample):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:

2018-09-24  Per Arne Vollan  <pvollan@apple.com>

        [WebVTT] Change name of WebVTT region attribute 'height' to 'lines'.
        https://bugs.webkit.org/show_bug.cgi?id=189862

        Reviewed by Eric Carlson.

        The WebVTT region attribute 'height' has been renamed to 'lines', see https://w3c.github.io/webvtt/#region-settings.

        No new tests, covered by existing tests.

        * html/track/VTTRegion.cpp:
        (WebCore::VTTRegion::setLines):
        (WebCore::VTTRegion::updateParametersFromRegion):
        (WebCore::VTTRegion::scanSettingName):
        (WebCore::VTTRegion::parseSettingValue):
        (WebCore::VTTRegion::prepareRegionDisplayTree):
        (WebCore::VTTRegion::setHeight): Deleted.
        * html/track/VTTRegion.h:
        * html/track/VTTRegion.idl:

2018-09-24  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Use no-more-pads event for noticing initialization segments
        https://bugs.webkit.org/show_bug.cgi?id=189868

        Reviewed by Xabier Rodriguez-Calvar.

        Fixes the following YTTV 2018 tests:
        62.VideoDimensionVP9
        63.PlaybackStateVP9

        This removes the hack that was making supporting multiple tracks in
        the same file in MSE impossible.

        For WebM, this GStreamer patch is required:
        https://bugzilla.gnome.org/show_bug.cgi?id=797187
        "matroskademux: Emit no-more-pads after parsing Tracks"

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::AppendPipeline):
        (WebCore::AppendPipeline::handleApplicationMessage):
        (WebCore::AppendPipeline::demuxerNoMorePads):
        (WebCore::AppendPipeline::appsinkCapsChanged):
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsink):
        (WebCore::AppendPipeline::appendPipelineDemuxerNoMorePadsFromAnyThread):
        (WebCore::appendPipelineDemuxerNoMorePads):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:

2018-09-24  Thibault Saunier  <tsaunier@igalia.com>

        [WPE][GTK][WebRTC] Fix leaks in the libwebrtc Decoder and Encoder
        https://bugs.webkit.org/show_bug.cgi?id=189835

        Reviewed by Philippe Normand.

        - Rework memory management to avoid leaking encoded frames (basically use the same
          strategy as other libwebrtc encoder implementation).
        - Plug a GstCaps leak.

        * platform/mediastream/gstreamer/GStreamerVideoCapturer.cpp:
        * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::InitEncode):
        (WebCore::GStreamerVideoEncoder::newSampleCallback):
        (WebCore::GStreamerVideoEncoder::Fragmentize):
        (WebCore::GStreamerVideoEncoder::SetRestrictionCaps):

2018-09-24  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Utilities cleanups
        https://bugs.webkit.org/show_bug.cgi?id=189699
        <rdar://problem/44634143>

        Reviewed by Xabier Rodriguez-Calvar.

        The GstMappedBuffer now has a move constructor so that it can be easily
        reused in the webaudiosrc element. The now-unused corresponding
        buffer-mapping utilities are removed from the code-base.

        The HTTP source element used to handle a GstBuffer in its private
        structure but this is no longer required since data is now pushed
        in chunks, see bug #182829.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcLoop):
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::createGstBuffer): Deleted.
        (WebCore::createGstBufferForData): Deleted.
        (WebCore::getGstBufferDataPointer): Deleted.
        (WebCore::mapGstBuffer): Deleted.
        (WebCore::unmapGstBuffer): Deleted.
        * platform/graphics/gstreamer/GStreamerCommon.h:
        (WebCore::GstMappedBuffer::create): New method returning a
        reference to a newly created GstMappedBuffer instance.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStop): Remove reference to unused GstBuffer.
        (CachedResourceStreamingClient::dataReceived): Ditto.

2018-09-24  Enrique Ocaña González  <eocanha@igalia.com>

        [MSE][GStreamer] Don't update duration when it was not previously NaN
        https://bugs.webkit.org/show_bug.cgi?id=189869

        Reviewed by Xabier Rodriguez-Calvar.

        This is what the spec mandates. The spec doesn't say anything about
        updating duration when it had been previously set, even if the new
        init segment says that the duration is growing.

        This fixes MSE YTTV 2018 69.MediaSourceDurationVP9.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsink):

2018-09-23  Frederic Wang  <fwang@igalia.com>

        Add missing includes in TextCodecReplacement.cpp
        https://bugs.webkit.org/show_bug.cgi?id=189894

        Reviewed by Darin Adler.

        No new tests, behavior unchanged.

        * platform/text/TextCodecReplacement.cpp: Add missing headers.

2018-09-22  Adrian Perez de Castro  <aperez@igalia.com>

        [ARM] Building FELightingNEON.cpp fails due to missing lightVector member
        https://bugs.webkit.org/show_bug.cgi?id=189890

        Reviewed by Darin Adler.

        No new tests needed.

        * platform/graphics/cpu/arm/filters/FELightingNEON.h:
        (WebCore::FELighting::platformApplyNeon): Adapt to new layout of "struct PaintingData" after r225122.

2018-09-22  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Null-check cairo_pattern_t gradient objects
        https://bugs.webkit.org/show_bug.cgi?id=189820

        Reviewed by Alex Christensen.

        Cairo-specific implementation of Gradient::createPlatformGradient() can
        now return a nullptr value when a conic gradient is described by the
        Gradient object. Cairo doesn't have a way to create cairo_pattern_t
        objects for such gradients.

        Null-checks are now done on return values of createPlatformGradient(),
        in order to avoid proceeding to paint a null cairo_pattern_t object.

        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::fill):
        * platform/graphics/cairo/GraphicsContextImplCairo.cpp:
        (WebCore::GraphicsContextImplCairo::fillRect):

2018-09-21  Ryosuke Niwa  <rniwa@webkit.org>

        Cannot start a drag inside a shadow tree when an inclusive-ancestor of its shadow host is a draggable element
        https://bugs.webkit.org/show_bug.cgi?id=136836

        Reviewed by Wenson Hsieh.

        Fixed the bug by simply generalizing the existing code path existed for video / input type=color.

        Tests: fast/shadow-dom/dragging-element-inside-shadow-tree.html
               fast/shadow-dom/dragging-element-with-shadow-tree.html

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):

2018-09-22  Chris Dumez  <cdumez@apple.com>

        FontDataCache should use Ref<Font> instead of a RefPtr<Font>
        https://bugs.webkit.org/show_bug.cgi?id=189861

        Reviewed by Antti Koivisto.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::fontForPlatformData):
        (WebCore::FontCache::purgeInactiveFontData):

2018-09-21  Justin Michaud  <justin_michaud@apple.com>

        Implement initialValue support for CSS Custom Properties and Values API
        https://bugs.webkit.org/show_bug.cgi?id=189819

        Reviewed by Simon Fraser.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::customPropertyValue):
        * css/CSSCustomPropertyValue.cpp:
        (WebCore::CSSCustomPropertyValue::resolveVariableReferences const):
        * css/CSSCustomPropertyValue.h:
        * css/CSSRegisteredCustomProperty.h:
        * css/CSSVariableData.cpp:
        (WebCore::CSSVariableData::resolveVariableFallback const):
        (WebCore::CSSVariableData::resolveVariableReference const):
        (WebCore::CSSVariableData::resolveVariableReferences const):
        (WebCore::CSSVariableData::resolveTokenRange const):
        * css/CSSVariableData.h:
        * css/DOMCSSRegisterCustomProperty.cpp:
        (WebCore::DOMCSSRegisterCustomProperty::registerProperty):
        * css/DOMCSSRegisterCustomProperty.h:
        * css/DOMCSSRegisterCustomProperty.idl:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::resolvedVariableValue):
        (WebCore::StyleResolver::applyCascadedProperties):
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseValueWithVariableReferences):
        * css/parser/CSSParser.h:
        * dom/Document.h:
        (WebCore::Document::getCSSRegisteredCustomPropertySet const):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::checkVariablesInCustomProperties):
        * rendering/style/RenderStyle.h:

2018-09-21  Dean Jackson  <dino@apple.com>

        Add PointerEvent, plus feature flag, plus Web Platform Tests
        https://bugs.webkit.org/show_bug.cgi?id=189867
        <rdar://problem/44697384>

        Reviewed by Simon Fraser.

        Add the PointerEvent interface.

        Tests: imported/w3c/web-platform-tests/pointerevents/extension/idlharness.window.html
               imported/w3c/web-platform-tests/pointerevents/extension/pointerevent_constructor.html
               imported/w3c/web-platform-tests/pointerevents/extension/pointerevent_touch-action-verification.html
               imported/w3c/web-platform-tests/pointerevents/idlharness.window.html
               imported/w3c/web-platform-tests/pointerevents/pointerevent_constructor.html
               imported/w3c/web-platform-tests/pointerevents/pointerevent_on_event_handlers.html
               imported/w3c/web-platform-tests/pointerevents/pointerevent_touch-action-illegal.html
               imported/w3c/web-platform-tests/pointerevents/pointerevent_touch-action-verification.html

        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
                Add the new files.

        * dom/Event.h:
        (WebCore::Event::isPointerEvent const): New virtual identification method.

        * dom/EventNames.in: Add PointerEvent so the InterfaceType code is generated.

        * dom/PointerEvent.cpp: The PointerEvent interface, as specified by W3C.
        (WebCore::PointerEvent::PointerEvent):
        (WebCore::PointerEvent::eventInterface const):
        * dom/PointerEvent.h: Added.
        * dom/PointerEvent.idl: Added.

        * page/RuntimeEnabledFeatures.h: Clean up the ordering of the features, so there aren't
        confusing blank lines interspersed with #if USE macros.
        (WebCore::RuntimeEnabledFeatures::setPointerEventsEnabled): Add a new flag for Pointer Events.
        (WebCore::RuntimeEnabledFeatures::pointerEventsEnabled const):

2018-09-21  Ryosuke Niwa  <rniwa@webkit.org>

        Custom elements in a reaction queue can lose its JS wrapper and become HTMLUnknownElement
        https://bugs.webkit.org/show_bug.cgi?id=184307

        Reviewed by Keith Miller.

        The bug was caused by the custom elements reaction queue not reporting its content to GC during marking.

        When there is no JS reference to the JS wrappers of those custom element, and if those custom elements
        are disconnected, GC would happily collect those the wrappers. Unfortunately, the same bug exists for
        any asynchronous events and other WebCore code which keeps elements alive for a later use but doesn't
        report them to GC (e.g. during visitChildren).

        This patch, therefore, introduces a generic mechanism to keep these elements' wrappers alive. Namely,
        we introduce GCReachableRef, a new smart pointer type for Node's subclasses, which keeps element as well
        as its wrappers alive. GCReachableRef works by adding its Node to a global hash counted set when it's
        created and making JSNodeOwner::isReachableFromOpaqueRoots return true when the node is in the set.

        Test: fast/custom-elements/custom-elements-reaction-queue-retains-js-wrapper.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isReachableFromDOM):
        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionQueue::ElementQueue::invokeAll): Don't swap the vector of elements in
        in the queue. Assuming each DOM API has an appropriate CustomElementsReactionStack, we should never
        append a new element to this queue while invoking custom element reactions.
        * dom/CustomElementReactionQueue.h:
        * dom/GCReachableRef.cpp: Added.
        * dom/GCReachableRef.h: Added.
        (WebCore::GCReachableRefMap::contains): Added.
        (WebCore::GCReachableRefMap::add): Added.
        (WebCore::GCReachableRefMap::remove): Added.
        (WebCore::GCReachableRef::GCReachableRef): Added. We need isNull() check since WTFMove may have been
        called on the source GCReachableRef.
        (WebCore::GCReachableRef::~GCReachableRef): Ditto.
        (WebCore::GCReachableRef::operator-> const): Added.
        (WebCore::GCReachableRef::get const): Added.
        (WebCore::GCReachableRef::operator T& const): Added.
        (WebCore::GCReachableRef::operator! const): Added.
        (WebCore::GCReachableRef::isNull const): Added. Returns true if WTFMove had been called on Ref.

2018-09-21  Alex Christensen  <achristensen@webkit.org>

        Use a Variant for FormDataElement
        https://bugs.webkit.org/show_bug.cgi?id=189777

        Reviewed by Chris Dumez.

        * platform/network/FormData.cpp:
        (WebCore::FormData::FormData):
        (WebCore::FormDataElement::lengthInBytes const):
        (WebCore::FormDataElement::isolatedCopy const):
        (WebCore::FormData::appendData):
        (WebCore::FormData::flatten const):
        (WebCore::FormData::resolveBlobReferences):
        (WebCore::FormData::generateFiles):
        (WebCore::FormData::hasGeneratedFiles const):
        (WebCore::FormData::hasOwnedGeneratedFiles const):
        (WebCore::FormData::removeGeneratedFilesIfNeeded):
        (WebCore::FormData::asSharedBuffer const):
        (WebCore::FormData::asBlobURL const):
        (WebCore::FormData::expandDataStore): Deleted.
        * platform/network/FormData.h:
        (WebCore::FormDataElement::FormDataElement):
        (WebCore::FormDataElement::encode const):
        (WebCore::FormDataElement::decode):
        (WebCore::FormDataElement::EncodedFileData::isolatedCopy const):
        (WebCore::FormDataElement::EncodedFileData::operator== const):
        (WebCore::FormDataElement::EncodedFileData::encode const):
        (WebCore::FormDataElement::EncodedFileData::decode):
        (WebCore::FormDataElement::EncodedBlobData::operator== const):
        (WebCore::FormDataElement::EncodedBlobData::encode const):
        (WebCore::FormDataElement::EncodedBlobData::decode):
        (WebCore::FormDataElement::operator== const):
        (WebCore::FormDataElement::operator!= const):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::advanceCurrentStream):
        (WebCore::createHTTPBodyCFReadStream):
        (WebCore::setHTTPBody):
        * platform/network/curl/CurlFormDataStream.cpp:
        (WebCore::CurlFormDataStream::computeContentLength):
        (WebCore::CurlFormDataStream::read):
        (WebCore::CurlFormDataStream::readFromFile):
        (WebCore::CurlFormDataStream::readFromData):
        * platform/network/curl/CurlFormDataStream.h:

2018-09-20  Simon Fraser  <simon.fraser@apple.com>

        Simplify the logic around has*ScrollbarWithAutoBehavior
        https://bugs.webkit.org/show_bug.cgi?id=189813

        Reviewed by Zalan Bujtas.

        The boolean logic in scrollsOverflowX() and hasHorizontalScrollbarWithAutoBehavior() (and the vertical
        equivalents) reduces simply to hasOverflowClip() && (style().overflowX() == Overflow::Scroll || style().overflowX() == Overflow::Auto);
        
        Similarly, RenderBox::intrinsicScrollbarLogicalWidth() just needs the part of the logic
        that asks whether the theme uses overlay scrollbars which are not customized (and thus
        turned into non-overlay scrollbars).

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::intrinsicScrollbarLogicalWidth const):
        (WebCore::RenderBox::canUseOverlayScrollbars const):
        (WebCore::RenderBox::hasVerticalScrollbarWithAutoBehavior const):
        (WebCore::RenderBox::hasHorizontalScrollbarWithAutoBehavior const):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::scrollsOverflowX const):
        (WebCore::RenderBox::scrollsOverflowY const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollbarsAfterLayout):

2018-09-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r236255.

        Many WebAudio crashes

        Reverted changeset:

        "[GStreamer] Utilities cleanups"
        https://bugs.webkit.org/show_bug.cgi?id=189699
        https://trac.webkit.org/changeset/236255

2018-09-21  Jer Noble  <jer.noble@apple.com>

        Move AVVideoPerformanceMetrics into AVFoundationSPI.h
        https://bugs.webkit.org/show_bug.cgi?id=189842

        Reviewed by Jon Lee.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:

2018-09-21  Chris Dumez  <cdumez@apple.com>

        WebSQL: User cannot grant quota increase if the JS provides an expected usage value that is too low
        https://bugs.webkit.org/show_bug.cgi?id=189801
        <rdar://problem/43592498>

        Reviewed by Youenn Fablet.

        User was unable to grant a quota increase for WebSQL if the JS provided an expected usage value that
        is too low. This is because WebKit was passing this provided expectedUsage value to the client for
        the purpose of quota increase, even when this expectedUsage value does not make any sense (i.e. it
        is lower than the current database size). As a result, the client would grant a quota that is equal
        to the previous quota and the JS would not be able to insert any data.

        In order to address the issue, when the current quota is exceeded and Database::didExceedQuota()
        is called, we now make sure that the expectedUsage value is greater than the current quota. If it
        is not, we provide `current quota + 5MB` as expected usage to the client. This way, the client will
        grant a quota that is actually increased (provided that the user accepts).

        Test: storage/websql/transaction-database-expand-quota.html

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::setEstimatedSize):
        (WebCore::Database::didExceedQuota):
        * Modules/webdatabase/Database.h:

2018-09-21  Youenn Fablet  <youenn@apple.com>

        Use biplanar CVPixelBuffer for black frames sent to libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=189837

        Reviewed by Eric Carlson.

        Covered by webrtc/video-mute.html.

        Add support to call CVPixelBufferGetBytesPerRowOfPlane.
        Make createBlackPixelBuffer use a biplanar CVPixelBuffer as this is better supported in libwebrtc.
        It is also what is being used in iOS for capture.

        * platform/cocoa/CoreVideoSoftLink.cpp:
        * platform/cocoa/CoreVideoSoftLink.h:
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::createBlackPixelBuffer):

2018-09-21  Youenn Fablet  <youenn@apple.com>

        Add RTCCodecStats support
        https://bugs.webkit.org/show_bug.cgi?id=189792
        <rdar://problem/32370668>

        Reviewed by Eric Carlson.

        Covered by updated and rebased tests.

        * Modules/mediastream/RTCStatsReport.h:
        Removed fields that are already defined in the base class.
        (WebCore::RTCStatsReport::CodecStats::CodecStats):
        Add support for RTCCodecStats.
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::OnStatsDelivered):
        * Modules/mediastream/libwebrtc/LibWebRTCStatsCollector.cpp:
        (WebCore::fillRTCRTPStreamStats):
        (WebCore::fillRTCCodecStats):
        (WebCore::LibWebRTCStatsCollector::OnStatsDelivered):
        Add routines to fill RTCCodecStats from libwebrtc stats.

2018-09-20  Simon Fraser  <simon.fraser@apple.com>

        Make "overflow: overlay" a synonym for "overflow: auto"
        https://bugs.webkit.org/show_bug.cgi?id=189811

        Reviewed by Zalan Bujtas.
        
        The "overlay" value for overflow was added for an internal Safari feature, and only has
        an effect (allow the scrollbar to overlap the content) with legacy scrollbars on macOS.
        It's little used on the web.

        To simplify code in rendering, just make "overflow: overlay" behave like "overflow: auto".
        It's still parsed, but turns into an "auto" value internally, and will be returned from getComputedStyle
        as "auto".

        Test: fast/css/getComputedStyle/getComputedStyle-overflow.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator Overflow const):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/StyleResolver.cpp:
        (WebCore::isScrollableOverflow):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::nodeRespondingToScrollWheelEvents):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::hasVerticalScrollbarWithAutoBehavior const):
        (WebCore::RenderBox::hasHorizontalScrollbarWithAutoBehavior const):
        * rendering/RenderLayer.cpp:
        (WebCore::styleDefinesAutomaticScrollbar):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::isScrollableOverflow):
        * rendering/style/RenderStyleConstants.h:

2018-09-21  Youenn Fablet  <youenn@apple.com>

        Centralize which CVPixelBuffer format is being used
        https://bugs.webkit.org/show_bug.cgi?id=189772

        Reviewed by Eric Carlson.

        Get the format type from a single point.
        This changes the video capture and mock realtime video sources on Mac to use a biplanar format. 
        No observable change of behavior.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setSizeAndFrameRateWithPreset):
        (WebCore::AVVideoCaptureSource::setupCaptureSession):
        (WebCore::AVVideoCaptureSource::captureOutputDidOutputSampleBufferFromConnection):
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::updateSampleBuffer):
        (WebCore::MockRealtimeVideoSourceMac::setSizeAndFrameRateWithPreset):
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::createBlackPixelBuffer):
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp:
        (WebCore::RealtimeOutgoingVideoSourceCocoa::sampleBufferUpdated):
        * platform/mediastream/mac/RealtimeVideoUtilities.h: Added.

2018-09-21  Antoine Quint  <graouts@apple.com>

        REGRESSION (r235962-r235963): Layout Test animations/suspend-resume-animation-events.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=189607
        <rdar://problem/44652315>

        Reviewed by Dean Jackson.

        There is no reason we shouldn't return the document timeline's time when suspended as otherwise animations may
        report an unresolved current time when suspended which would wreak havoc when invalidating what DOM events to
        dispatch for CSS Animations and Transitions. We also shouldn't be invalidation DOM events when suspended.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::currentTime):
        (WebCore::DocumentTimeline::DocumentTimeline::performInvalidationTask):

2018-09-21  Mike Gorse  <mgorse@suse.com>

        Build tools should work when the /usr/bin/python is python3
        https://bugs.webkit.org/show_bug.cgi?id=156674

        Reviewed by Michael Catanzaro.

        No new tests (no behavior change).

        * platform/network/create-http-header-name-table: remove xreadlines.

2018-09-21  Jer Noble  <jer.noble@apple.com>

        [EME] Introduce the concept of CDMInstanceSession.
        https://bugs.webkit.org/show_bug.cgi?id=189725

        Reviewed by Eric Carlson.

        Currently, the same CDMInstance owned by a MediaKeys object is passed to every MediaKeySession created by that
        MediaKeys, and since the CDMInstance has only a single CDMInstanceClient, subsequent MediaKeySessions prevent
        previous ones from getting updates.

        Add a new virtual interface, CDMInstanceSession, to be passed to MediaKeySession upon creation. Refactor
        CDMInstanceClearKey and CDMInstanceFairPlayStreamingAVFObjC to adopt this new interface.

        Drive-by fixes: Made a number of virtual overrides in final classes final themselves.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::create):
        (WebCore::MediaKeySession::MediaKeySession):
        (WebCore::MediaKeySession::generateRequest):
        (WebCore::MediaKeySession::load):
        (WebCore::MediaKeySession::update):
        (WebCore::MediaKeySession::remove):
        (WebCore::MediaKeySession::updateKeyStatuses):
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::createSession):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/encryptedmedia/CDMInstance.h:
        (WebCore::CDMInstance::setHDCPStatus):
        (WebCore::CDMInstance::setClient): Deleted.
        (WebCore::CDMInstance::clearClient): Deleted.
        * platform/encryptedmedia/CDMInstanceSession.h: Copied from Source/WebCore/platform/encryptedmedia/CDMInstance.h.
        (WebCore::CDMInstanceSession::setClient):
        (WebCore::CDMInstanceSession::clearClient):
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::parseLicenseFormat):
        (WebCore::CDMInstanceClearKey::keySystem const):
        (WebCore::CDMInstanceClearKey::createSession):
        (WebCore::CDMInstanceSessionClearKey::requestLicense):
        (WebCore::CDMInstanceSessionClearKey::keys const):
        (WebCore::CDMInstanceSessionClearKey::updateLicense):
        (WebCore::CDMInstanceSessionClearKey::loadSession):
        (WebCore::CDMInstanceSessionClearKey::closeSession):
        (WebCore::CDMInstanceSessionClearKey::removeSessionData):
        (WebCore::CDMInstanceSessionClearKey::storeRecordOfKeyUsage):
        (WebCore::CDMInstanceClearKey::requestLicense): Deleted.
        (WebCore::CDMInstanceClearKey::keys const): Deleted.
        (WebCore::CDMInstanceClearKey::updateLicense): Deleted.
        (WebCore::CDMInstanceClearKey::loadSession): Deleted.
        (WebCore::CDMInstanceClearKey::closeSession): Deleted.
        (WebCore::CDMInstanceClearKey::removeSessionData): Deleted.
        (WebCore::CDMInstanceClearKey::storeRecordOfKeyUsage): Deleted.
        * platform/encryptedmedia/clearkey/CDMClearKey.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::createSession):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::processContentKeyRequestForSession):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::processNextContentKeyRequest):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::keySystem const):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::didProvideRequest):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::didProvideRenewingRequest):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::didProvidePersistableRequest):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::didFailToProvideRequest):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::requestDidSucceed):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::shouldRetryRequestForReason):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::sessionIdentifierChanged):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::outputObscuredDueToInsufficientExternalProtectionChanged):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::CDMInstanceSessionFairPlayStreamingAVFObjC):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::keyIDs):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::requestLicense):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::updateLicense):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::loadSession):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::closeSession):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::removeSessionData):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::storeRecordOfKeyUsage):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::setClient):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::clearClient):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvideRequest):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvideRenewingRequest):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvidePersistableRequest):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didFailToProvideRequest):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::requestDidSucceed):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::shouldRetryRequestForReason):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::sessionIdentifierChanged):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::outputObscuredDueToInsufficientExternalProtectionChanged):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::isLicenseTypeSupported const):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::isLicenseTypeSupported const): Deleted.
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::keyIDs): Deleted.
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::requestLicense): Deleted.
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::updateLicense): Deleted.
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::loadSession): Deleted.
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::closeSession): Deleted.
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::removeSessionData): Deleted.
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::storeRecordOfKeyUsage): Deleted.
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::setClient): Deleted.
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::clearClient): Deleted.
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMInstance::keySystem const):
        (WebCore::MockCDMInstance::createSession):
        (WebCore::MockCDMInstanceSession::MockCDMInstanceSession):
        (WebCore::MockCDMInstanceSession::requestLicense):
        (WebCore::MockCDMInstanceSession::updateLicense):
        (WebCore::MockCDMInstanceSession::loadSession):
        (WebCore::MockCDMInstanceSession::closeSession):
        (WebCore::MockCDMInstanceSession::removeSessionData):
        (WebCore::MockCDMInstanceSession::storeRecordOfKeyUsage):
        (WebCore::MockCDMInstance::requestLicense): Deleted.
        (WebCore::MockCDMInstance::updateLicense): Deleted.
        (WebCore::MockCDMInstance::loadSession): Deleted.
        (WebCore::MockCDMInstance::closeSession): Deleted.
        (WebCore::MockCDMInstance::removeSessionData): Deleted.
        (WebCore::MockCDMInstance::storeRecordOfKeyUsage): Deleted.
        * testing/MockCDMFactory.h:
        (WebCore::MockCDMInstance::factory const):
        (WebCore::MockCDMInstance::distinctiveIdentifiersAllowed const):
        (WebCore::MockCDMInstance::persistentStateAllowed const):

2018-09-21  Alicia Boya García  <aboya@igalia.com>

        [MSE] Fix comparsion with uninitialized greatestDecodeDuration
        https://bugs.webkit.org/show_bug.cgi?id=189805

        Reviewed by Michael Catanzaro.

        This bug was causing greatestDecodeDuration to never be initialized,
        which in turned caused unintended frame erase as distant appends where
        not being recognized as distinct coded frame groups.

        A test reproducing the sequence of appends that caused unintended
        frame deletion has also been added (media-source-append-out-of-order.html).

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):

2018-09-21  Antoine Quint  <graouts@apple.com>

        [Web Animations] Accelerated animations don't get suspended
        https://bugs.webkit.org/show_bug.cgi?id=189783
        <rdar://problem/44652315>

        Unreviewed, correct a merge error in the previous commit.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::performInvalidationTask):

2018-09-21  Antoine Quint  <graouts@apple.com>

        [Web Animations] Accelerated animations don't get suspended
        https://bugs.webkit.org/show_bug.cgi?id=189783
        <rdar://problem/43033568>

        Reviewed by Dean Jackson.

        Test: webanimations/accelerated-animation-suspension.html

        We used to set the flag that marked the timeline as suspended prior to notifying animations that they need to be suspended.
        However, since the timeline was marked as suspended, querying the running state of the animations would indicate that the
        animations weren't running since a suspended timeline would identify its animations as not running. As such we would fail
        to pause the accelerated animations because they were already not marked as running. We now set the suspended flag on the
        timeline _after_ suspending its animations.

        We also fix a bug in the new internals.acceleratedAnimationsForElement() test function so that we read from the actual
        CA animations and not from a stale list of animations which would not indicate the correct animation speeds.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::suspendAnimations):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::acceleratedAnimationsForTesting):

2018-09-21  Zan Dobersek  <zdobersek@igalia.com>

        TransformationMatrix::toColumnMajorFloatArray() should return a std::array<> object
        https://bugs.webkit.org/show_bug.cgi?id=189823

        Reviewed by Michael Catanzaro.

        Alias the TransformationMatrix::FloatMatrix4 type to
        std::array<float, 16>. Instead of filling out the array object that's
        passed in through a reference parameter, return the std::array<>
        object from the function.

        * Modules/webvr/VRFrameData.cpp:
        (WebCore::matrixToArray):
        * Modules/webvr/VRStageParameters.cpp:
        (WebCore::VRStageParameters::sittingToStandingTransform const):
        * platform/graphics/texmap/TextureMapperShaderProgram.cpp:
        (WebCore::TextureMapperShaderProgram::setMatrix):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::toColumnMajorFloatArray const):
        * platform/graphics/transforms/TransformationMatrix.h:

2018-09-21  Zan Dobersek  <zdobersek@igalia.com>

        FloatQuad point getters should return const references
        https://bugs.webkit.org/show_bug.cgi?id=189821

        Reviewed by Yusuke Suzuki.

        Be pedantic and have the FloatQuad point getters return const references
        to the FloatPoint member variables, instead of technically creating
        copies of them (though much of this copying is eliminated when the
        getters are inlined).

        * platform/graphics/FloatQuad.h:
        (WebCore::FloatQuad::p1 const):
        (WebCore::FloatQuad::p2 const):
        (WebCore::FloatQuad::p3 const):
        (WebCore::FloatQuad::p4 const):

2018-09-20  Antoine Quint  <graouts@apple.com>

        [Web Animations] DocumentTimeline::updateAnimations() is called endlessly
        https://bugs.webkit.org/show_bug.cgi?id=189784
        <rdar://problem/41705679>

        Reviewed by Dean Jackson.

        Test: webanimations/accelerated-animation-interruption-display-none.html

        We have code that keeps queueing pending accelerated actions for an animation that does not have a renderer until it has one
        so that we can deal with situations where animations are ready to commited before its composited renderer is available. This
        code ended up running continuously when an element with an accelerated animation had its renderer removed without the animation
        being removed itself, such as setting "display: none" on an element with an acceelerated CSS Animation targeting it.

        We fix this by queueing up a "Stop" accelerated action when updating the accelerated state if there is no renderer for the current
        animation target. Then, we no longer re-queue pending accelerated actions if the last queued operation is "Stop". This ensures that
        we no longer queue actions endlessly when there is no longer a visible animation.

        To test this, we add a new internals.numberOfAnimationTimelineInvalidations() method that indicates the number of times the current
        document's animation timeline was invalidated.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::updateAnimations):
        (WebCore::DocumentTimeline::numberOfAnimationTimelineInvalidationsForTesting const):
        * animation/DocumentTimeline.h:
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::updateAcceleratedAnimationState): If the animation target does not have a renderer and it's still
        marked as running, enqueue a "Stop" accelerated action.
        (WebCore::KeyframeEffectReadOnly::addPendingAcceleratedAction): If we enqueue a "Stop" accelerated action, remove any other queued
        action so that we only process the "Stop" action, which would have superseded all previously queued actions anyway.
        (WebCore::KeyframeEffectReadOnly::applyPendingAcceleratedActions): Only re-queue pending accelerated actions when a composited renderer
        is not yet available if we don't have a "Stop" action queued.
        * testing/Internals.cpp:
        (WebCore::Internals::numberOfAnimationTimelineInvalidations const):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-09-21  Yacine Bandou  <yacine.bandou@softathome.com>

        [EME] Fix typo in WebM sanitization variable
        https://bugs.webkit.org/show_bug.cgi?id=189789

        Reviewed by Xabier Rodriguez-Calvar.

        This commit corrects a typo in the name of a local variable, sanitizedBuffer
        instead of sanitazedBuffer.

        * Modules/encryptedmedia/InitDataRegistry.cpp:
        (WebCore::extractKeyIDsWebM):

2018-09-20  Dean Jackson  <dino@apple.com>

        Restrict the total combined size of backdrop filters
        https://bugs.webkit.org/show_bug.cgi?id=189812
        <rdar://problem/44532782>

        Reviewed by Simon Fraser.

        If the total area of all backdrop filters on the page gets
        too large, the universe collapses in on itself and we enter
        the Quantum Realm (i.e. crash horribly).

        Put a hard limit on the total coverage, and ignore any backdrop
        filters after the limit. This might break some content, but
        such content is likely not doing things in the most optimal manner.
        There isn't any reason to have a backdrop larger than the size of
        the screen, because you'd be better off applying a foreground
        filter to the main content and showing something above it.

        Tests: css3/filters/backdrop/resource-use-add-more-layers.html
               css3/filters/backdrop/resource-use-excessive.html
               css3/filters/backdrop/resource-use-ok.html
               css3/filters/backdrop/resource-use-remove-some-layers.html

        * platform/graphics/ca/GraphicsLayerCA.cpp: Pick a fairly small maximum size. We
        can consider increasing this if necessary, and as devices with less RAM are
        upgraded.
        (WebCore::GraphicsLayerCA::recursiveCommitChanges): Gather the accumulated size
        of backdrop filters into the commit state as we are recursing through the tree.
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers): Force any layer
        with backdrop filters, or any that is removing backdrop filters, into an update.
        (WebCore::GraphicsLayerCA::updateBackdropFilters): Update the logic to first
        check if this backdrop layer causes us to exceed the total allowed size, and if
        it does, forbid it from getting the GraphicsLayer that composits the backdrop.

        * platform/graphics/ca/GraphicsLayerCA.h: Remove const from some parameters so
        that we can use the CommitState to hold the accumulated size.

2018-09-20  Benjamin Poulain  <benjamin@webkit.org>

        Adopt safe-area-insets on ImageDocument
        https://bugs.webkit.org/show_bug.cgi?id=189774

        Reviewed by Tim Horton.
        rdar://problem/44624432

        By having the safe-area insets on the image, we ensure that they only
        grow the document if there is not enough space. This also ensures the image
        does not have parts under UI elements.

        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):
        (WebCore::ImageDocument::imageUpdated):

2018-09-20  Zalan Bujtas  <zalan@apple.com>

        Release assert under RenderView::pageOrViewLogicalHeight
        https://bugs.webkit.org/show_bug.cgi?id=189798
        <rdar://problem/43659749>

        Reviewed by Simon Fraser.

        Only the mainframe's render view is sized to the page while printing.
        Use the matching check (see RenderView::layout) when accessing m_pageLogicalSize.

        Test: printing/crash-while-formatting-subframe-for-printing.html

        * rendering/RenderView.cpp:
        (WebCore::RenderView::pageOrViewLogicalHeight const):

2018-09-20  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION(r196265): WKWebView fires mouseover, mouseenter, and mouseleave events even when it's in a background window
        https://bugs.webkit.org/show_bug.cgi?id=187545
        <rdar://problem/42401575>

        Reviewed by Ryosuke Niwa.

        When the window is not active, we should only update the scrollbar for mouse events. GTK
        apps have different expectation on this behavior.

        Test: fast/events/inactive-window-no-mouse-event.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::shouldSendMouseEventsToInactiveWindows const):
        * page/EventHandler.h:

2018-09-20  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r235976.

        Broke ARM

        Reverted changeset:

        "Use a Variant instead of a union in CSSSelector"
        https://bugs.webkit.org/show_bug.cgi?id=188559
        https://trac.webkit.org/changeset/235976

2018-09-20  Oriol Brufau  <obrufau@igalia.com>

        Fix 'border' serialization with both common and uncommon values
        https://bugs.webkit.org/show_bug.cgi?id=189597

        Reviewed by Simon Fraser.

        Remove CommonValueMode enum and make borderPropertyValue always return null
        when there are uncommon values (the previous ReturnNullOnUncommonValues mode).

        Test: fast/css/getPropertyValue-border.html
        Test: fast/dom/css-shorthand-common-value.html

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue const):
        (WebCore::StyleProperties::borderPropertyValue const):
        (WebCore::StyleProperties::asText const):
        * css/StyleProperties.h:

2018-09-20  Justin Michaud  <justin_michaud@apple.com>

        Implement CSS Custom Properties and Values Skeleton
        https://bugs.webkit.org/show_bug.cgi?id=189694

        Reviewed by Simon Fraser.

        Add feature flag, CSS.registerProperty binding and registered property set in Document.h
        for the css custom properties and values api.

        Test: css-properties-values-api/registerProperty.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSRegisteredCustomProperty.h: Added.
        * css/DOMCSSCustomPropertyDescriptor.h: Added.
        * css/DOMCSSCustomPropertyDescriptor.idl: Added.
        * css/DOMCSSNamespace.h:
        * css/DOMCSSRegisterCustomProperty.cpp: Added.
        (WebCore::DOMCSSRegisterCustomProperty::registerProperty):
        (WebCore::DOMCSSRegisterCustomProperty::from):
        (WebCore::DOMCSSRegisterCustomProperty::supplementName):
        * css/DOMCSSRegisterCustomProperty.h: Added.
        * css/DOMCSSRegisterCustomProperty.idl: Added.
        * css/parser/CSSParserContext.cpp:
        * dom/Document.cpp:
        (WebCore::Document::registerCSSProperty):
        * dom/Document.h:
        * features.json:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setCSSCustomPropertiesAndValuesEnabled):
        (WebCore::RuntimeEnabledFeatures::cssCustomPropertiesAndValuesEnabled const):

2018-09-20  Justin Michaud  <justin_michaud@apple.com>

        JS bindings generator should support EnabledAtRuntime for static methods
        https://bugs.webkit.org/show_bug.cgi?id=189729

        Reviewed by Chris Dumez.

        Add support for EnabledAtRuntime to static methods in the JS bindings
        code generator.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateRuntimeEnableConditionalStringForExposed):
        (GenerateRuntimeEnableConditionalString):
        (GetRuntimeEnabledStaticProperties):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::JSTestGlobalObjectConstructor::initializeProperties):
        (WebCore::JSTestGlobalObject::finishCreation):
        (WebCore::jsTestGlobalObjectConstructorFunctionEnabledAtRuntimeOperationStaticBody):
        (WebCore::jsTestGlobalObjectConstructorFunctionEnabledAtRuntimeOperationStatic):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::initializeProperties):
        (WebCore::jsTestObjConstructorEnabledAtRuntimeAttributeStaticGetter):
        (WebCore::jsTestObjConstructorEnabledAtRuntimeAttributeStatic):
        (WebCore::setJSTestObjConstructorEnabledAtRuntimeAttributeStaticSetter):
        (WebCore::setJSTestObjConstructorEnabledAtRuntimeAttributeStatic):
        (WebCore::jsTestObjConstructorFunctionEnabledAtRuntimeOperationStaticBody):
        (WebCore::jsTestObjConstructorFunctionEnabledAtRuntimeOperationStatic):
        * bindings/scripts/test/TestGlobalObject.idl:
        * bindings/scripts/test/TestObj.idl:

2018-09-20  Per Arne Vollan  <pvollan@apple.com>

        [WebVTT] Update the parser according to the new region syntax.
        https://bugs.webkit.org/show_bug.cgi?id=189767

        Reviewed by Eric Carlson.

        The majority of the code added in this patch is adopted from the Chromium project, which has added
        support for the new region syntax. The complete parser specification can be found at
        https://w3c.github.io/webvtt/#file-parsing. One small difference in behavior is that the new parser
        will not add regions with empty id.

        No new tests, covered by existing tests.

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::getNewRegions):
        (WebCore::WebVTTParser::parse):
        (WebCore::WebVTTParser::collectRegionSettings):
        (WebCore::WebVTTParser::collectWebVTTBlock):
        (WebCore::WebVTTParser::checkAndRecoverCue):
        (WebCore::WebVTTParser::checkAndCreateRegion):
        (WebCore::WebVTTParser::checkAndStoreRegion):
        (WebCore::WebVTTParser::collectMetadataHeader): Deleted.
        (WebCore::WebVTTParser::createNewRegion): Deleted.
        * html/track/WebVTTParser.h:

2018-09-20  Alicia Boya García  <aboya@igalia.com>

        [GStreamer][MSE] Add a default sample duration
        https://bugs.webkit.org/show_bug.cgi?id=189788

        Some WebM files don't provide sample durations, so we need to provide
        a safe default in order for them to be playable.

        Reviewed by Michael Catanzaro.

        * platform/graphics/gstreamer/MediaSampleGStreamer.cpp:
        (WebCore::MediaSampleGStreamer::MediaSampleGStreamer):

2018-09-20  Alicia Boya García  <aboya@igalia.com>

        [MSE] Use some tolerance when deciding whether a frame should be appended to the decode queue
        https://bugs.webkit.org/show_bug.cgi?id=189782

        Reviewed by Xabier Rodriguez-Calvar.

        Ideally, container formats should use exact timestamps and frames
        should not overlap. Unfortunately, there are lots of files out there
        where this is not always the case.

        This is particularly a problem in WebM, where timestamps are expressed
        in a power of 10 timescale, which forces some rounding.

        This patch makes SourceBuffer allow frames with a small overlaps
        (<=1ms) as those usually found in WebM. 1 ms is chosen because it's
        the default time scale of WebM files.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):

2018-09-20  Yacine Bandou  <yacine.bandou@softathome.com>

        [EME] Add WebM sanitization
        https://bugs.webkit.org/show_bug.cgi?id=189740

        Reviewed by Xabier Rodriguez-Calvar.

        This patch adds support for sanitizing the WebM initialization data,
        ensures there are no bogus values.
        See https://www.w3.org/TR/encrypted-media/#dom-mediakeysession-generaterequest.

        Tests: imported/w3c/web-platform-tests/encrypted-media/clearkey-generate-request-disallowed-input.https.html

        * Modules/encryptedmedia/InitDataRegistry.cpp:
        (WebCore::sanitizeWebM): Added implementation, check if the initialization data doesn't empty and its size
        should be less than 64KB, return the buffer copy if it is ok, otherwise a nullptr.
        (WebCore::extractKeyIDsWebM): Added implementation.

2018-09-20  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Utilities cleanups
        https://bugs.webkit.org/show_bug.cgi?id=189699

        Reviewed by Xabier Rodriguez-Calvar.

        The GstMappedBuffer now has a move constructor so that it can be easily
        reused in the webaudiosrc element. The now-unused corresponding
        buffer-mapping utilities are removed from the code-base.

        The HTTP source element used to handle a GstBuffer in its private
        structure but this is no longer required since data is now pushed
        in chunks, see bug #182829.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcLoop):
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::createGstBuffer): Deleted.
        (WebCore::createGstBufferForData): Deleted.
        (WebCore::getGstBufferDataPointer): Deleted.
        (WebCore::mapGstBuffer): Deleted.
        (WebCore::unmapGstBuffer): Deleted.
        * platform/graphics/gstreamer/GStreamerCommon.h:
        (WebCore::GstMappedBuffer::create): New method returning a
        reference to a newly created GstMappedBuffer instance.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStop): Remove reference to unused GstBuffer.
        (CachedResourceStreamingClient::dataReceived): Ditto.

2018-09-20  Simon Fraser  <simon.fraser@apple.com>

        Fix crash under FontCache::purgeInactiveFontData() when a memory warning fires
        https://bugs.webkit.org/show_bug.cgi?id=189722
        rdar://problem/44182860

        Reviewed by Myles C. Maxfield.
        
        Hashing of FontPlatformData for cachedFonts() is somewhat broken because CFEqual() on CTFont
        can return false when the fonts are actually the same, and have the same CFHash(). This 
        can result in multiple entries in cachedFonts() with the same Font.
        
        Then in FontCache::purgeInactiveFontData(), the loop that appends fonts to fontsToDelete
        gets the value by reference, and WTFMoves it into fontsToDelete. This nulls out all
        the entries sharing the same value, leaving null entries in the hash table.
        We later crash at font->hasOneRef() when using one of those null entries.
        
        Fix by making a copy of the RefPtr<Font> in the loop, so the WTFMove doesn't nuke
        the hash table entries. The entries will get removed at cachedFonts().remove() lower down.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::purgeInactiveFontData):

2018-09-20  Antoine Quint  <graouts@apple.com>

        [Web Animations] Provide a way to query accelerated animations for internal testing
        https://bugs.webkit.org/show_bug.cgi?id=189762

        Reviewed by Dean Jackson.

        Expose a new internals.acceleratedAnimationsForElement(element) method to allow layout tests to query the current list
        of accelerated animations for a given element. Currently only the animated property and animation speed are exposed, which
        will allow us to identify missing, running and paused accelerated animations.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::acceleratedAnimationsForElement const):
        * animation/DocumentTimeline.h:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::acceleratedAnimationsForTesting const):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * testing/Internals.cpp:
        (WebCore::Internals::acceleratedAnimationsForElement):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-09-19  Ryosuke Niwa  <rniwa@webkit.org>

        Improve node statistics for rare data
        https://bugs.webkit.org/show_bug.cgi?id=189775

        Reviewed by Simon Fraser.

        Report reasons we created NodeRareData and ElementRareData in node statistics.

        Added NodeRareData::useTypes and ElementRareData::useTypes which returns OptionSet<NodeRareData::UseType>
        indicating which instance member of the rare data is currently in use.

        * dom/Element.cpp:
        * dom/Element.h:
        * dom/ElementRareData.h:
        (WebCore::defaultMinimumSizeForResizing):
        (WebCore::ElementRareData::useTypes const):
        * dom/Node.cpp:
        (WebCore::stringForRareDataUseType):
        (WebCore::Node::dumpStatistics):
        * dom/NodeRareData.cpp:
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::useTypes const):

2018-09-19  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r235917): 2% regression in Dromaeo CSS selector on MacBookPro11,4
        https://bugs.webkit.org/show_bug.cgi?id=189738

        Reviewed by Yusuke Suzuki.

        The regression was caused by the regundant walk to the parent element. Removed it to fix the regression.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateNthChildParentCheckAndRelationUpdate):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateNthLastChildParentCheckAndRelationUpdate):

2018-09-19  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add optional cap on partitioned cache max age
        https://bugs.webkit.org/show_bug.cgi?id=189711
        <rdar://problem/39246837>

        Reviewed by Antti Koivisto and Chris Dumez.

        Test: http/tests/resourceLoadStatistics/cap-cache-max-age-for-prevalent-resource.html

        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::maxAgeCacheCap):
            Checks if a max age cap is set and returns it if the request
            represents a prevalent resource.
        (WebCore::NetworkStorageSession::setCacheMaxAgeCapForPrevalentResources):
        (WebCore::NetworkStorageSession::resetCacheMaxAgeCapForPrevalentResources):
            New functionality to receive a max age cap setting in the session.

2018-09-19  Youenn Fablet  <youenn@apple.com>

        Layout Test webrtc/video-mute.html is flaky.
        https://bugs.webkit.org/show_bug.cgi?id=177501

        Reviewed by Eric Carlson.

        Covered by updated test expectation.

        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::createBlackPixelBuffer): Make sure the whole buffer is properly initialized.

2018-09-19  David Kilzer  <ddkilzer@apple.com>

        WebCoreNSURLSession leaks an NSString (_sessionDescription) in -dealloc
        <https://webkit.org/b/189742>
        <rdar://problem/44589774>

        Reviewed by Joseph Pecoraro.

        * platform/network/cocoa/WebCoreNSURLSession.h:
        (WebCoreNSURLSession._sessionDescription): Change type from
        NSString * to RetainPtr<NSString>.
        * platform/network/cocoa/WebCoreNSURLSession.mm: Remove
        @synthesized statement for sessionDescription so that custom
        methods can be implemented to handle RetainPtr<NSString>.
        (-[WebCoreNSURLSession sessionDescription]): Add.
        (-[WebCoreNSURLSession setSessionDescription:]): Add.

2018-09-19  Youenn Fablet  <youenn@apple.com>

        Implement sender/receiver getStats
        https://bugs.webkit.org/show_bug.cgi?id=189707

        Reviewed by Eric Carlson.

        Add support for sender and receiver getStats.
        Also add support for peer connection selector parameter.

        Add the plumbing of the selector to LibWebRTCMediaEndpoint.
        Then make use of libwebrtc overloaded methods to retrieve the right stats.

        Covered by updated/rebased tests.

        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::getStats):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCRtpReceiver.cpp:
        (WebCore::RTCRtpReceiver::RTCRtpReceiver):
        (WebCore::RTCRtpReceiver::getStats):
        * Modules/mediastream/RTCRtpReceiver.h:
        (WebCore::RTCRtpReceiver::create):
        (WebCore::RTCRtpReceiver::backend):
        * Modules/mediastream/RTCRtpReceiver.idl:
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::create):
        (WebCore::RTCRtpSender::RTCRtpSender):
        (WebCore::RTCRtpSender::getStats):
        * Modules/mediastream/RTCRtpSender.h:
        * Modules/mediastream/RTCRtpSender.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::getStats):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::getStats):
        (WebCore::backendFromRTPSender):
        (WebCore::createReceiverForSource):
        (WebCore::LibWebRTCPeerConnectionBackend::createReceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::videoReceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::audioReceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::addTrack):
        (WebCore::LibWebRTCPeerConnectionBackend::addUnifiedPlanTransceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::addTransceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::newRemoteTransceiver):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.h:

2018-09-19  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r236006): New waitingForKey() requirement breaks Modern EME tests.
        https://bugs.webkit.org/show_bug.cgi?id=189720
        <rdar://problem/44572140>

        Reviewed by Xabier Rodriguez-Calvar.

        Always call waitingForKey() after calling initializationDataEncountered().

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::initializationDataEncountered):

2018-09-19  Philippe Normand <pnormand@igalia.com>

        [GStreamer] Add support for AV1 decoding
        https://bugs.webkit.org/show_bug.cgi?id=189647

        Tweaked by Xabier Rodriguez Calvar <calvaris@igalia.com>.
        Reviewed by Žan Doberšek.

        AV1 can be muxed in MP4 and WebM containers. The test is an adaptation from Chromium's unittest:
        https://chromium.googlesource.com/chromium/src/+/master/content/browser/media/media_canplaytype_browsertest.cc

        Test: media/media-can-play-av1.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::supportsType): Add AV1
        support. The av01 codec has to be explicitely checked, along with
        the presence of a compatible AV1 decoder.

2018-09-18  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Limit capturing extra metrics for Web Inspector when not required.
        https://bugs.webkit.org/show_bug.cgi?id=189520

        Reviewed by Alex Christensen.

        Respect the value of NetworkDataTask::shouldCaptureExtraNetworkLoadMetrics() to reduce the process
        time when they are not needed.

        No new tests because there's no behavior change.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::getNetworkLoadMetrics):
        (WebCore::CurlHandle::addExtraNetworkLoadMetrics):
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::CurlRequest):
        (WebCore::CurlRequest::updateNetworkLoadMetrics):
        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::create):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::createCurlRequest):

2018-09-18  Megan Gardner  <megan_gardner@apple.com>

        Support Images Module Level 4's double-position gradient color stop syntax
        https://bugs.webkit.org/show_bug.cgi?id=186154
        <rdar://problem/44158152>

        Reviewed by Simon Fraser.

        The CSS spec for all gradients allows for each color stop to have two angles to be used for hints.
        This makes pie chart and checkerboard conic gradients much simpler to write.
        Any time you want to have a hard line in a gradient, this syntax simplifies the gradient specification.

        Test: fast/gradients/conic-two-hints.html
        Test: fast/gradients/linear-two-hints-angle.html
        Test: fast/gradients/linear-two-hints.html
        Test: fast/gradients/radial-two-hints.html

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeAngularGradientColorStops): Removed.
        (WebCore::CSSPropertyParserHelpers::consumeGradientColorStops):

2018-09-18  Simon Fraser  <simon.fraser@apple.com>

        Remove the unused RenderLayerCompositor::enclosingCompositorFlushingLayers()
        https://bugs.webkit.org/show_bug.cgi?id=189689

        Reviewed by Alex Christensen.

        enclosingCompositorFlushingLayers() was added in r76196 but never used. Also use
        a SetForScope<>.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::enclosingCompositorFlushingLayers const): Deleted.
        * rendering/RenderLayerCompositor.h:

2018-09-18  Joseph Pecoraro  <pecoraro@apple.com>

        [macOS] Frequent leaks seen under WebCore::gpuIDForDisplayMask
        https://bugs.webkit.org/show_bug.cgi?id=189685
        <rdar://problem/44541974>

        Reviewed by Per Arne Vollan.

        * platform/mac/PlatformScreenMac.mm:
        (WebCore::gpuIDForDisplayMask):

2018-09-18  Youenn Fablet  <youenn@apple.com>

        Implement RTCRtpReceiver getContributingSources/getSynchronizationSources
        https://bugs.webkit.org/show_bug.cgi?id=189671

        Reviewed by Eric Carlson.

        Introduce implementation of these two methods by calling the libwebrtc corresponding method.
        Add corresponding IDL as per spec.
        Covered by rebased WPT tests.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/mediastream/RTCRtpContributingSource.h: Added.
        * Modules/mediastream/RTCRtpContributingSource.idl: Added.
        * Modules/mediastream/RTCRtpReceiver.h:
        (WebCore::RTCRtpReceiver::getContributingSources const):
        (WebCore::RTCRtpReceiver::getSynchronizationSources const):
        * Modules/mediastream/RTCRtpReceiver.idl:
        * Modules/mediastream/RTCRtpReceiverBackend.h:
        (WebCore::RTCRtpReceiverBackend::getContributingSources const):
        (WebCore::RTCRtpReceiverBackend::getSynchronizationSources const):
        * Modules/mediastream/RTCRtpSynchronizationSource.h: Added.
        * Modules/mediastream/RTCRtpSynchronizationSource.idl: Added.
        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.cpp:
        (WebCore::fillRTCRtpContributingSource):
        (WebCore::toRTCRtpContributingSource):
        (WebCore::toRTCRtpSynchronizationSource):
        (WebCore::LibWebRTCRtpReceiverBackend::getContributingSources const):
        (WebCore::LibWebRTCRtpReceiverBackend::getSynchronizationSources const):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2018-09-18  Youenn Fablet  <youenn@apple.com>

        Enable Unified Plan by default
        https://bugs.webkit.org/show_bug.cgi?id=189675

        Reviewed by Eric Carlson.

        RTCRtpTransceiver.currentDirection is now gated by the unified plan runtime flag.
        This will allow easy feature detection of unified plan support.
        Covered by updated test.

        * Modules/mediastream/RTCRtpTransceiver.idl:

2018-09-18  Per Arne Vollan  <pvollan@apple.com>

        [WebVTT] change "middle" to "center" for consistency with CSS
        https://bugs.webkit.org/show_bug.cgi?id=158478

        Reviewed by Eric Carlson.

        No new tests, covered by existing tests.

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties):
        * html/track/VTTCue.cpp:
        (WebCore::centerKeyword):
        (WebCore::VTTCue::initialize):
        (WebCore::VTTCue::align const):
        (WebCore::VTTCue::setAlign):
        (WebCore::VTTCue::calculateDisplayParameters):
        (WebCore::VTTCue::setCueSettings):
        (WebCore::middleKeyword): Deleted.
        * html/track/VTTCue.h:
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTTreeBuilder::buildFromString):

2018-09-18  Chris Dumez  <cdumez@apple.com>

        "DidFirstVisuallyNonEmptyLayout" callback does not get called when restoring a page from PageCache
        https://bugs.webkit.org/show_bug.cgi?id=189681
        <rdar://problem/44526171>

        Reviewed by Alex Christensen and Zalan Bujtas.

        The "DidFirstVisuallyNonEmptyLayout" callback was not getting called when restoring a page from PageCache
        because the FrameView is restored from PageCache and we would fail to restore its flags (such as
        m_firstVisuallyNonEmptyLayoutCallbackPending) when entering Page Cache. We now call reset those flags that
        are related to layout miletones when entering PageCache so that layout milestone events properly get sent
        again when restoring from Page Cache.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):

2018-09-18  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Static position should use content-box, not padding-box
        https://bugs.webkit.org/show_bug.cgi?id=189698

        Reviewed by Javier Fernandez.

        This is a recent change by the CSSWG:
        https://github.com/w3c/csswg-drafts/issues/3020

        The spec text (https://drafts.csswg.org/css-grid/#static-position):
          "The static position of an absolutely-positioned child
           of a grid container is determined as if it were the sole grid item
           in a grid area whose edges coincide with the content edges
           of the grid container."

        Test: imported/w3c/web-platform-tests/css/css-grid/abspos/absolute-positioning-grid-container-parent-001.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::prepareChildForPositionedLayout):
        Simple change to use border and padding.

2018-09-18  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [EME][GStreamer] The current EME implementation doesn't support the waitingforkey event
        https://bugs.webkit.org/show_bug.cgi?id=185590

        Reviewed by Philippe Normand.

        When decryptors are blocked waiting for the key, instruct the
        player to run the Wait for key algorithm. As per spec, if we run
        out of blocks pending to decrypt because we don't have the key, we
        request running the algorithm again.

        Test: imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-waitingforkey.https.html.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::initializationDataEncountered):
        (WebCore::MediaPlayerPrivateGStreamerBase::reportWaitingForKey):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (webkitMediaCommonEncryptionDecryptTransformInPlace):
        (webkitMediaCommonEncryptionDecryptSinkEventHandler):

2018-09-12  Ryosuke Niwa  <rniwa@webkit.org>

        Update composedPath to match the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=180378
        <rdar://problem/42843004>

        Reviewed by Darin Adler.

        This patch makes the check for whether a given node in the event path be included in composedPath
        pre-determined at the time of the event dispatching per https://github.com/whatwg/dom/issues/525.
        This was a fix for the issue that if an event listener in a closed shadow tree removes a node in the
        same tree in the event path, then composedPath called on its shadow host, for example, will include
        the removed node since it's no longer in the closed shadow tree.

        Naively, implementing this behavior would require remembering the original document or shadow root
        of each node in the event path as well as its parent shadow root, or worse which node is disclosed
        to every other node at the time of computing the event path.

        This patch takes a more novel and efficient approach to implement the new behavior by adding a single
        integer indicating the number of closed-mode shadow root ancestors of each node in the event path.
        In computePathUnclosedToTarget, any node whose *depth* is greater than the context object is excluded.

        Consider the following example:
        div ------- ShadowRoot (closed)
          +- span     +- slot
        If an event is dispatched on span, then the event path would be [span, slot, ShadowRoot, div]. Then
        the values of integers assigned to each node would be: [0, 1, 1, 0] respectively. When composedPath
        is called on span or div, slot and ShadowRoot are excluded because they have a greater *depth* value.

        Unfortunately, this simplistic solution doesn't work when there are multiple shadow roots of the same
        depth through which an event is dispatched as in:
        section -- ShadowRoot (closed, SR2)
          |          +- slot (s2)
          +div ------ ShadowRoot (closed, SR1)
            +- span     +- slot (s1)
        If an event is dispatched on span, the event path would be [span, s1, SR1, div, s2, SR2, section].
        The values of integers assigned are: [0, 1, 1, 0, 1, 1, 0] respectively. When composedPath is called
        on SR1, the simplistic approach would include s2 and SR2, which would be wrong.

        To account for this case, in computePathUnclosedToTarget, we traverse the event path upwards (i.e.
        ancestors) and downwards (i.e. descendants) from the context object and decrease the *allowed depth*
        of shadow trees when we traverse out of a shadow tree in either direction. When traversing upwards,
        therefore, moving out of a shadow root to its host would would decrease the allowed depth. When
        traversing dowards, moving from a slot element to its assigned node would decrease the allowed depth.

        Note that the depths can be negative when a composed event is dispatched inside a closed shadow tree,
        and it gets out of its shadow host.

        Unfortunately, the latest DOM specification has a bug and doesn't match the behavior of Chrome. This
        patch proposes a new algorithm which can be adopted in https://github.com/whatwg/dom/issues/684.

        Test: imported/w3c/web-platform-tests/shadow-dom/event-composed-path-after-dom-mutation.html

        * dom/EventContext.cpp:
        (WebCore::EventContext::EventContext):
        (WebCore::MouseOrFocusEventContext::MouseOrFocusEventContext):
        (WebCore::TouchEventContext::TouchEventContext):
        * dom/EventContext.h:
        (WebCore::EventContext::closedShadowDepth const): Added.
        * dom/EventPath.cpp:
        (WebCore::WindowEventContext::WindowEventContext):
        (WebCore::EventPath::buildPath): Compute the closed shadow tree's depths for each node in the path.
        (WebCore::computePathUnclosedToTarget const): Implemented the aforementioned algorithm.
        (WebCore::EventPath::EventPath):

2018-09-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Use Semaphore and BinarySemaphore instead of dispatch_semaphore_t
        https://bugs.webkit.org/show_bug.cgi?id=185339

        Reviewed by Mark Lam.

        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::blobSize):
        * platform/cocoa/NetworkExtensionContentFilter.h:
        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::initialize):
        (WebCore::NetworkExtensionContentFilter::willSendRequest):
        (WebCore::NetworkExtensionContentFilter::responseReceived):
        (WebCore::NetworkExtensionContentFilter::addData):
        (WebCore::NetworkExtensionContentFilter::finishedAddingData):
        (WebCore::NetworkExtensionContentFilter::handleDecision):
        Use per-function BinarySemaphore instead of holding it in NetworkExtensionContentFilter's field.

        * platform/glib/FileMonitorGLib.cpp:
        (WebCore::FileMonitor::FileMonitor):
        (WebCore::FileMonitor::~FileMonitor):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::~MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::waitForVideoOutputMediaDataWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::outputMediaDataWillChange):
        Use BinarySemaphore. And remove unused dispatch_semaphore_t.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVStreamDataParserListener streamDataParserWillProvideContentKeyRequestInitializationData:forTrackID:]):
        (-[WebAVStreamDataParserListener streamDataParser:didProvideContentKeyRequestInitializationData:forTrackID:]):
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID):
        (WebCore::SourceBufferPrivateAVFObjC::abort):
        (WebCore::SourceBufferPrivateAVFObjC::setCDMSession):
        (WebCore::SourceBufferPrivateAVFObjC::setCDMInstance):
        Use Box<Semaphore> and Box<BinarySemaphore>.

        * platform/graphics/cocoa/WebCoreDecompressionSession.h:
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::WebCoreDecompressionSession):
        Remove unused dispatch_semaphore_t.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::getRunLoop):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willCacheResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::canRespondToProtectionSpace):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate initWithHandle:messageQueue:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate detachHandle]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate dealloc]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:canAuthenticateAgainstProtectionSpace:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willCacheResponse:]):
        Use BinarySemaphore instead.

2018-09-17  Simon Fraser  <simon.fraser@apple.com>

        Many modern media control tests leak documents in testing
        https://bugs.webkit.org/show_bug.cgi?id=189437

        Reviewed by Darin Adler.

        In order to accurately detect leaks in media controls tests which use lots of
        SVGImages, we have to:
        - Fire a zero-delay timer after the postTask, in order for ImagesLoader's m_derefElementTimer
          to clear references to elements.
        - Have releaseCriticalMemory() call CachedResourceLoader's garbageCollectDocumentResources()
          to drop the last handle to the CachedResource for an SVGImage.
        - Call WKBundleReleaseMemory() after the GC and timer, since we need garbageCollectDocumentResources()
          to run again after that timer has fired.
        
        This should fix most of the spurious leak reports involving SVGImage documents.

        * page/MemoryRelease.cpp:
        (WebCore::releaseCriticalMemory):

2018-09-17  Jer Noble  <jer.noble@apple.com>

        Add support for HEVC codec types in Media Capabilities
        https://bugs.webkit.org/show_bug.cgi?id=189565

        Reviewed by Eric Carlson.

        Test: media/hevc-codec-parameters.html

        Add some utility methods for parsing HEVC codec strings, and using those parsed
        values to query the platform for detailed support for HEVC decoding.

        Drive-by fix: Modify MediaEngineConfigurationFactory to allow for null function
        pointers in the encode/decode factory pair.

        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/VideoToolboxSoftLink.cpp:
        * platform/cocoa/VideoToolboxSoftLink.h:
        * platform/graphics/HEVCUtilities.cpp: Added.
        (WebCore::parseHEVCCodecParameters):
        * platform/graphics/HEVCUtilities.h: Added.
        * platform/graphics/cocoa/HEVCUtilitiesCocoa.cpp: Added.
        (WebCore::validateHEVCParameters):
        * platform/graphics/cocoa/HEVCUtilitiesCocoa.h: Added.
        * platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp: Added.
        (WebCore::videoCodecTypeFromRFC4281Type):
        (WebCore::createMediaPlayerDecodingConfigurationCocoa):
        * platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h: Added.
        * platform/mediacapabilities/MediaEngineConfigurationFactory.cpp:
        (WebCore::factories):
        (WebCore::MediaEngineConfigurationFactory::createDecodingConfiguration):
        (WebCore::MediaEngineConfigurationFactory::createEncodingConfiguration):
        * testing/Internals.cpp:
        (WebCore::Internals::parseHEVCCodecParameters):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-09-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: generate CSSKeywordCompletions from backend values
        https://bugs.webkit.org/show_bug.cgi?id=189041

        Reviewed by Joseph Pecoraro.

        Modified existing test inspector/css/getSupportedCSSProperties.html.

        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        Send alias and longhand information for all properties, and any known keyword values for
        those applicable. This makes use of `CSSParserFastPaths::isValidKeywordPropertyAndValue` to
        determine if a given keyword is a valid value for each property. This only generates a list
        for properties who have no non-keyword values.

        * css/makeprop.pl:
        * css/makevalues.pl:
        Create additional helper functions/constants for retrieving strings of each CSS keyword.

        * css/CSSProperty.h:
        (WebCore::CSSProperty::aliasesForProperty):

        * css/CSSPrimitiveValue.cpp:
        (WebCore::valueName):

        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::CSSValuePool):
        (WebCore::CSSValuePool::createIdentifierValue):

2018-09-17  Youenn Fablet  <youenn@apple.com>

        track.onmute isn't called for a remote MediaStreamTrack when its counter part track is removed from the peer connection
        https://bugs.webkit.org/show_bug.cgi?id=176281
        <rdar://problem/44525674>

        Reviewed by Eric Carlson.

        Listen to libwebrtc remove track callbacks.
        Implement handling as per https://w3c.github.io/webrtc-pc/#process-remote-track-removal.
        This triggers a mute event on the track.

        Test: webrtc/remove-track.html

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::removeRemoteTrack):
        (WebCore::LibWebRTCMediaEndpoint::OnRemoveTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::shouldOfferAllowToReceive const):
        Drive by fix: Plan B code path does not mandate having an rtc backend for each sender.

2018-09-17  Simon Fraser  <simon.fraser@apple.com>

        Add more Fullscreen logging
        https://bugs.webkit.org/show_bug.cgi?id=189656

        Reviewed by Jer Noble.

        Add some fullscreen logging so I can tell whether WebFullScreenManager ever releases
        the fullscreen element.

        * platform/cocoa/VideoFullscreenModelVideoElement.mm:
        (VideoFullscreenModelVideoElement::VideoFullscreenModelVideoElement):
        (VideoFullscreenModelVideoElement::~VideoFullscreenModelVideoElement):
        (VideoFullscreenModelVideoElement::setVideoElement):

2018-09-14  Simon Fraser  <simon.fraser@apple.com>

        Add support for dumping the GraphicsLayer tree via notifyutil
        https://bugs.webkit.org/show_bug.cgi?id=189639

        Reviewed by Zalan Bujtas.

        Make "notifyutil -p com.apple.WebKit.showGraphicsLayerTree" work. It dumps the GraphicsLayer tree
        for each top-level document (GraphicsLayers are connected across frame boundaries, so this prints
        the entire tree for each main frame).
        
        It uses WTFLogAlways rather than fprintf() so output shows on all platforms (other tree dumps should
        be converted in the same way).

        * page/mac/PageMac.mm:
        (WebCore::Page::platformInitialize):
        * platform/graphics/GraphicsLayer.cpp:
        (showGraphicsLayerTree):
        * rendering/RenderLayerCompositor.cpp:
        (showGraphicsLayerTreeForCompositor):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderObject.cpp:
        (WebCore::printGraphicsLayerTreeForLiveDocuments):
        * rendering/RenderObject.h:

2018-09-17  Christopher Reid  <chris.reid@sony.com>

        [Curl] Add schema version and enable auto vacuum for cookie database.
        https://bugs.webkit.org/show_bug.cgi?id=189669

        Reviewed by Alex Christensen.

        Turning on auto incremental vacuuming and adding versioning to the database. Right now we
        reset tables if there's an unknown schema or if the none is set. There is placeholder logic
        in place to upgrade databases as the schema changes in the future.

        Tested by checking the database manually after launching MiniBrowser.

        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::openDatabase):
        (WebCore::CookieJarDB::verifySchemaVersion):
        (WebCore::CookieJarDB::deleteAllTables):
        (WebCore::CookieJarDB::createPrepareStatement):
        (WebCore::CookieJarDB::getPrepareStatement):
        (WebCore::CookieJarDB::executeSimpleSql):
        * platform/network/curl/CookieJarDB.h:
        * platform/network/curl/NetworkStorageSessionCurl.cpp:
        (WebCore::defaultSession):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::turnOnIncrementalAutoVacuum): fixed a bug.

2018-09-14  Ryosuke Niwa  <rniwa@webkit.org>

        Re-order Node flags based on semantics
        https://bugs.webkit.org/show_bug.cgi?id=189643

        Reviewed by Simon Fraser.

        Re-ordered Node flags based on their category and subclasses of Node which use them.

        * dom/Node.h:

2018-09-17  Simon Fraser  <simon.fraser@apple.com>

        Add more ResourceLoading logging, particularly in MemoryCache code
        https://bugs.webkit.org/show_bug.cgi?id=189651

        Reviewed by Tim Horton.

        Adding more logging to the ResourceLoading log channel, which I found useful
        when trying to understand cached SVGImage lifetimes (bug 189437).

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::deleteIfPossible):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::garbageCollectDocumentResources):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::add):
        (WebCore::MemoryCache::pruneLiveResourcesToSize):
        (WebCore::MemoryCache::pruneDeadResources):
        (WebCore::MemoryCache::pruneDeadResourcesToSize):
        (WebCore::MemoryCache::remove):
        (WebCore::MemoryCache::dumpLRULists const):

2018-09-17  Jer Noble  <jer.noble@apple.com>

        Enable USE_MEDIAREMOTE on iOS
        https://bugs.webkit.org/show_bug.cgi?id=189096

        Reviewed by Eric Carlson.

        Migrate to using MediaRemote.framework on iOS from MediaPlayer.framework. This unifies the
        Now Playing implementation on iOS and Mac.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/cocoa/MediaSessionManagerCocoa.cpp: Removed.
        * platform/audio/cocoa/MediaSessionManagerCocoa.h:
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm: Renamed from Source/WebCore/platform/audio/mac/MediaSessionManagerMac.mm.
        (PlatformMediaSessionManager::sharedManager):
        (PlatformMediaSessionManager::sharedManagerIfExists):
        (MediaSessionManagerCocoa::updateSessionState):
        (MediaSessionManagerCocoa::beginInterruption):
        (MediaSessionManagerCocoa::scheduleUpdateNowPlayingInfo):
        (MediaSessionManagerCocoa::sessionWillBeginPlayback):
        (MediaSessionManagerCocoa::sessionDidEndRemoteScrubbing):
        (MediaSessionManagerCocoa::removeSession):
        (MediaSessionManagerCocoa::sessionWillEndPlayback):
        (MediaSessionManagerCocoa::clientCharacteristicsChanged):
        (MediaSessionManagerCocoa::sessionCanProduceAudioChanged):
        (MediaSessionManagerCocoa::nowPlayingEligibleSession):
        (MediaSessionManagerCocoa::updateNowPlayingInfo):
        * platform/audio/ios/MediaSessionManagerIOS.h:
        (): Deleted.
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::nowPlayingEligibleSession): Deleted.
        (WebCore::MediaSessionManageriOS::updateNowPlayingInfo): Deleted.
        (WebCore::MediaSessionManageriOS::sessionWillBeginPlayback): Deleted.
        (WebCore::MediaSessionManageriOS::removeSession): Deleted.
        (WebCore::MediaSessionManageriOS::sessionWillEndPlayback): Deleted.
        (WebCore::MediaSessionManageriOS::clientCharacteristicsChanged): Deleted.
        * platform/audio/mac/MediaSessionManagerMac.h: Removed.

2018-09-17  Frederic Wang  <fwang@igalia.com>

        Build error in ImageBufferCG when compiled with IOSurfacePool
        https://bugs.webkit.org/show_bug.cgi?id=189579

        Reviewed by Tim Horton.

        IOSurface.h might be included with different value of IOSURFACE_CANVAS_BACKING_STORE, causing
        compilation errors when files in the same unified source do not agree on the definition.
        This patch moves the definition of IOSURFACE_CANVAS_BACKING_STORE from ImageBufferDataCG.h
        to Platform.h so that IOSURFACE_CANVAS_BACKING_STORE is set to the same value in all files.
        Finally some minors changes to explicitly declare/define ImageBuffer are performed in order
        to prevent future issues with Unified build rotating.

        No new tests, behavior unchanged.

        * html/HTMLCanvasElement.cpp: Explicitly include ImageBuffer.h since it's used in this file.
        * platform/graphics/cg/ImageBufferDataCG.h: Move definition into Platform.h.
        * platform/graphics/cocoa/IOSurface.h: Forward-declare ImageBuffer since it's used in this
        header.

2018-09-17  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Respond with requested authentication scheme for authentication challenge.
        https://bugs.webkit.org/show_bug.cgi?id=189318

        Reviewed by Alex Christensen.

        Curl port depends on libcurl's authentication handling by enabling CURLAUTH_ANY. With this
        mode, the round-trip communication between the client and the server is handled by libcurl
        internally. That's okay for many cases. But when initial request has a credentials
        (i.e. XMLHttpRequest), there's no valid chance to store credential to the storage because
        the returned response is not 401.

        Passes following tests:
        - http/tests/websocket/tests/hybi/httponly-cookie.pl
        - http/tests/websocket/tests/hybi/secure-cookie-insecure-connection.pl
        - http/tests/websocket/tests/hybi/secure-cookie-secure-connection.pl
        - http/tests/xmlhttprequest/basic-auth-default.html
        - http/tests/xmlhttprequest/cross-origin-authorization.html
        - http/tests/xmlhttprequest/logout.html
        - http/tests/xmlhttprequest/null-auth.php
        - http/tests/xmlhttprequest/re-login-async.html
        - http/tests/xmlhttprequest/re-login.html
        - http/tests/xmlhttprequest/redirect-credentials-responseURL.html
        - http/tests/xmlhttprequest/remember-bad-password.html

        * platform/network/ResourceHandle.h:
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::setHttpAuthUserPass):
        (WebCore::CurlHandle::enableHttpAuthentication): Deleted.
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setAuthenticationScheme):
        (WebCore::CurlRequest::setupTransfer):
        * platform/network/curl/CurlRequest.h:
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::getCredential):
        (WebCore::ResourceHandle::restartRequestWithCredential):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandle::continueAfterWillSendRequest):

2018-09-17  Youenn Fablet  <youenn@apple.com>

        Enable VCP for iOS and reenable it for MacOS
        https://bugs.webkit.org/show_bug.cgi?id=189635
        <rdar://problem/43621029>

        Reviewed by Eric Carlson.

        Covered by exsiting and modified tests.
        Instead of using libwebrtc YUV frames for black frames, use CVPixelBuffer to make it efficient.
        Add internal API to know whether VCP is enabled so as to make capture-webrtc test pass on all platforms.

        * platform/mediastream/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::sendBlackFramesIfNeeded):
        * platform/mediastream/RealtimeOutgoingVideoSource.h:
        * platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceLibWebRTC.h:
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.h:
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::createBlackPixelBuffer):
        (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferFromVideoFrame):
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp:
        (WebCore::RealtimeOutgoingVideoSourceCocoa::createBlackFrame):
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.h:
        * testing/Internals.cpp:
        (WebCore::Internals::supportsVCPEncoder):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-09-17  Chris Dumez  <cdumez@apple.com>

        PSON: window.open() with 'noopener' should only process-swap cross-site, not cross-origin
        https://bugs.webkit.org/show_bug.cgi?id=189602
        <rdar://problem/44430549>

        Reviewed by Geoff Garen.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setTriggeringAction):
        * loader/DocumentLoader.h:
        * loader/FrameLoadRequest.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        Move NavigationAction's opener setting to loadWithNavigationAction() as this is a better bottleneck.
        Otherwise, we'd have to set it at several call sites. Also move the NavigationAction around instead
        of copying it.

        * loader/FrameLoader.h:
        (WebCore::FrameLoader::loadWithNavigationAction):
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::setShouldOpenExternalURLsPolicy):
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):

2018-09-17  Darin Adler  <darin@apple.com>

        Use OpaqueJSString rather than JSRetainPtr inside WebKit
        https://bugs.webkit.org/show_bug.cgi?id=189652

        Reviewed by Saam Barati.

        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::jsValueWithDictionaryInContext): Use OpaqueJSString::create.
        (WebCore::jsValueWithAVMetadataItemInContext): Use adoptCF.

        * platform/mac/SerializedPlatformRepresentationMac.mm:
        (WebCore::jsValueWithDictionaryInContext): Use OpaqueJSString::create.

2018-09-08  Darin Adler  <darin@apple.com>

        Streamline JSRetainPtr, fix leaks of JSString and JSGlobalContext
        https://bugs.webkit.org/show_bug.cgi?id=189455

        Reviewed by Keith Miller.

        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::jsValueWithDictionaryInContext): Adding a missing
        JSStringRelease to fix a leak.

2018-09-15  Rob Buis  <rbuis@igalia.com>

        XMLHttpRequest::createResponseBlob() should create a Blob with type for empty response
        https://bugs.webkit.org/show_bug.cgi?id=189627

        Reviewed by Alexey Proskuryakov.

        Right now we return an empty Blob without type when the response is empty, but
        it should always include the type [1].

        Test: web-platform-tests/xhr/overridemimetype-blob.html

        [1] https://xhr.spec.whatwg.org/#blob-response

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createResponseBlob):

2018-09-14  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Bug fix on some inaccurate values in NetworkLoadMetrics.
        https://bugs.webkit.org/show_bug.cgi?id=189530

        Reviewed by Alex Christensen.

        Curl port uses the start time libcurl provided. But there's a lug between main thread and Curl thread.
        Record the start time of request instead of libcurl's start timing and use it to measure the metrics.
        Also respondEnd was not correctly recorded and fixed.

        No new tests because it cannot be measured from DRT.

        * platform/network/ResourceHandleInternal.h:
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::getNetworkLoadMetrics):
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::start):
        (WebCore::CurlRequest::setupTransfer):
        (WebCore::CurlRequest::didCompleteTransfer):
        (WebCore::CurlRequest::updateNetworkLoadMetrics):
        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::setStartTime):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::restartRequestWithCredential):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::continueAfterWillSendRequest):

2018-09-14  Justin Fan  <justin_fan@apple.com>

        WebGL 2 conformance: rgb-format-support.html
        https://bugs.webkit.org/show_bug.cgi?id=189610
        <rdar://problem/44403343>

        Reviewed by Dean Jackson.

        Implementing getInternalformatParameter (emulating on macOS) and updating 
        renderbufferStorage{Multisample} for WebGL 2 conformance. 

        Test: webgl/2.0.0/conformance2/rendering/rgb-format-support.html enabled.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::isRenderableInternalformat):
        (WebCore::WebGL2RenderingContext::getInternalformatParameter):
        (WebCore::WebGL2RenderingContext::renderbufferStorageMultisample):
        (WebCore::WebGL2RenderingContext::renderbufferStorage):
        (WebCore::WebGL2RenderingContext::baseInternalFormatFromInternalFormat):
        (WebCore::WebGL2RenderingContext::isIntegerFormat):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::getInternalformativ):
        (WebCore::GraphicsContext3D::renderbufferStorageMultisample):

2018-09-14  Justin Michaud  <justin_michaud@apple.com>

        Add support for spreadMethod=reflect and repeat on SVG gradients (for CoreGraphics platforms)
        https://bugs.webkit.org/show_bug.cgi?id=5968

        Add support for spreadMethod=repeat and reflect. Also, the opacity of a gradient is now
        the result of multiplying stop-opacity with the opacity of the color.

        Reviewed by Simon Fraser.

        Tests: svg/gradients/spreadMethod-expected.svg
               svg/gradients/spreadMethod.svg
               svg/gradients/spreadMethodAlpha-expected.svg
               svg/gradients/spreadMethodAlpha.svg
               svg/gradients/spreadMethodClose0-expected-mismatch.svg
               svg/gradients/spreadMethodClose0.svg
               svg/gradients/spreadMethodClose1-expected-mismatch.svg
               svg/gradients/spreadMethodClose1.svg
               svg/gradients/spreadMethodClose2-expected.svg
               svg/gradients/spreadMethodClose2.svg
               svg/gradients/spreadMethodDiagonal-expected.svg
               svg/gradients/spreadMethodDiagonal.svg
               svg/gradients/spreadMethodDiagonal2-expected.svg
               svg/gradients/spreadMethodDiagonal2.svg
               svg/gradients/spreadMethodDuplicateStop-expected.svg
               svg/gradients/spreadMethodDuplicateStop.svg
               svg/gradients/spreadMethodReversed-expected.svg
               svg/gradients/spreadMethodReversed.svg
               svg/gradients/stopAlpha-expected.svg
               svg/gradients/stopAlpha.svg

        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::paint):
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::stopColorIncludingOpacity const):

2018-09-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, attempt to fix the iOSMac build after r236015.

        * platform/graphics/cv/PixelBufferResizer.mm:
        (WebCore::PixelBufferResizer::PixelBufferResizer):

2018-09-11  Simon Fraser  <simon.fraser@apple.com>

        Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings
        https://bugs.webkit.org/show_bug.cgi?id=189521

        Reviewed by Tim Horton.
        
        Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>.
        
        RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>.
        
        All the other changes are just to adapt to the new ownership patterns.
        
        I verified that no GraphicsLayers were leaked or abandoned after this change.

        No behavior change.

        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::layerWithDocumentOverlays):
        (WebCore::PageOverlayController::layerWithViewOverlays):
        (WebCore::PageOverlayController::installPageOverlay):
        (WebCore::PageOverlayController::uninstallPageOverlay):
        (WebCore::PageOverlayController::setPageOverlayNeedsDisplay):
        (WebCore::PageOverlayController::didChangeViewSize):
        (WebCore::PageOverlayController::didChangeDocumentSize):
        (WebCore::PageOverlayController::didChangeSettings):
        (WebCore::PageOverlayController::paintContents):
        (WebCore::PageOverlayController::didChangeOverlayFrame):
        (WebCore::PageOverlayController::didChangeOverlayBackgroundColor):
        * page/PageOverlayController.h:
        * page/mac/ServicesOverlayController.h:
        (WebCore::ServicesOverlayController::Highlight::layer const):
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::Highlight):
        (WebCore::ServicesOverlayController::Highlight::invalidate):
        (WebCore::ServicesOverlayController::Highlight::fadeIn):
        (WebCore::ServicesOverlayController::Highlight::fadeOut):
        (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation):
        (WebCore::ServicesOverlayController::determineActiveHighlight):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        (WebCore::GraphicsLayer::willBeDestroyed):
        (WebCore::GraphicsLayer::setChildren):
        (WebCore::GraphicsLayer::addChild):
        (WebCore::GraphicsLayer::addChildAtIndex):
        (WebCore::GraphicsLayer::addChildBelow):
        (WebCore::GraphicsLayer::addChildAbove):
        (WebCore::GraphicsLayer::replaceChild):
        (WebCore::GraphicsLayer::removeAllChildren):
        (WebCore::GraphicsLayer::removeFromParent):
        (WebCore::GraphicsLayer::setMaskLayer):
        (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants):
        (WebCore::GraphicsLayer::distributeOpacity):
        (WebCore::GraphicsLayer::traverse):
        (WebCore::dumpChildren):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::children const):
        (WebCore::GraphicsLayer::children):
        (WebCore::GraphicsLayer::maskLayer const):
        (WebCore::GraphicsLayer::replicaLayer const):
        (WebCore::GraphicsLayer::beingDestroyed const):
        (WebCore::GraphicsLayer:: const): Deleted.
        * platform/graphics/GraphicsLayerFactory.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayer::create):
        (WebCore::GraphicsLayerCA::setChildren):
        (WebCore::GraphicsLayerCA::addChild):
        (WebCore::GraphicsLayerCA::addChildAtIndex):
        (WebCore::GraphicsLayerCA::addChildBelow):
        (WebCore::GraphicsLayerCA::addChildAbove):
        (WebCore::GraphicsLayerCA::replaceChild):
        (WebCore::GraphicsLayerCA::setMaskLayer):
        (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::updateSublayerList):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayer::create):
        (WebCore::GraphicsLayerTextureMapper::setChildren):
        (WebCore::GraphicsLayerTextureMapper::addChild):
        (WebCore::GraphicsLayerTextureMapper::addChildAtIndex):
        (WebCore::GraphicsLayerTextureMapper::addChildAbove):
        (WebCore::GraphicsLayerTextureMapper::addChildBelow):
        (WebCore::GraphicsLayerTextureMapper::replaceChild):
        (WebCore::GraphicsLayerTextureMapper::setMaskLayer):
        (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::GraphicsLayer::create):
        (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect):
        (WebCore::CoordinatedGraphicsLayer::addChild):
        (WebCore::CoordinatedGraphicsLayer::addChildAtIndex):
        (WebCore::CoordinatedGraphicsLayer::addChildAbove):
        (WebCore::CoordinatedGraphicsLayer::addChildBelow):
        (WebCore::CoordinatedGraphicsLayer::replaceChild):
        (WebCore::CoordinatedGraphicsLayer::setMaskLayer):
        (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers):
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers):
        (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/win/GraphicsLayerDirect2D.cpp:
        (WebCore::GraphicsLayer::create):
        (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted.
        (WebCore::GraphicsLayerDirect2D::initialize): Deleted.
        (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted.
        (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted.
        (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::RenderLayerBacking::updateInternalHierarchy):
        (WebCore::RenderLayerBacking::updateMaskingLayer):
        (WebCore::RenderLayerBacking::updateChildClippingStrategy):
        (WebCore::RenderLayerBacking::updateScrollingLayers):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers):
        (WebCore::RenderLayerCompositor::setCompositingParent):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::parentFrameContentLayers):
        (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForHeader):
        (WebCore::RenderLayerCompositor::updateLayerForFooter):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::ensureRootLayer):
        (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged):
        * rendering/RenderLayerCompositor.h:

2018-09-14  Eric Carlson  <eric.carlson@apple.com>

        Support arbitrary video resolution in getUserMedia API
        https://bugs.webkit.org/show_bug.cgi?id=178109
        <rdar://problem/35083128>

        Reviewed by Youenn Fablet.

        Support arbitrary video resolutions by configuring the camera to capture at the closest
        larger size it supports and scaling/cropping frames as necessary.

        No new tests, existing tests updated.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.h:
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        (WebCore::MediaStreamAudioSource::capabilities): Make non-const, it wasn't helpful.
        (WebCore::MediaStreamAudioSource::settings): Ditto.
        (WebCore::MediaStreamAudioSource::capabilities const): Deleted.
        (WebCore::MediaStreamAudioSource::settings const): Deleted.
        * Modules/webaudio/MediaStreamAudioSource.h:

        * SourcesCocoa.txt: Add PixelBufferResizer.

        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/cocoa/CoreVideoSoftLink.h:
        * platform/cocoa/VideoToolboxSoftLink.cpp:
        * platform/cocoa/VideoToolboxSoftLink.h:

        * platform/graphics/cv/PixelBufferResizer.h: Added.
        (WebCore::PixelBufferResizer::canResizeTo):
        * platform/graphics/cv/PixelBufferResizer.mm: Added.
        (WebCore::PixelBufferResizer::PixelBufferResizer):
        (WebCore::PixelBufferResizer::resize):

        * platform/mediastream/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::capabilities): Make non-const, it wasn't helpful.
        (WebCore::RealtimeIncomingAudioSource::settings): Ditto.
        (WebCore::RealtimeIncomingAudioSource::capabilities const): Deleted.
        (WebCore::RealtimeIncomingAudioSource::settings const): Deleted.
        * platform/mediastream/RealtimeIncomingAudioSource.h:

        * platform/mediastream/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::capabilities): Make non-const, it wasn't helpful.
        (WebCore::RealtimeIncomingVideoSource::settings): Ditto.
        (WebCore::RealtimeIncomingVideoSource::capabilities const): Deleted.
        (WebCore::RealtimeIncomingVideoSource::settings const): Deleted.
        * platform/mediastream/RealtimeIncomingVideoSource.h:

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::supportsConstraint):
        (WebCore::RealtimeMediaSource::supportsConstraint const): Deleted.
        * platform/mediastream/RealtimeMediaSource.h:

        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::presets):
        (WebCore::RealtimeVideoSource::setSupportedPresets):
        (WebCore::standardVideoSizes):
        (WebCore::RealtimeVideoSource::updateCapabilities): Make non-const, it wasn't helpful.
        (WebCore::presetSupportsFrameRate):
        (WebCore::RealtimeVideoSource::supportsCaptureSize):
        (WebCore::RealtimeVideoSource::shouldUsePreset):
        (WebCore::RealtimeVideoSource::bestSupportedSizeAndFrameRate):
        (WebCore::RealtimeVideoSource::setSizeAndFrameRate):
        (WebCore::RealtimeVideoSource::addSupportedCapabilities const): Deleted.
        * platform/mediastream/RealtimeVideoSource.h:
        (WebCore::VideoPresetData::encode const):
        (WebCore::VideoPresetData::decode):
        (WebCore::VideoPreset::create):
        (WebCore::VideoPreset::VideoPreset):
        (WebCore::RealtimeVideoSource::prefersPreset):
        (WebCore::RealtimeVideoSource::canResizeVideoFrames const):
        (WebCore::RealtimeVideoSource::setDefaultSize):
        (WebCore::RealtimeVideoSource::observedFrameRate const):
        (WebCore::VideoPreset::encode const): Deleted.
        (WebCore::VideoPreset::decode): Deleted.

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        (WebCore::AVVideoCaptureSource::videoPresets): Deleted.
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoPreset::create):
        (WebCore::AVVideoPreset::AVVideoPreset):
        (WebCore::AVVideoCaptureSource::AVVideoCaptureSource):
        (WebCore::AVVideoCaptureSource::settings):
        (WebCore::AVVideoCaptureSource::capabilities): Make non-const, it wasn't helpful.
        (WebCore::AVVideoCaptureSource::setFrameRate):
        (WebCore::AVVideoCaptureSource::prefersPreset):
        (WebCore::AVVideoCaptureSource::setSizeAndFrameRateWithPreset):
        (WebCore::AVVideoCaptureSource::frameDurationForFrameRate):
        (WebCore::AVVideoCaptureSource::setupCaptureSession):
        (WebCore::AVVideoCaptureSource::processNewFrame):
        (WebCore::AVVideoCaptureSource::captureOutputDidOutputSampleBufferFromConnection):
        (WebCore::AVVideoCaptureSource::isFrameRateSupported):
        (WebCore::AVVideoCaptureSource::generatePresets):
        (WebCore::updateSizeMinMax): Deleted.
        (WebCore::updateAspectRatioMinMax): Deleted.
        (WebCore::AVVideoCaptureSource::settings const): Deleted.
        (WebCore::AVVideoCaptureSource::capabilities const): Deleted.
        (WebCore::AVVideoCaptureSource::sizeForPreset): Deleted.
        (WebCore::AVVideoCaptureSource::setPreset): Deleted.
        (WebCore::AVVideoCaptureSource::setSizeAndFrameRate): Deleted.
        (WebCore::AVVideoCaptureSource::bestSessionPresetForVideoDimensions): Deleted.
        (WebCore::AVVideoCaptureSource::supportsSizeAndFrameRate): Deleted.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::capabilities): Make non-const, it wasn't helpful.
        (WebCore::CoreAudioCaptureSource::settings): Ditto.
        (WebCore::CoreAudioCaptureSource::capabilities const): Deleted.
        (WebCore::CoreAudioCaptureSource::settings const): Deleted.
        * platform/mediastream/mac/CoreAudioCaptureSource.h:

        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        (WebCore::DisplayCaptureSourceCocoa::capabilities): Make non-const, it wasn't helpful.
        (WebCore::DisplayCaptureSourceCocoa::settings): Ditto.
        (WebCore::DisplayCaptureSourceCocoa::capabilities const): Deleted.
        (WebCore::DisplayCaptureSourceCocoa::settings const): Deleted.
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.h:

        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::CMSampleBufferFromPixelBuffer):
        (WebCore::MockRealtimeVideoSourceMac::updateSampleBuffer):
        (WebCore::MockRealtimeVideoSourceMac::setSizeAndFrameRateWithPreset):
        * platform/mock/MockMediaDevice.h:
        (WebCore::MockCameraProperties::decode):

        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::settings): Make non-const, it wasn't helpful.
        (WebCore::MockRealtimeAudioSource::capabilities): Ditto.
        (WebCore::MockRealtimeAudioSource::settings const): Deleted.
        (WebCore::MockRealtimeAudioSource::capabilities const): Deleted.
        * platform/mock/MockRealtimeAudioSource.h:

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::defaultDevices): Change video device presets to trigger resize code more often.

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource):
        (WebCore::MockRealtimeVideoSource::generatePresets):
        (WebCore::MockRealtimeVideoSource::capabilities): Make non-const, it wasn't helpful.
        (WebCore::MockRealtimeVideoSource::settings): Ditto.
        (WebCore::MockRealtimeVideoSource::capabilities const): Deleted.
        (WebCore::MockRealtimeVideoSource::settings const): Deleted.
        * platform/mock/MockRealtimeVideoSource.h:

2018-09-14  Frederic Wang  <fwang@igalia.com>

        Bug 189541 - Build error in FontDescriptionKey::computeHash when compiling FontTaggedSettings and FontCascadeFonts together
        https://bugs.webkit.org/show_bug.cgi?id=189541

        Reviewed by Alex Christensen.

        FontDescriptionKey::computeHash() from In FontCache.h requires implicit instantiation of the
        FontTaggedSettings::hash() template function. This instantiation may happen before
        FontTaggedSettings::hash() is actually fully specialized in FontTaggedSettings.cpp. To avoid
        compiler errors when FontCache.h and FontTaggedSettings.cpp are in the same translation unit,
        we declare full specialization of the hash() functions in FontTaggedSettings.h.

        No new tests, behavior unchanged.

        * platform/graphics/FontCache.h: Explicitly include FontTaggedSettings to avoid possible future breakage.
        * platform/graphics/FontTaggedSettings.h: Declare full specialization of FontTaggedSettings::hash().

2018-09-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r235990.

        Introduced TestWebKitAPI.NowPlayingTest timeouts on iOS

        Reverted changeset:

        "Enable USE_MEDIAREMOTE on iOS"
        https://bugs.webkit.org/show_bug.cgi?id=189096
        https://trac.webkit.org/changeset/235990

2018-09-14  Jer Noble  <jer.noble@apple.com>

        Turn SourceBufferChangeTypeEnabled on by default
        https://bugs.webkit.org/show_bug.cgi?id=189527

        Reviewed by Eric Carlson.

        * page/Settings.yaml:

2018-09-14  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Record actions performed on ImageBitmapRenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=181341

        Reviewed by Joseph Pecoraro.

        Test: inspector/canvas/recording-bitmaprenderer.html

        * html/canvas/ImageBitmapRenderingContext.idl:

        * inspector/InspectorCanvas.cpp:
        (WebCore::shouldSnapshotBitmapRendererAction):
        (WebCore::InspectorCanvas::recordAction):

        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame):

        * page/PageConsoleClient.cpp:
        (canvasRenderingContext):

2018-09-14  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r235954): Fix build failure on watchOS
        <https://webkit.org/b/189605>

        Reviewed by Geoffrey Garen.

        Remove `using WebCore::IndexedDB::KeyType;` from
        Source/WebCore/Modules/indexeddb/IDBKey.h and fix all the
        resulting build failures.

        * Modules/indexeddb/IDBKey.cpp:
        (WebCore::IDBKey::IDBKey):
        (WebCore::IDBKey::isValid const):
        (WebCore::IDBKey::compare const):
        * Modules/indexeddb/IDBKey.h:
        (WebCore::IDBKey::createNumber):
        (WebCore::IDBKey::createDate):
        (WebCore::IDBKey::type const):
        (WebCore::IDBKey::array const):
        (WebCore::IDBKey::string const):
        (WebCore::IDBKey::date const):
        (WebCore::IDBKey::number const):
        (WebCore::IDBKey::binary const):
        (WebCore::IDBKey::compareTypes):
        (WebCore::IDBKey::IDBKey):
        * 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::setArrayValue):
        (WebCore::IDBKeyData::setBinaryValue):
        (WebCore::IDBKeyData::setStringValue):
        (WebCore::IDBKeyData::setDateValue):
        (WebCore::IDBKeyData::setNumberValue):
        (WebCore::IDBKeyData::isValid const):
        (WebCore::IDBKeyData::operator== const):
        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyData::IDBKeyData):
        (WebCore::IDBKeyData::minimum):
        (WebCore::IDBKeyData::maximum):
        (WebCore::IDBKeyData::type const):
        (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/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetIndexRecordForOneKey):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::toJS):

2018-09-14  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [EME] Add support the waitingforkey event
        https://bugs.webkit.org/show_bug.cgi?id=189616

        Reviewed by Philippe Normand.

        Crossplatform support to fire the waitingforkey event from the
        player to the element. The element implements the W3C specified
        algorithm.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerWaitingForKey):
        (WebCore::HTMLMediaElement::attemptToResumePlaybackIfNecessary):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::waitingForKey):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerWaitingForKey):

2018-09-14  Mike Gorse  <mgorse@suse.com>

        builtins directory causes name conflict on Python 3
        https://bugs.webkit.org/show_bug.cgi?id=189552

        Reviewed by Michael Catanzaro.

        No new tests (No behavior change).

        * CMakeLists.txt: builtins -> wkbuiltins.
        * DerivedSources.make: builtins -> wkbuiltins.

2018-09-13  Ryosuke Niwa  <rniwa@webkit.org>

        Capturing event listeners are called during bubbling phase for shadow hosts
        https://bugs.webkit.org/show_bug.cgi?id=174288
        <rdar://problem/33530455>

        Reviewed by Darin Adler.

        Implemented the new behavior proposed in https://github.com/whatwg/dom/pull/686 [1] to fix the problem
        that capturing event listeners on a shadow host is invoked during bubbling phase when an event is
        dispatched within its shadow tree.

        To see why this is a problem, suppose we fire a composed event at span#target in the following DOM tree:
          section#hostParent
            + div#host -- ShadowRoot
                            - p#parent
                                - span#target
        Then capturing and bubbling event listeners on #target, #parent, #host, and #hostParent are invoked in
        the following order in WebKit & Chrome right now:

        1. #hostParent, capturing, eventPhase: CAPTURING_PHASE
        2. #parent, capturing, eventPhase: CAPTURING_PHASE
        3. #target, capturing, eventPhase: AT_TARGET
        4. #target, non-capturing, eventPhase: AT_TARGET
        5. #parent, non-capturing, eventPhase: BUBBLING_PHASE
        6. #host, capturing, eventPhase: AT_TARGET
        7. #host, non-capturing, eventPhase: AT_TARGET
        8. #hostParent, non-capturing, eventPhase: BUBBLING_PHASE

        This is counter-intuitive because capturing event listeners on #host isn't invoked until bubblign phase
        started. A more natural ordering would be:

        1. #hostParent, capturing, eventPhase: CAPTURING_PHASE
        2. #host, capturing, eventPhase: AT_TARGET
        3. #parent, capturing, eventPhase: CAPTURING_PHASE
        4. #target, capturing, eventPhase: AT_TARGET
        5. #target, non-capturing, eventPhase: AT_TARGET
        6. #parent, non-capturing, eventPhase: BUBBLING_PHASE
        7. #host, non-capturing, eventPhase: AT_TARGET
        8. #hostParent, non-capturing, eventPhase: BUBBLING_PHASE

        This also happens to be the order by which Gecko's current shadow DOM implementation invoke event listners.
        This patch implements this new behavior using the spec-change proposed in [1]. Note that this patch also
        impacts the invocation order of event listeners when there is no shadow tree. Namely, before this patch,
        event listeners on the event's target is invoked in the registration order. After this patch, all capturing
        event listeners are invoked before bubbling event listeners are invoked.

        To implement this behavior, this patch introduces EventTarget::EventInvokePhase indicating whether we're
        in the capturing phase or bubbling phase to EventTarget::fireEventListeners. We can't use Event's eventPhase
        enum because that's set to Event::Phase::AT_TARGET when we're at a shadow host.

        Test: fast/shadow-dom/capturing-and-bubbling-event-listeners-across-shadow-trees.html

        * Modules/modern-media-controls/media/media-controller-support.js:
        (MediaControllerSupport.prototype.enable): Use capturing event listeners so that we can update the states of
        media controls before author scripts recieve the event.
        (MediaControllerSupport.prototype.disable): Ditto.
        * dom/EventContext.cpp:
        (WebCore::EventContext::handleLocalEvents const):
        (WebCore::MouseOrFocusEventContext::handleLocalEvents const):
        (WebCore::TouchEventContext::handleLocalEvents const):
        * dom/EventContext.h:
        * dom/EventDispatcher.cpp:
        (WebCore::dispatchEventInDOM): Invoke capturing event listners even when target and current target are same.
        This happens when the current target is a shadow host and event's target is in its shadow tree. Also merged
        the special code path for the event's target with the code in the bubbling phase.
        * dom/EventPath.cpp:
        (WebCore::WindowEventContext::handleLocalEvents const):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::dispatchEvent): Invoke capturing and bubbling event listeners in the order.
        (WebCore::EventTarget::fireEventListeners):
        (WebCore::EventTarget::innerInvokeEventListeners): Renamed from fireEventListeners to match the spec. Use
        EventInvokePhase to filter out event listeners so that we can invoke capturing event listners before bubbling
        event listeners even when eventPhase is Event::Phase::AT_TARGET.
        * dom/EventTarget.h:
        * dom/Node.cpp:
        (WebCore::Node::handleLocalEvents):
        * dom/Node.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::handleLocalEvents):
        * html/HTMLFormElement.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchEvent):

2018-09-13  Megan Gardner  <megan_gardner@apple.com>

        Fix color stop blending in conic gradients for stops past 1
        https://bugs.webkit.org/show_bug.cgi?id=189532
        <rdar://problem/44158221>

        Reviewed by Simon Fraser.

        Calculation was wrong, fixed it, and wrote a test that failed
        without the change, and passes with it.

        Test: fast/gradients/conic-repeating-last-stop.html

        * css/CSSGradientValue.cpp:
        (WebCore::ConicGradientAdapter::normalizeStopsAndEndpointsOutsideRange):

2018-09-13  Chris Dumez  <cdumez@apple.com>

        Regression(PSON): setting window.opener to null allows process swapping in cases that are not web-compatible
        https://bugs.webkit.org/show_bug.cgi?id=189590
        <rdar://problem/44422725>

        Reviewed by Geoffrey Garen.

        Set a flag on the navigation action to indicate if the page was opened via window.open() without 'noopener'.

        Test: http/tests/navigation/window-open-cross-origin-then-navigated-back-same-origin.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::openedViaWindowOpenWithOpener const):
        (WebCore::NavigationAction::setOpenedViaWindowOpenWithOpener):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        * page/Page.h:
        (WebCore::Page::openedViaWindowOpenWithOpener const):
        (WebCore::Page::setOpenedViaWindowOpenWithOpener):

2018-09-13  Jer Noble  <jer.noble@apple.com>

        Enable USE_MEDIAREMOTE on iOS
        https://bugs.webkit.org/show_bug.cgi?id=189096

        Reviewed by Eric Carlson.

        Migrate to using MediaRemote.framework on iOS from MediaPlayer.framework. This unifies the
        Now Playing implementation on iOS and Mac.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/cocoa/MediaSessionManagerCocoa.cpp: Removed.
        * platform/audio/cocoa/MediaSessionManagerCocoa.h:
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm: Renamed from Source/WebCore/platform/audio/mac/MediaSessionManagerMac.mm.
        (PlatformMediaSessionManager::sharedManager):
        (PlatformMediaSessionManager::sharedManagerIfExists):
        (MediaSessionManagerCocoa::updateSessionState):
        (MediaSessionManagerCocoa::beginInterruption):
        (MediaSessionManagerCocoa::scheduleUpdateNowPlayingInfo):
        (MediaSessionManagerCocoa::sessionWillBeginPlayback):
        (MediaSessionManagerCocoa::sessionDidEndRemoteScrubbing):
        (MediaSessionManagerCocoa::removeSession):
        (MediaSessionManagerCocoa::sessionWillEndPlayback):
        (MediaSessionManagerCocoa::clientCharacteristicsChanged):
        (MediaSessionManagerCocoa::sessionCanProduceAudioChanged):
        (MediaSessionManagerCocoa::nowPlayingEligibleSession):
        (MediaSessionManagerCocoa::updateNowPlayingInfo):
        * platform/audio/ios/MediaSessionManagerIOS.h:
        (): Deleted.
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::nowPlayingEligibleSession): Deleted.
        (WebCore::MediaSessionManageriOS::updateNowPlayingInfo): Deleted.
        (WebCore::MediaSessionManageriOS::sessionWillBeginPlayback): Deleted.
        (WebCore::MediaSessionManageriOS::removeSession): Deleted.
        (WebCore::MediaSessionManageriOS::sessionWillEndPlayback): Deleted.
        (WebCore::MediaSessionManageriOS::clientCharacteristicsChanged): Deleted.
        * platform/audio/mac/MediaSessionManagerMac.h: Removed.

2018-09-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        Remove the workaround for friend class LazyNeverDestroyed<X> statements for MSVC
        https://bugs.webkit.org/show_bug.cgi?id=189576

        Reviewed by Alex Christensen.

        Old MSVC can't compile "friend class LazyNeverDestroyed<X>"
        statements, but "friend LazyNeverDestroyed<X>".

        No new tests (No behavior change).

        * css/CSSInheritedValue.h: Removed the code for COMPILER(MSVC).
        Removed 'class' keyword in "friend class LazyNeverDestroyed<X>"
        statement.
        * css/CSSInitialValue.h: Ditto.
        * css/CSSPrimitiveValue.h: Ditto.
        * css/CSSRevertValue.h: Ditto.
        * css/CSSUnsetValue.h: Ditto.

2018-09-13  Ms2ger  <Ms2ger@igalia.com>

        [GLib] Fix format string in KeyedEncoderGlib::beginObject().
        https://bugs.webkit.org/show_bug.cgi?id=189585

        Reviewed by Michael Catanzaro.

        This appears to fix the following assertion locally:

        GLib-CRITICAL **: g_variant_builder_add_value: assertion '!GVSB(builder)->expected_type || g_variant_is_of_type (value, GVSB(builder)->expected_type)' failed

        Covered by existing tests.

        * platform/glib/KeyedEncoderGlib.cpp:
        (WebCore::KeyedEncoderGlib::beginObject):

2018-09-13  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r235953.

        Caused layout test crashes under GuardMalloc.

        Reverted changeset:

        "Make GraphicsLayers ref-counted, so their tree can persist
        when disconnected from RenderLayerBackings"
        https://bugs.webkit.org/show_bug.cgi?id=189521
        https://trac.webkit.org/changeset/235953

2018-09-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        Remove a MSVC workaround in XPath::Step::NodeTest
        https://bugs.webkit.org/show_bug.cgi?id=189578

        Reviewed by Alex Christensen.

        XPath::Step::NodeTest has a special code for MSVC bug workaround.
        It has been introduced in 5 years ago in Bug 121082 Comment 19.

        I think it is safe just to remove the workaround.

        No new tests (No behavior change).

        * xml/XPathStep.h: Removed the MSVC workaround.

2018-09-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        Remove a MSVC workaround in InspectorStyle::styleWithProperties
        https://bugs.webkit.org/show_bug.cgi?id=189577

        Reviewed by Alex Christensen.

        No new tests (No behavior change).

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::styleWithProperties const): Use 'auto' for the type of 'status'.

2018-09-13  Alex Christensen  <achristensen@webkit.org>

        Use a Variant instead of a union in CSSSelector
        https://bugs.webkit.org/show_bug.cgi?id=188559

        Reviewed by Antti Koivisto.

        No change in behavior. This just makes some of the existing problems more obvious and easy to fix.

        I moved m_caseInsensitiveAttributeValueMatching to RareData because it's only used with RareData.
        I only have m_isForPage when assertions are enabled because it's only used for an assertion.
        The rest is pretty straightforward translating union syntax to Variant syntax.
        I use RefPtr for now where I could use Ref because it's never null to make copying easier, but that's temporary.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::createRareData):
        (WebCore::CSSSelector::setAttribute):
        (WebCore::CSSSelector::setArgument):
        (WebCore::CSSSelector::setLangArgumentList):
        (WebCore::CSSSelector::setSelectorList):
        (WebCore::CSSSelector::setNth):
        (WebCore::CSSSelector::matchNth const):
        (WebCore::CSSSelector::nthA const):
        (WebCore::CSSSelector::nthB const):
        (WebCore::CSSSelector::RareData::RareData):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::argument const):
        (WebCore::CSSSelector::langArgumentList const):
        (WebCore::CSSSelector::selectorList const):
        (WebCore::CSSSelector::attribute const):
        (WebCore::CSSSelector::attributeCanonicalLocalName const):
        (WebCore::CSSSelector::setValue):
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::~CSSSelector):
        (WebCore::CSSSelector::tagQName const):
        (WebCore::CSSSelector::tagLowercaseLocalName const):
        (WebCore::CSSSelector::value const):
        (WebCore::CSSSelector::serializingValue const):
        (WebCore::CSSSelector::attributeValueMatchingIsCaseInsensitive const):
        (WebCore::CSSSelector::RareData::create): Deleted.
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::parsePageSelector):
        * css/parser/CSSParserSelector.h:

2018-09-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] error: type 'float' cannot be narrowed to 'LONG' (aka 'long') in initializer list in WheelEventWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=189575

        Reviewed by Alex Christensen.

        No new tests (No behavior change).

        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Use flooredIntPoint to convert FloatPoint to POINT.

2018-09-13  Youenn Fablet  <youenn@apple.com>

        Introduce RTCRtpSendParameters
        https://bugs.webkit.org/show_bug.cgi?id=189563

        Reviewed by Eric Carlson.

        Introduce RTCRtpSendParameters to match the WebRTC specification.
        Split RTCRtpPrameters fields accordingly and update call sites.

        Covered by updated test.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCRtpCodingParameters.h: Added
        * Modules/mediastream/RTCRtpCodingParameters.idl: Added
        * Modules/mediastream/RTCRtpDecodingParameters.h: Added
        * Modules/mediastream/RTCRtpDecodingParameters.idl: Added
        * Modules/mediastream/RTCRtpEncodingParameters.h:
        * Modules/mediastream/RTCRtpEncodingParameters.idl:
        * Modules/mediastream/RTCRtpParameters.h:
        * Modules/mediastream/RTCRtpParameters.idl:
        * Modules/mediastream/RTCRtpReceiver.cpp:
        * Modules/mediastream/RTCRtpSendParameters.h: Added.
        (WebCore::RTCRtpSendParameters::RTCRtpSendParameters):
        * Modules/mediastream/RTCRtpSendParameters.idl: Added.
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::getParameters):
        (WebCore::RTCRtpSender::setParameters):
        * Modules/mediastream/RTCRtpSender.h:
        * Modules/mediastream/RTCRtpSender.idl:
        * Modules/mediastream/RTCRtpSenderBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        (WebCore::LibWebRTCRtpSenderBackend::getParameters const):
        (WebCore::LibWebRTCRtpSenderBackend::setParameters):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
        (WebCore::toRTCRtpParameters):
        (WebCore::toRTCRtpSendParameters):
        (WebCore::fromRTCRtpSendParameters):
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2018-09-13  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][EME] decrypt-key-needed message renamed to drm-cdm-instance-needed
        https://bugs.webkit.org/show_bug.cgi?id=189547

        Reviewed by Philippe Normand.

        decrypt-key-needed message renamed to drm-cdm-instance-needed.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Apart from
        renaming the message, removed the class prefix for
        dispatchCDMInstance.
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (webkitMediaCommonEncryptionDecryptTransformInPlace):

2018-09-11  Ryosuke Niwa  <rniwa@webkit.org>

        imported/w3c/web-platform-tests/shadow-dom/form-control-form-attribute.html hits assertion
        https://bugs.webkit.org/show_bug.cgi?id=189493

        Reviewed by Alex Christensen.

        The debug assertion was caused by RefPtr in FormAssociatedElement::formOwnerRemovedFromTree introduced
        by r224390 and r223644 ref'ing ShadowRoot while calling removeDetachedChildren inside ~ShadowRoot.
        When a form (or any other) element has more than one ref inside removeDetachedChildren,
        addChildNodesToDeletionQueue calls notifyChildNodeRemoved in the tree oreder.

        However, when a form associated element of this form element appears later in the tree order,
        FormAssociatedElement::formOwnerRemovedFromTree can traverse up ancestors including the ShadowRoot.

        Fixed the bug by using raw pointers instead. Luckily, there is no DOM mutations or other non-trivial
        operations happening in this function so this should be safe.

        Test: imported/w3c/web-platform-tests/shadow-dom/form-control-form-attribute.html

        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::formOwnerRemovedFromTree): Fixed the bug.

2018-09-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Complete support for Paste as Quotation
        https://bugs.webkit.org/show_bug.cgi?id=189504

        Reviewed by Wenson Hsieh.

        Tests: editing/pasteboard/4930986-1-paste-as-quotation.html
               editing/pasteboard/4930986-2-paste-as-quotation.html
               editing/pasteboard/4930986-3-paste-as-quotation.html

        * editing/Editor.cpp:
          Added ClipboardEventKind::PasteAsQuotation.
        (WebCore::eventNameForClipboardEvent): Map PasteAsQuotation to the "paste" DOM event name.
        (WebCore::createDataTransferForClipboardEvent): Place the unquoted content in the event.
          This means that currently event handlers can’t emulate pasting as quotation, because they
          neither have the quoted content nor knowledge that quoting has been requested. We could
          change this in the future if needed.
        (WebCore::Editor::paste): Updated for change in pasteWithPasteboard’s argument type.
        (WebCore::Editor::pasteAsQuotation): Added. Similar to paste, but passes
          PasteOption::AsQuotation to pasteWithPasteboard.
        (WebCore::Editor::quoteFragmentForPasting): Added. Quoting for pasting consists of enclosing
          the fragment in a blockquote element with the "type" attribute set to "cite" and the
          "class" attribute set to a well-known value, which is used to trigger special behavior in
          ReplaceSelectionCommand. The behavior includes removing the "class" attribute in the end,
          so eventually, we could stop using this form of in-band signaling.
        * editing/Editor.h: Declared PasteOption enum class to encompass the existing allowPlainText
          and MailBlockquoteHandling arguments to pasteWithPasteboard as well as the new AsQuotation
          behavior.

        * editing/EditorCommand.cpp:
        (WebCore::executePasteAsQuotation): Added. Similar to executing Paste.
        (WebCore::createCommandMap): Added an entry for PasteAsQuotation, based on the Paste entry.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::webContentFromPasteboard): Moved from EditorIOS.mm and EditorMac.mm to
          here.

        * editing/gtk/EditorGtk.cpp:
        (WebCore::Editor::pasteWithPasteboard): Updated for new OptionSet argument, added a call to
          quote the fragment if needed.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::pasteWithPasteboard): Ditto.
        (WebCore::Editor::webContentFromPasteboard): Moved to EditorCocoa.mm.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::pasteWithPasteboard): Updated for new OptionSet argument, added a call to
          quote the fragment if needed.
        (WebCore::Editor::readSelectionFromPasteboard): Updated for new OptionSet argument to
          pasteWithPasteboard.
        (WebCore::Editor::webContentFromPasteboard): Moved to EditorCocoa.mm.

        * editing/win/EditorWin.cpp:
        (WebCore::Editor::pasteWithPasteboard): Updated for new OptionSet argument, added a call to
          quote the fragment if needed.

        * editing/wpe/EditorWPE.cpp:
        (WebCore::Editor::pasteWithPasteboard): Ditto.

2018-09-11  Simon Fraser  <simon.fraser@apple.com>

        Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings
        https://bugs.webkit.org/show_bug.cgi?id=189521

        Reviewed by Tim Horton.
        
        Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>.
        
        RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>.
        
        All the other changes are just to adapt to the new ownership patterns.
        
        I verified that no GraphicsLayers were leaked or abandoned after this change.

        No behavior change.

        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::layerWithDocumentOverlays):
        (WebCore::PageOverlayController::layerWithViewOverlays):
        (WebCore::PageOverlayController::installPageOverlay):
        (WebCore::PageOverlayController::uninstallPageOverlay):
        (WebCore::PageOverlayController::setPageOverlayNeedsDisplay):
        (WebCore::PageOverlayController::didChangeViewSize):
        (WebCore::PageOverlayController::didChangeDocumentSize):
        (WebCore::PageOverlayController::didChangeSettings):
        (WebCore::PageOverlayController::paintContents):
        (WebCore::PageOverlayController::didChangeOverlayFrame):
        (WebCore::PageOverlayController::didChangeOverlayBackgroundColor):
        * page/PageOverlayController.h:
        * page/mac/ServicesOverlayController.h:
        (WebCore::ServicesOverlayController::Highlight::layer const):
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::Highlight):
        (WebCore::ServicesOverlayController::Highlight::invalidate):
        (WebCore::ServicesOverlayController::Highlight::fadeIn):
        (WebCore::ServicesOverlayController::Highlight::fadeOut):
        (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation):
        (WebCore::ServicesOverlayController::determineActiveHighlight):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        (WebCore::GraphicsLayer::willBeDestroyed):
        (WebCore::GraphicsLayer::setChildren):
        (WebCore::GraphicsLayer::addChild):
        (WebCore::GraphicsLayer::addChildAtIndex):
        (WebCore::GraphicsLayer::addChildBelow):
        (WebCore::GraphicsLayer::addChildAbove):
        (WebCore::GraphicsLayer::replaceChild):
        (WebCore::GraphicsLayer::removeAllChildren):
        (WebCore::GraphicsLayer::removeFromParent):
        (WebCore::GraphicsLayer::setMaskLayer):
        (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants):
        (WebCore::GraphicsLayer::distributeOpacity):
        (WebCore::GraphicsLayer::traverse):
        (WebCore::dumpChildren):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::children const):
        (WebCore::GraphicsLayer::children):
        (WebCore::GraphicsLayer::maskLayer const):
        (WebCore::GraphicsLayer::replicaLayer const):
        (WebCore::GraphicsLayer::beingDestroyed const):
        (WebCore::GraphicsLayer:: const): Deleted.
        * platform/graphics/GraphicsLayerFactory.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayer::create):
        (WebCore::GraphicsLayerCA::setChildren):
        (WebCore::GraphicsLayerCA::addChild):
        (WebCore::GraphicsLayerCA::addChildAtIndex):
        (WebCore::GraphicsLayerCA::addChildBelow):
        (WebCore::GraphicsLayerCA::addChildAbove):
        (WebCore::GraphicsLayerCA::replaceChild):
        (WebCore::GraphicsLayerCA::setMaskLayer):
        (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::updateSublayerList):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayer::create):
        (WebCore::GraphicsLayerTextureMapper::setChildren):
        (WebCore::GraphicsLayerTextureMapper::addChild):
        (WebCore::GraphicsLayerTextureMapper::addChildAtIndex):
        (WebCore::GraphicsLayerTextureMapper::addChildAbove):
        (WebCore::GraphicsLayerTextureMapper::addChildBelow):
        (WebCore::GraphicsLayerTextureMapper::replaceChild):
        (WebCore::GraphicsLayerTextureMapper::setMaskLayer):
        (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::GraphicsLayer::create):
        (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect):
        (WebCore::CoordinatedGraphicsLayer::addChild):
        (WebCore::CoordinatedGraphicsLayer::addChildAtIndex):
        (WebCore::CoordinatedGraphicsLayer::addChildAbove):
        (WebCore::CoordinatedGraphicsLayer::addChildBelow):
        (WebCore::CoordinatedGraphicsLayer::replaceChild):
        (WebCore::CoordinatedGraphicsLayer::setMaskLayer):
        (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers):
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers):
        (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/win/GraphicsLayerDirect2D.cpp:
        (WebCore::GraphicsLayer::create):
        (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted.
        (WebCore::GraphicsLayerDirect2D::initialize): Deleted.
        (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted.
        (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted.
        (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::RenderLayerBacking::updateInternalHierarchy):
        (WebCore::RenderLayerBacking::updateMaskingLayer):
        (WebCore::RenderLayerBacking::updateChildClippingStrategy):
        (WebCore::RenderLayerBacking::updateScrollingLayers):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers):
        (WebCore::RenderLayerCompositor::setCompositingParent):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::parentFrameContentLayers):
        (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForHeader):
        (WebCore::RenderLayerCompositor::updateLayerForFooter):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::ensureRootLayer):
        (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged):
        * rendering/RenderLayerCompositor.h:

2018-09-12  Alex Christensen  <achristensen@webkit.org>

        Expose fewer of URL's internal members
        https://bugs.webkit.org/show_bug.cgi?id=189528

        Reviewed by Chris Dumez.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::urlHostHash):
        * platform/URL.cpp:
        (WebCore::URL::hostStart const):
        (WebCore::protocolHostAndPortAreEqual):
        (WebCore::hostsAreEqual):
        * platform/URL.h:
        (WebCore::URL::hostStart const): Deleted.
        (WebCore::URL::hostEnd const): Deleted.

2018-09-12  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Implement correct total received bytes.
        https://bugs.webkit.org/show_bug.cgi?id=189555

        Reviewed by Alex Christensen.

        Curl port only reported total network received bytes before decoding.

        No new test. InspectorTest is only available for WebKitTestRunner.

        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::didReceiveData):
        (WebCore::CurlRequest::updateNetworkLoadMetrics):
        * platform/network/curl/CurlRequest.h:

2018-09-12  Youenn Fablet  <youenn@apple.com>

        Split RTCRtpParameters idl and header file
        https://bugs.webkit.org/show_bug.cgi?id=189524

        Reviewed by Eric Carlson.

        This will be easier to manage and will allow to more easily introduce sender/receiver parameters.
        No change of behavior.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/mediastream/RTCDegradationPreference.h: Copied from Source/WebCore/Modules/mediastream/RTCRtpParameters.h.
        * Modules/mediastream/RTCDegradationPreference.idl: Added.
        * Modules/mediastream/RTCDtxStatus.h: Copied from Source/WebCore/Modules/mediastream/RTCRtpParameters.h.
        * Modules/mediastream/RTCDtxStatus.idl: Added.
        * Modules/mediastream/RTCPriorityType.h: Copied from Source/WebCore/Modules/mediastream/RTCRtpParameters.h.
        * Modules/mediastream/RTCPriorityType.idl: Added.
        * Modules/mediastream/RTCRtpCodecParameters.h: Copied from Source/WebCore/Modules/mediastream/RTCRtpParameters.h.
        * Modules/mediastream/RTCRtpCodecParameters.idl: Added.
        * Modules/mediastream/RTCRtpEncodingParameters.h: Copied from Source/WebCore/Modules/mediastream/RTCRtpParameters.h.
        * Modules/mediastream/RTCRtpEncodingParameters.idl: Added.
        * Modules/mediastream/RTCRtpFecParameters.h: Copied from Source/WebCore/Modules/mediastream/RTCRtpParameters.h.
        * Modules/mediastream/RTCRtpFecParameters.idl: Added.
        * Modules/mediastream/RTCRtpHeaderExtensionParameters.h: Copied from Source/WebCore/Modules/mediastream/RTCRtpParameters.h.
        * Modules/mediastream/RTCRtpHeaderExtensionParameters.idl: Added.
        * Modules/mediastream/RTCRtpParameters.h:
        * Modules/mediastream/RTCRtpParameters.idl:
        * Modules/mediastream/RTCRtpRtxParameters.h: Copied from Source/WebCore/Modules/mediastream/RTCRtpParameters.h.
        * Modules/mediastream/RTCRtpRtxParameters.idl: Added.
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
        (WebCore::toRTCEncodingParameters):
        (WebCore::fromRTCEncodingParameters):
        (WebCore::toRTCHeaderExtensionParameters):
        (WebCore::fromRTCHeaderExtensionParameters):
        (WebCore::toRTCCodecParameters):
        (WebCore::toRTCRtpParameters):
        (WebCore::fromRTCRtpParameters):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2018-09-12  Ali Juma  <ajuma@chromium.org>

        [IntersectionObserver] Implement rootMargin expansion
        https://bugs.webkit.org/show_bug.cgi?id=189525

        Reviewed by Simon Fraser.

        Expand the root intersection rectangle by the observer's rootMargin when computing
        intersections.

        Test: imported/w3c/web-platform-tests/intersection-observer/root-margin.html

        * dom/Document.cpp:
        (WebCore::expandRootBoundsWithRootMargin):
        (WebCore::computeIntersectionRects):
        * page/IntersectionObserver.h:
        (WebCore::IntersectionObserver::rootMarginBox const):
        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::expand):

2018-09-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] error: non-constant-expression cannot be narrowed from type 'int' to 'SHORT'
        https://bugs.webkit.org/show_bug.cgi?id=189542

        Reviewed by Alex Christensen.

        No new tests (No behavior change).

        * platform/graphics/win/IntPointWin.cpp:
        (WebCore::IntPoint::operator POINTS const): Narrowed m_x and m_y by using static_cast.

2018-09-12  Guillaume Emont  <guijemont@igalia.com>

        Add IGNORE_WARNING_.* macros
        https://bugs.webkit.org/show_bug.cgi?id=188996

        Reviewed by Michael Catanzaro.

        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::overrideAttachmentParent):
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment const):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper renderWidgetChildren]):
        (-[WebAccessibilityObjectWrapper convertPointToScreenSpace:]):
        (-[WebAccessibilityObjectWrapper role]):
        (-[WebAccessibilityObjectWrapper roleDescription]):
        * bridge/objc/WebScriptObject.mm:
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::fieldNamed const):
        * crypto/CommonCryptoUtilities.cpp:
        (WebCore::getCommonCryptoDigestAlgorithm):
        * crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:
        (WebCore::encryptAES_GCM):
        (WebCore::decyptAES_GCM):
        * crypto/mac/SerializedCryptoKeyWrapMac.mm:
        (WebCore::wrapSerializedCryptoKey):
        (WebCore::unwrapSerializedCryptoKey):
        * css/makeSelectorPseudoClassAndCompatibilityElementMap.py:
        * css/makeSelectorPseudoElementsMap.py:
        * editing/TextIterator.cpp:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::pasteWithPasteboard):
        (WebCore::Editor::takeFindStringFromSelection):
        (WebCore::Editor::replaceNodeFromPasteboard):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::sendFakeEventsAfterWidgetTracking):
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::paintContents):
        * platform/LocalizedStrings.cpp:
        (WebCore::formatLocalizedString):
        * platform/ScreenProperties.h:
        (WebCore::ScreenData::decode):
        * platform/gamepad/mac/HIDGamepadProvider.cpp:
        (WebCore::HIDGamepadProvider::stopMonitoringInput):
        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::sharedDisplay):
        * platform/graphics/SurrogatePairAwareTextIterator.cpp:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        (WebCore::MediaSelectionGroupAVFObjC::updateOptions):
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::update):
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTextTrack):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldDisableSleep):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::IGNORE_CLANG_WARNING_END):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVSampleBufferErrorListener beginObservingRenderer:]):
        (-[WebAVSampleBufferErrorListener stopObservingRenderer:]):
        (-[WebAVSampleBufferErrorListener observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::IGNORE_CLANG_WARNING_END):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayer::drawLayerContents):
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::FontCascade::fontForCombiningCharacterSequence const):
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoderCG::createFrameImageAtIndex):
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        * platform/graphics/cocoa/WebGLLayer.h:
        (IGNORE_CLANG_WARNING):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/mac/IconMac.mm:
        (WebCore::Icon::Icon):
        * platform/graphics/mac/PDFDocumentImageMac.mm:
        (WebCore::PDFDocumentImage::drawPDFPage):
        * platform/graphics/mac/WebKitNSImageExtras.mm:
        (-[NSImage _web_lockFocusWithDeviceScaleFactor:]):
        * platform/ios/DragImageIOS.mm:
        * platform/mac/DragImageMac.mm:
        (WebCore::scaleDragImage):
        (WebCore::createDragImageForLink):
        * platform/mac/LegacyNSPasteboardTypes.h:
        * platform/mac/LocalCurrentGraphicsContext.mm:
        (WebCore::LocalCurrentGraphicsContext::LocalCurrentGraphicsContext):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::createForCopyAndPaste):
        (WebCore::Pasteboard::createForDragAndDrop):
        (WebCore::setDragImageImpl):
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::globalPoint):
        * platform/mac/SSLKeyGeneratorMac.mm:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformContentsToScreen const):
        (WebCore::ScrollView::platformScreenToContents const):
        * platform/mac/ThemeMac.mm:
        (WebCore::drawCellFocusRingWithFrameAtTime):
        * platform/mac/WebPlaybackControlsManager.mm:
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::paint):
        * platform/mediastream/RealtimeIncomingAudioSource.h:
        * platform/mediastream/RealtimeIncomingVideoSource.h:
        * platform/mediastream/RealtimeOutgoingAudioSource.h:
        * platform/mediastream/RealtimeOutgoingVideoSource.h:
        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::reportErrorToClient):
        * platform/network/create-http-header-name-table:
        * platform/text/TextEncoding.cpp:
        * testing/MockLibWebRTCPeerConnection.h:
        * xml/XPathGrammar.cpp:

2018-09-12  Pablo Saavedra  <psaavedra@igalia.com>

        Linking against libWPEWebKit-0.1.so is not posible when WPE is build with ENABLE_VIDEO=OFF and ENABLE_WEB_AUDIO=OFF
        https://bugs.webkit.org/show_bug.cgi?id=189540

        Reviewed by Philippe Normand.

        Related issues:

        This issue is related with changes in https://bugs.webkit.org/show_bug.cgi?id=183080
        This issue is introduced in https://bugs.webkit.org/show_bug.cgi?id=186547

        No new tests, no changes in the functionality.

        * platform/GStreamer.cmake:
        * platform/SourcesGLib.txt:
        * platform/mediastream/libwebrtc/LibWebRTCProviderGlib.cpp:
        (WebCore::LibWebRTCProvider::webRTCAvailable):

2018-09-11  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed WPE build fix.

        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        Add extra header inclusions to get this code building after the unified
        sources system shifted it into a different translation unit.

2018-09-11  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] WebInspector doesn't display request headers added during processing.
        https://bugs.webkit.org/show_bug.cgi?id=189531

        Reviewed by Alex Christensen.

        While processing the request, Curl port network layer adds some headers to the request
        such as cookies. Those headers should be displayed in the WebInspector.

        Tested on MiniBrowser.

        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::didReceiveHeader):
        (WebCore::CurlRequest::didCompleteTransfer):
        (WebCore::CurlRequest::updateNetworkLoadMetrics):
        * platform/network/curl/CurlRequest.h:

2018-09-11  James Savage  <james.savage@apple.com>

        Follow up to:
        Expose -apple-system-container-border color to internal web views.
        https://bugs.webkit.org/show_bug.cgi?id=189178.

        Reviewed by Timothy Hatcher.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor const): Add a separate #if block for
        Mojave. When I used CSSValueAppleSystemFindHighlightBackground as a template
        for this change, I had to write out the condition in the first change, but
        mistakenly thought I could reuse the block here. Turns out the versions were
        different, and I could not.

2018-09-11  Youenn Fablet  <youenn@apple.com>

        Remove MediaDevices NoInterfaceObject
        https://bugs.webkit.org/show_bug.cgi?id=189512

        Reviewed by Alex Christensen.

        Covered by rebased WPT tests.

        * Modules/mediastream/MediaDevices.idl:

2018-09-11  Jer Noble  <jer.noble@apple.com>

        [MediaCapabilities] Implement MediaEngineConfigurationFactory registration
        https://bugs.webkit.org/show_bug.cgi?id=189438

        Reviewed by Eric Carlson.

        Implement a mechanism to register platform-specific MediaEngineConfigurationFactory methods, and a mechanism to iterate
        over those registered factories when createDecodingConfiguration() and createEncodingConfiguration() are called.

        The Factory has been radically simplified; the concept of MediaEngineDecodingConfiguration
        and MediaEngineEncodingConfiguration and its subclasess have been removed. Since the primary
        objects representing video and audio configurations are IDLDictionaries, the native objects
        are just structs full of POD types (and Strings). Since these have no dependencies on
        higher-level HTML concepts, they can be moved into platform/ and accessed from there. This
        patch also converts MediaCapabilitiesInfo to an Interface, so its implementation also can
        become a struct and live in platform/. The MediaEngineDecodingConfigurationMock and
        MediaEngineEncodingConfigurationMock have been consolidated in a single class which simply
        parses MediaDecodingConfiguration and MediaEncodingConifguration objects (now that they live
        in Platform) and return a MediaCapabilitiesInfo object (now that it does too).

        * Modules/mediacapabilities/MediaCapabilities.cpp:
        (WebCore::isValidVideoConfiguration):
        (WebCore::MediaCapabilities::decodingInfo):
        (WebCore::MediaCapabilities::encodingInfo):
        * Modules/mediacapabilities/MediaCapabilitiesInfo.h: Removed.
        * Modules/mediacapabilities/MediaCapabilitiesInfo.idl:
        * Modules/mediacapabilities/VideoConfiguration.idl:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/MediaCapabilitiesInfo.h: Copied from Source/WebCore/Modules/mediacapabilities/MediaDecodingType.h.
        * platform/mediacapabilities/AudioConfiguration.h: Renamed from Source/WebCore/Modules/mediacapabilities/AudioConfiguration.h.
        * platform/mediacapabilities/MediaConfiguration.h: Renamed from Source/WebCore/Modules/mediacapabilities/MediaConfiguration.h.
        * platform/mediacapabilities/MediaDecodingConfiguration.h: Renamed from Source/WebCore/Modules/mediacapabilities/MediaDecodingConfiguration.h.
        * platform/mediacapabilities/MediaDecodingType.h: Renamed from Source/WebCore/Modules/mediacapabilities/MediaDecodingType.h.
        * platform/mediacapabilities/MediaEncodingConfiguration.h: Renamed from Source/WebCore/Modules/mediacapabilities/MediaEncodingConfiguration.h.
        * platform/mediacapabilities/MediaEncodingType.h: Renamed from Source/WebCore/Modules/mediacapabilities/MediaEncodingType.h.
        * platform/mediacapabilities/MediaEngineConfiguration.cpp: Removed.
        * platform/mediacapabilities/MediaEngineConfiguration.h: Removed.
        * platform/mediacapabilities/MediaEngineConfigurationFactory.cpp:
        (WebCore::factories):
        (WebCore::MediaEngineConfigurationFactory::createDecodingConfiguration):
        (WebCore::MediaEngineConfigurationFactory::createEncodingConfiguration):
        * platform/mediacapabilities/MediaEngineConfigurationFactory.h:
        * platform/mediacapabilities/MediaEngineEncodingConfiguration.h: Removed.
        * platform/mediacapabilities/VideoConfiguration.h: Renamed from Source/WebCore/Modules/mediacapabilities/VideoConfiguration.h.
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.h:
        * platform/mock/MediaEngineConfigurationFactoryMock.cpp: Added.
        (WebCore::canDecodeMedia):
        (WebCore::canSmoothlyDecodeMedia):
        (WebCore::canPowerEfficientlyDecodeMedia):
        (WebCore::canEncodeMedia):
        (WebCore::canSmoothlyEncodeMedia):
        (WebCore::canPowerEfficientlyEncodeMedia):
        (WebCore::MediaEngineConfigurationFactoryMock::createDecodingConfiguration):
        (WebCore::MediaEngineConfigurationFactoryMock::createEncodingConfiguration):
        * platform/mock/MediaEngineConfigurationFactoryMock.h: Renamed from Source/WebCore/platform/mediacapabilities/MediaEngineDecodingConfiguration.h.
        * platform/mock/MediaEngineDecodingConfigurationMock.cpp: Removed.
        * platform/mock/MediaEngineDecodingConfigurationMock.h: Removed.
        * platform/mock/MediaEngineEncodingConfigurationMock.cpp: Removed.
        * platform/mock/MediaEngineEncodingConfigurationMock.h: Removed.

2018-09-08  Ryosuke Niwa  <rniwa@webkit.org>

        :first-child, :last-child, :nth-child, and :nth-of-type don't work on shadow root's children
        https://bugs.webkit.org/show_bug.cgi?id=166748
        <rdar://problem/29649177>

        Reviewed by Yusuke Suzuki.

        Added the support for matching positional pseudo classes. For now, we invalidate whenever a child node
        of a non-UA ShadowRoot is mutated instead of a fine-grained style invalidation as done for regular elements.

        Tests: fast/shadow-dom/nth-node-on-shadow-child-invalidation.html
               fast/shadow-dom/nth-node-on-shadow-child-no-jit.html
               fast/shadow-dom/nth-node-on-shadow-child.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateWalkToParentElementOrShadowRoot):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsFirstChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsLastChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsOnlyChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateNthChildParentCheckAndRelationUpdate):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChildOf):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateNthLastChildParentCheckAndRelationUpdate):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthLastChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthLastChildOf):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::childrenChanged): Invalidate the subtree whenever a child node is mutated.
        * dom/ShadowRoot.h:
        * domjit/DOMJITHelpers.h:
        (WebCore::DOMJIT::branchTestIsShadowRootFlagOnNode): Added.
        (WebCore::DOMJIT::branchTestIsElementOrShadowRootFlagOnNode): Added.

2018-09-11  Per Arne Vollan  <pvollan@apple.com>

        Addressing post-review feedback on r235619.
        https://bugs.webkit.org/show_bug.cgi?id=187925

        Unreviewed.

        * testing/Internals.cpp:
        (WebCore::Internals::primaryScreenDisplayID):
        * testing/Internals.h:

2018-09-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] [WK2] Support changing foreground colors via color panel
        https://bugs.webkit.org/show_bug.cgi?id=189382
        <rdar://problem/44227311>

        Reviewed by Ryosuke Niwa.

        Small adjustments to support changing foreground text color using NSColorPanel in WebKit2. See comments below.
        Tested by FontManagerTests.ChangeFontColorWithColorPanel.

        * editing/EditingStyle.cpp:
        (WebCore::StyleChange::extractTextStyles):

        Support setting foreground text color with alpha by using a styled span element rather than a font element with
        attributes. To do this, only populate `StyleChange::m_applyFontColor` if the color is opaque. This is because
        the font element does not support `rgba()` syntax, so any font colors here with alpha that are serialized to
        `rgba()` result in a garbage value for the computed color style.

        * editing/FontAttributeChanges.cpp:
        (WebCore::FontAttributeChanges::editAction const):

        Add a helper to return the relevant EditAction describing this set of FontAttributeChanges.

        * editing/FontAttributeChanges.h:
        (WebCore::FontChanges::isEmpty const):

2018-09-11  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Shrink size of ResourseResponseBase
        https://bugs.webkit.org/show_bug.cgi?id=189501

        Reviewed by Simon Fraser.

        We reduce the size of ResourceResponseBase by the following two optimizations.

        1. Use bitfields for bool flags and reorder them.

        2. Use Markable<> in CacheControlDirectives, which is held by ResourceResponseBase.

        This patch reduces the size of ResourceResponseBase from 416 to 392 bytes.

        No behavior change.

        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::responseReceived):
        (WebCore::WebCoreAVFResourceLoader::fulfillRequestWithResource):
        * platform/network/CacheValidation.h:
        (WebCore::CacheControlDirectives::CacheControlDirectives):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::ResourceResponseBase):
        (WebCore::ResourceResponseBase::contentRange const):
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::decode):

2018-09-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix some -Wreturn-type warnings

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::sourceFromNewReceiver):
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
        (WebCore::toRTCRtpTransceiverDirection):
        (WebCore::fromRTCRtpTransceiverDirection):

2018-09-11  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a speculative build fix for r235888.

        * Modules/mediastream/MediaDevices.h:
        Add class Document forward declaration.

2018-09-11  Woodrow Wang  <woodrow_wang@apple.com>

        Add Web API Statistics Collection
        https://bugs.webkit.org/show_bug.cgi?id=187773
        <rdar://problem/44155162>

        Reviewed by Brent Fulgham.

        Added data collection for web API statistics, specifically regarding the canvas, font loads, 
        screen functions, and navigator functions. The data collection code is placed under a runtime 
        enabled feature flag. The statistics are stored in a ResourceLoadStatistics object and written 
        to a plist on disk. Added a new file CanvasActivityRecord.h and CanvasActivityRecord.cpp which
        includes a struct to keep track of HTML5 canvas element read and writes. 

        Tests: http/tests/webAPIStatistics/canvas-read-and-write-data-collection.html
               http/tests/webAPIStatistics/font-load-data-collection.html
               http/tests/webAPIStatistics/navigator-functions-accessed-data-collection.html
               http/tests/webAPIStatistics/screen-functions-accessed-data-collection.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::load):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::fontRangesForFamily):
        (WebCore::CSSFontSelector::fallbackFontAt):

        The following are the functions where we'd like to record a canvas read.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toDataURL):
        (WebCore::HTMLCanvasElement::toBlob):
        (WebCore::HTMLCanvasElement::getImageData):
        (WebCore::HTMLCanvasElement::toMediaSample):
        (WebCore::HTMLCanvasElement::captureStream):

        The following are the functions where we'd like to record a canvas write.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::measureText):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):

        The following files and functions handle the CanvasActivityRecord struct and
        its respective functions.

        * loader/CanvasActivityRecord.cpp: Added.
        (WebCore::CanvasActivityRecord::recordWrittenOrMeasuredText):
        (WebCore::CanvasActivityRecord::mergeWith):
        * loader/CanvasActivityRecord.h: Added.
        (WebCore::CanvasActivityRecord::encode const):
        (WebCore::CanvasActivityRecord::decode):

        * loader/DocumentThreadableLoader.cpp:
        * loader/FrameLoader.cpp:
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logFontLoad):
        (WebCore::ResourceLoadObserver::logCanvasRead):
        (WebCore::ResourceLoadObserver::logCanvasWriteOrMeasure):
        (WebCore::ResourceLoadObserver::logNavigatorAPIAccessed):
        (WebCore::ResourceLoadObserver::logScreenAPIAccessed):

        Before, entries in the ResourceLoadStatistics involving HashSets used "origin" as the key. 
        Now the encodeHashSet function has been generalized to take any key to encode the entries 
        in the HashSet. Also added functionality to encode an OptionSet by converting it to its 
        raw bitmask state. 

        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::encodeHashSet):
        (WebCore::encodeOriginHashSet):
        (WebCore::encodeOptionSet):
        (WebCore::encodeFontHashSet):
        (WebCore::encodeCanvasActivityRecord):
        (WebCore::ResourceLoadStatistics::encode const):
        (WebCore::decodeHashSet):
        (WebCore::decodeOriginHashSet):
        (WebCore::decodeOptionSet):
        (WebCore::decodeFontHashSet):
        (WebCore::decodeCanvasActivityRecord):
        (WebCore::ResourceLoadStatistics::decode):
        (WebCore::navigatorAPIEnumToString):
        (WebCore::screenAPIEnumToString):
        (WebCore::appendNavigatorAPIOptionSet):
        (WebCore::appendScreenAPIOptionSet):
        (WebCore::ResourceLoadStatistics::toString const):
        (WebCore::ResourceLoadStatistics::merge):
        * loader/ResourceLoadStatistics.h:
        * loader/ResourceTiming.cpp:

        The following are the navigator functions recorded for the web API statistics.

        * page/Navigator.cpp:
        (WebCore::Navigator::appVersion const):
        (WebCore::Navigator::userAgent const):
        (WebCore::Navigator::plugins):
        (WebCore::Navigator::mimeTypes):
        (WebCore::Navigator::cookieEnabled const):
        (WebCore::Navigator::javaEnabled const):

        The following are the screen functions recorded for the web API statistics.

        * page/Screen.cpp:
        (WebCore::Screen::height const):
        (WebCore::Screen::width const):
        (WebCore::Screen::colorDepth const):
        (WebCore::Screen::pixelDepth const):
        (WebCore::Screen::availLeft const):
        (WebCore::Screen::availTop const):
        (WebCore::Screen::availHeight const):
        (WebCore::Screen::availWidth const):

2018-09-11  Pablo Saavedra  <psaavedra@igalia.com>

        playbackControlsManagerUpdateTimerFired and
        m_playbackControlsManagerUpdateTimer must be
        guarded with ENABLE(VIDEO), otherwise the following
        error occurs with the VIDEO feature turned off:

          error: 'MediaElementSession' has not been declared

        Add missing #if ENABLE(VIDEO) Page.cpp and Page.h
        https://bugs.webkit.org/show_bug.cgi?id=189500

        Reviewed by Anders Carlsson.

        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::schedulePlaybackControlsManagerUpdate):
        * page/Page.h:

2018-09-11  Frederic Wang  <fwang@igalia.com>

        Refactor filter list checking code
        https://bugs.webkit.org/show_bug.cgi?id=185087

        Reviewed by Antonio Gomes.

        No new tests, behavior unchanged.

        * page/animation/KeyframeAnimation.h: Add missing forward-declaration FilterOperations.

== Rolled over to ChangeLog-2018-09-11 ==
