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

        Layers painting into shared backing need to contribute to overlap
        https://bugs.webkit.org/show_bug.cgi?id=198021

        Reviewed by Zalan Bujtas.
        
        Layers that paint into a composited (non-root) layer get added to the overlap map so
        that later layers correct overlap them; this is done via the test against currentState.compositingAncestor.

        We need the same logic for layers that paint into shared backing; they need to behave
        the same way in terms of how they contribute to overlap. We already had currentState.backingSharingAncestor
        which was unused, but now use it for this, and correctly null it out when a layer composites.

        Bug was noticed during testing, and not known to affect any websites (though it probably does).
        
        Also move the overlap container popping into updateOverlapMap() so the two callers can
        share the code, and more explicitly track whether a container was pushed.

        Test: compositing/shared-backing/sharing-child-contributes-to-overlap.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::traverseUnchangedSubtree):
        (WebCore::RenderLayerCompositor::updateOverlapMap const):
        * rendering/RenderLayerCompositor.h:

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

        Implement CSS `display: flow-root` (modern clearfix)
        https://bugs.webkit.org/show_bug.cgi?id=165603

        Reviewed by Zalan Bujtas.

        This change follows https://drafts.csswg.org/css-display-3/#valdef-display-flow-root as below.

        'display: flow-root' generates a block container box, and lays out its contents using flow layout.
        It always establishes a new block formatting context for its contents.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in:
        * css/StyleResolver.cpp:
        (WebCore::equivalentBlockDisplay):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::createsNewFormattingContext const):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        * rendering/style/RenderStyleConstants.h:

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

        [CMake] Use builtin FindICU
        https://bugs.webkit.org/show_bug.cgi?id=197934

        Reviewed by Michael Catanzaro.

        Remove uses of ICU_INCLUDE_DIRS and ICU_LIBRARIES.

        * CMakeLists.txt:
        * PlatformPlayStation.cmake:
        * PlatformWPE.cmake:

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

        Enable legacy EME for iOS WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=197964
        <rdar://problem/50625666>

        Reviewed by Wenson Hsieh.

        This was attempted unsuccessfully in r230169.
        Verified manually that it works as desired.

        * page/RuntimeEnabledFeatures.h:

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

        ASSERTION FAILED: !m_backingStore in WebCore::IDBServer::UniqueIDBDatabase::didDeleteBackingStore(uint64_t)
        https://bugs.webkit.org/show_bug.cgi?id=197741
        <rdar://problem/50625006>

        Reviewed by Youenn Fablet.

        If an open request is made before a delete request, open task should be performed before delete task on the
        database thread. After r242911, open request needs to wait decision of StorageQuotaManager before posting task
        to database thread, while delete request needs not. This makes deletion happen before open.

        We need to make sure tasks are in correct order by not starting next open or delete request when database is in 
        the middle of open or deletion.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::performCurrentOpenOperation):
        (WebCore::IDBServer::UniqueIDBDatabase::handleDatabaseOperations):

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

        Add a website policy to disable the legacy -webkit-overflow-scrolling:touch behavior
        https://bugs.webkit.org/show_bug.cgi?id=197943
        <rdar://problem/49078202>

        Reviewed by Brent Fulgham.

        Tests: fast/scrolling/ipad/overflow-scrolling-touch-enabled-stacking-modern-compatibility-mode.html
               platform/ipad/fast/css/webkit-overflow-scrolling-parsing-modern-compatibility-mode.html

        * css/parser/CSSParserContext.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::legacyOverflowScrollingTouchPolicy const):
        (WebCore::DocumentLoader::setLegacyOverflowScrollingTouchPolicy):

2019-05-17  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-17  Youenn Fablet  <youenn@apple.com>

        Make AVVideoCaptureSource more robust to configuration failures
        https://bugs.webkit.org/show_bug.cgi?id=197997
        rdar://problem/50875662

        Reviewed by Eric Carlson.

        Covered by manual testing.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setSessionSizeAndFrameRate):
        Make sure to commit configuration once calling beginConfiguration.
        In case of error in setting frame rate, log the error but continue capturing.

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

        Implement imagesrcset and imagesizes attributes on link rel=preload
        https://bugs.webkit.org/show_bug.cgi?id=192950

        Reviewed by Youenn Fablet.

        Implement imagesrcset and imagesizes attributes for both Link header
        and link element.

        Tests: imported/w3c/web-platform-tests/preload/dynamic-adding-preload-imagesrcset.html
               imported/w3c/web-platform-tests/preload/link-header-preload-delay-onload.html
               imported/w3c/web-platform-tests/preload/link-header-preload-imagesrcset.html
               imported/w3c/web-platform-tests/preload/link-header-preload-nonce.html
               imported/w3c/web-platform-tests/preload/link-header-preload.html
               imported/w3c/web-platform-tests/preload/onload-event.html
               imported/w3c/web-platform-tests/preload/preload-with-type.html

        * html/HTMLAttributeNames.in:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * html/HTMLLinkElement.idl:
        * loader/LinkHeader.cpp:
        (WebCore::paramterNameFromString):
        (WebCore::LinkHeader::setValue):
        (WebCore::LinkHeader::LinkHeader):
        * loader/LinkHeader.h:
        (WebCore::LinkHeader::imageSrcSet const):
        (WebCore::LinkHeader::imageSizes const):
        (WebCore::LinkHeader::isViewportDependent const):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLinksFromHeader):
        (WebCore::LinkLoader::preloadIfNeeded):
        (WebCore::LinkLoader::loadLink):
        * loader/LinkLoader.h:

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

        Re-enable generate-xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=197933
        <rdar://problem/50831677>

        Reviewed by Jonathan Bedard.

        The following two tasks have been completed, and we can re-enable
        generate-xcfilelists:

        Bug 197619 <rdar://problem/50507392> Temporarily disable generate-xcfilelists (197619)
        Bug 197622 <rdar://problem/50508222> Rewrite generate-xcfilelists in Python (197622)

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

        * Scripts/check-xcfilelists.sh:

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

        Fix a typo in some user agent string logic
        https://bugs.webkit.org/show_bug.cgi?id=197992
        <rdar://problem/50895962>

        Reviewed by Brent Fulgham.

        Adjust the major version number for the desktop user agent string.

        * platform/ios/UserAgentIOS.mm:
        (WebCore::standardUserAgentWithApplicationName):

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

        REGRESSION (r245170): gmail.com inbox table header flickers
        https://bugs.webkit.org/show_bug.cgi?id=198005
        <rdar://problem/50907718>

        Reviewed by Antti Koivisto.

        When a layer started as painting into shared backing, but then became independently
        composited (e.g. by having to clip composited children), it wouldn't have the "overlap"
        indirect compositing reason. This allowed requiresOwnBackingStore() to say that it
        could paint into some ancestor, but this breaks overlap. So in this code path,
        put IndirectCompositingReason::Overlap back on the layer which restores the previous
        behavior.

        Make some logging changes to help diagnose things like this.

        Test: compositing/shared-backing/overlap-after-end-sharing.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):
        (WebCore::outputPaintOrderTreeLegend):
        (WebCore::outputPaintOrderTreeRecursive):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore const):
        (WebCore::RenderLayerCompositor::reasonsForCompositing const):
        (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason const):
        * rendering/RenderLayerCompositor.h:

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

        REGRESSION (r245170): gmail.com header flickers when hovering over the animating buttons
        https://bugs.webkit.org/show_bug.cgi?id=197975
        <rdar://problem/50865946>

        Reviewed by Antti Koivisto.

        When computeCompositingRequirements() determined that a layer could paint into shared backing, it
        pushed an overlap container. If that layer then converted to normal composting, we'd push a second
        overlap container, which left the overlap map in a bad state for the rest of the compositing
        traversal, causing layers to not get composited when necessary.

        Test: compositing/shared-backing/overlap-after-shared-to-composited.html

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

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

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

        Causing internal build failures (Requested by ShawnRoberts on
        #webkit).

        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/245401

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

        SVGElement should detach itself from all its properties before it is deleted
        https://bugs.webkit.org/show_bug.cgi?id=197954

        Reviewed by Simon Fraser.

        Before deleting the SVGElement node, SVGElement::detachAllProperties()
        needs to be called. This will make the properties be detached objects
        which means no change will be committed unless these properties are
        attached to another owner.

        Test: svg/dom/svg-properties-detach-change.html

        * dom/Node.cpp:
        (WebCore::Node::removedLastRef):
        * svg/SVGElement.h:
        (WebCore::SVGElement::detachAllProperties):

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