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

        outlook.live.com has odd viewport with edge gap
        https://bugs.webkit.org/show_bug.cgi?id=199822
        <rdar://problem/53029072>

        Reviewed by Wenson Hsieh.

        r244944 introduced a viewport width quirk because at certain screen size outlook.live.com's flex setup produced a slighly broken layout.
        We don't seem to need this quirk anymore (composed column's min-width is removed.)

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

2019-07-15  Saam Barati  <sbarati@apple.com>

        [WHLSL] Matrix memory layout should match HLSL by laying out columns linearly
        https://bugs.webkit.org/show_bug.cgi?id=199215

        Reviewed by Myles C. Maxfield.

        This patch makes it so that we lay out matrices in memory in the same
        way HLSL does. This is by laying out columns linearly in memory. So a float4x4
        composed by this series of floats in memory:
        [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
        
        composes this logical matrix:
        [[ 0,  4,  8, 12]
         [ 1,  5,  9, 13]
         [ 2,  6, 10, 14]
         [ 3,  7, 11, 15]]
        
        To implement this, we switch to using an array to represent the memory
        contents linear memory layout of a matrix. So the matrix float4x3 will now
        be an array<float, 12> in metal. Then, we change the indexed getter and
        setter methods for matrices to load and store from and to the correct
        memory locations. The memory layout of matrices is observable to WHLSL
        when using a matrix as an input/output to a shader.

        Test: webgpu/whlsl-matrix-memory-layout.html

        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::writeNativeFunction):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeTypeWriter.cpp:
        (WebCore::WHLSL::Metal::writeNativeType):

2019-07-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Text autosizing] [iPadOS] Product label text is clipped in portrait mode on the front page of sephora.com
        https://bugs.webkit.org/show_bug.cgi?id=199806
        <rdar://problem/52902482>

        Reviewed by Zalan Bujtas.

        On sephora.com, some product label text is currently boosted by idempotent text autosizing, which causes the
        labels be vertically clipped. This patch augments the idempotent text autosizing heuristic to avoid this case by
        checking if the element to be boosted has a fixed height or max height, whose value is very close to a small
        integer multiple of the line height. In this case, it's likely that the website expects the text to be no more
        than a few lines' worth of height, so boosting the text is likely to break the page.

        Test: fast/text-autosizing/ios/idempotentmode/idempotent-autosizing-candidates.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::isIdempotentTextAutosizingCandidate const):
        * rendering/style/TextSizeAdjustment.cpp:
        (WebCore::AutosizeStatus::updateStatus):
        * rendering/style/TextSizeAdjustment.h:

        Rename Fields::DisplayNone to Fields::AvoidSubtree to avoid introducing another bit in RenderStyle's inherited
        flags.

2019-07-15  Myles C. Maxfield  <mmaxfield@apple.com>

        New York font erroneously gets synthetic bold
        https://bugs.webkit.org/show_bug.cgi?id=199653

        Unreviewed watchOS build fix.

        * page/ProcessWarming.cpp:
        (WebCore::ProcessWarming::prewarmGlobally):
        * page/cocoa/MemoryReleaseCocoa.mm:
        (WebCore::platformReleaseMemory):
        * platform/graphics/FontCascadeDescription.cpp:
        * platform/graphics/FontDescription.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::invalidateFontCache):
        (WebCore::lookupFallbackFont):
        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::FontCascadeDescription::effectiveFamilyAt const):
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.cpp:
        (WebCore::FontFamilySpecificationCoreText::fontRanges const):
        * platform/graphics/cocoa/SystemFontDatabaseCoreText.cpp:

2019-07-15  Commit Queue  <commit-queue@webkit.org>

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

        completely messed up the patch (Requested by litherum on
        #webkit).

        Reverted changeset:

        "New York font erroneously gets synthetic bold"
        https://bugs.webkit.org/show_bug.cgi?id=199653
        https://trac.webkit.org/changeset/247462

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

        Fix builds where HAVE_DESIGN_SYSTEM_UI_FONTS is not defined.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::fontWithFamilySpecialCase):

2019-07-11  Justin Fan  <justin_fan@apple.com>

        Unreviewed build fix.

        * Modules/webgpu/WHLSL/WHLSLRecursionChecker.cpp: Missing include.

2019-07-11  Myles C. Maxfield  <mmaxfield@apple.com>

        New York font erroneously gets synthetic bold
        https://bugs.webkit.org/show_bug.cgi?id=199653
        <rdar://problem/51692592>

        Reviewed by Simon Fraser.

        This patch adds support for -apple-system-ui-serif, -apple-system-ui-monospaced,
        and -apple-system-ui-rounded, behind an SPI that is off-by-default. We don't want
        to expose these fonts to the web because we don't a standardization story for them
        yet, but we do want some apps to be able to use them.

        WebKit clients who want to use these fonts can set
        -[WKPreferences _shouldAllowDesignSystemUIFonts] = YES.

        The patch generalizes our existing system-ui infrastructure to handle these three
        additional fonts. It also explicitly disables the unsupported dot-prefixed names
        so they don't leak out into Web content.

        Tests: fast/text/design-system-ui-10.html
               fast/text/design-system-ui-11.html
               fast/text/design-system-ui-12.html
               fast/text/design-system-ui-13.html
               fast/text/design-system-ui-14.html
               fast/text/design-system-ui-15.html
               fast/text/design-system-ui-16.html
               fast/text/design-system-ui-2.html
               fast/text/design-system-ui-3.html
               fast/text/design-system-ui-4.html
               fast/text/design-system-ui-5.html
               fast/text/design-system-ui-6.html
               fast/text/design-system-ui-7.html
               fast/text/design-system-ui-8.html
               fast/text/design-system-ui-9.html
               fast/text/design-system-ui.html

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::shouldAllowDesignSystemUIFonts const):
        * css/CSSFontFace.h:
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::load):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::initializeFontStyle):
        * page/Settings.yaml:
        * platform/graphics/FontDescription.cpp:
        (WebCore::m_shouldAllowDesignSystemUIFonts):
        (WebCore::m_shouldAllowUserInstalledFonts): Deleted.
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::shouldAllowDesignSystemUIFonts const):
        (WebCore::FontDescription::setShouldAllowDesignSystemUIFonts):
        (WebCore::FontDescription::operator== const):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::platformFontLookupWithFamily):
        (WebCore::fontWithFamily):
        * platform/graphics/cocoa/FontCacheCoreText.h:
        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::systemFontUse):
        (WebCore::systemFontCascadeList):
        (WebCore::FontCascadeDescription::effectiveFamilyCount const):
        (WebCore::FontCascadeDescription::effectiveFamilyAt const):
        (WebCore::isSystemFontString): Deleted.
        (WebCore::isUIFontTextStyle): Deleted.
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::ctFont const):
        * platform/graphics/cocoa/SystemFontDatabaseCoreText.cpp:
        (WebCore::SystemFontDatabaseCoreText::createSystemUI):
        (WebCore::SystemFontDatabaseCoreText::createDesignSystemUI):
        (WebCore::SystemFontDatabaseCoreText::createTextStyle):
        (WebCore::SystemFontDatabaseCoreText::cascadeList):
        (WebCore::SystemFontDatabaseCoreText::applyWeightItalicsAndFallbackBehavior):
        (WebCore::SystemFontDatabaseCoreText::systemFontParameters):
        * platform/graphics/cocoa/SystemFontDatabaseCoreText.h:
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::platformFontWithFamilySpecialCase):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::platformFontWithFamilySpecialCase):
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setShouldAllowDesignSystemUIFonts):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2019-07-15  Chris Dumez  <cdumez@apple.com>

        Crash under DisplayRefreshMonitorManager::displayWasUpdated()
        https://bugs.webkit.org/show_bug.cgi?id=199808
        <rdar://problem/53070144>

        Reviewed by Geoffrey Garen.

        Copy m_monitors before iterating over it because the calling displayLinkFired() on the
        monitor may end up calling DisplayRefreshMonitorManager::displayDidRefresh() synchronously,
        which removes the monitor from m_monitors.

        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::displayWasUpdated):

2019-07-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Improve wasm wpt test results by fixing miscellaneous issues
        https://bugs.webkit.org/show_bug.cgi?id=199783

        Reviewed by Mark Lam.

        Remove WebAssemblyPrototype.

        Tests: imported/w3c/web-platform-tests/wasm/jsapi/constructor/instantiate-bad-imports.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/constructor/instantiate-bad-imports.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/global/constructor.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/global/constructor.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/global/toString.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/global/toString.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/global/value-set.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/global/value-set.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/global/valueOf.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/global/valueOf.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/instance/constructor-bad-imports.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/instance/constructor-bad-imports.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/instance/constructor.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/instance/constructor.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/instance/exports.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/instance/exports.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/instance/toString.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/instance/toString.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/interface.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/interface.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/memory/buffer.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/memory/buffer.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/memory/constructor.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/memory/constructor.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/memory/grow.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/memory/grow.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/memory/toString.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/memory/toString.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/constructor.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/constructor.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/customSections.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/customSections.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/exports.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/exports.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/imports.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/imports.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/toString.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/toString.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/constructor.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/constructor.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/get-set.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/get-set.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/grow.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/grow.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/length.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/length.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/toString.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/toString.any.worker.html

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::compileStreaming):
        (WebCore::JSDOMWindowBase::instantiateStreaming):

2019-07-15  Dean Jackson  <dino@apple.com>

        [WebGL] Remove software rendering and simplify context creation on macOS
        https://bugs.webkit.org/show_bug.cgi?id=199789

        Reviewed by Sam Weinig.

        We don't ever want to fall-back to the software renderer. We'd be better
        off failing to create the context completely.

        Also, the number of fall-back attempts we were making before hitting
        the software renderer was overkill. All hardware we support should
        handle a 32bpp buffer.

        Lastly, we don't want to support supersampling - multisampling only.

        I lied… there is one more thing - failing to create the context
        was causing an ASSERT trying to remove the GC3D from the global list.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        * page/Settings.yaml: Remove forceSoftwareWebGL setting.
        * platform/graphics/GraphicsContext3DAttributes.h:
        * platform/graphics/GraphicsContext3DManager.cpp:
        (WebCore::GraphicsContext3DManager::addContext):
        (WebCore::GraphicsContext3DManager::removeContext):
        (WebCore::GraphicsContext3DManager::removeContextRequiringHighPerformance):
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::setPixelFormat): Deleted.

2019-07-14  Dean Jackson  <dino@apple.com>

        Move more WebGL things into unified builds
        https://bugs.webkit.org/show_bug.cgi?id=199787

        Reviewed by Wenson Hsieh.

        Unify as many WebGL files as possible.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/WebGLFramebuffer.cpp:
        * html/canvas/WebGLObject.h: Move a helper function into an inline.
        (WebCore::objectOrZero):
        * html/canvas/WebGLRenderingContextBase.cpp:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        * platform/mediastream/MediaStreamTrackPrivate.cpp:

2019-07-15  Keith Rollin  <krollin@apple.com>

        Add missing webgpu includes
        https://bugs.webkit.org/show_bug.cgi?id=199802
        <rdar://problem/53119120>

        Reviewed by Myles C. Maxfield.

        WHLSLFunctionWriter.cpp fails to compile on tvOS and watchOS due to
        missing includes. This file likely compiles on other platforms due to
        the Unified Sources facility that clumps several implementation files
        together, exposing those implementation files to the others' includes.
        It fails on tvOS and watchOS due to the different ways these
        implementation files can get clumped together on different platforms.

        No new tests as there is no functional change.

        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:

2019-07-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r247440.

        Broke builds

        Reverted changeset:

        "[JSC] Improve wasm wpt test results by fixing miscellaneous
        issues"
        https://bugs.webkit.org/show_bug.cgi?id=199783
        https://trac.webkit.org/changeset/247440

2019-07-15  Daniel Bates  <dabates@apple.com>

        Typing into a cell in a Google Sheet lags behind by one character
        https://bugs.webkit.org/show_bug.cgi?id=199587
        <rdar://problem/51616845>

        Reviewed by Brent Fulgham.

        Add a Google Sheets quirk. Put all DOM timers scheduled from keydown and keypress event listeners
        into a holding tank. The timers continue to tick, but are barred from executing their action until
        the next text insertion or deletion or 32 ms (on device) have elapsed, whichever is sooner. We only
        allocate a holding tank once per document, only if the quirk is active, and this allocation is done
        when the document schedules a timer on keydown or keypress. The holding tank lives for the lifetime
        of the document.

        The story behind the quirk:

        On keypress Google Sheets schedules timers and expects that a DOM update will occur (i.e. text
        will be inserted or deleted) within the same event loop iteration as the dispatched keypress. The
        UI Events spec. [1] makes no such guarantee of when a DOM update must occur in relation to the keypress
        event. It could happen in the same event loop iteration as the key press (as Google expects), the
        next iteration, 500ms later, 2 minutes later, etc. What the spec does guarantee is that by the time
        a DOM input event is dispatched that the DOM will be updated. And this is the solution to the problem
        Google Sheets is trying to solve, but is doing so using pre-IE 9 technology (though similar
        functionality was available via onpropertychange in IE < 9).

        See also <https://github.com/w3c/uievents/issues/238>, which is tracking a spec. text update for
        this quirk.

        Test: fast/events/ios/dom-update-on-keydown-quirk.html

        [1] <https://w3c.github.io/uievents/> (Editor's Draft, 14 October 2018)

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add some files to the project.

        * dom/Document.cpp:
        (WebCore::Document::domTimerHoldingTank): Added.
        * dom/Document.h:
        (WebCore::Document::domTimerHoldingTankIfExists): Added.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install): Put the newly instantiated timer into the holding tank.
        (WebCore::DOMTimer::removeById): Remove the timer from the holding tank.
        (WebCore::DOMTimer::fired): Check if the timer is in the holding tank. If it is and it is a one-
        shot timer then schedule it for the next event loop iteration. If it's a repeating timer just
        let it continue ticking. Otherwise, do what we no now and execute the timer's action. The reason
        we do not suspend timers in the holding tank is because:
            1. Far out timers (Google Sheets registers timers as far out as 5 minutes!) are not penalized.
            Though smart supension logic could avoid this. See (3).

            2. Empirical observations indicate that the keyboard will perform the insertion or deletion
            reasonably quickly (not the same event loop iteration as the keydown, but within two iterations out).
            So, the timers in the holding tank are short-lived.

            3. Simplifies the code. There is no need to keep additional bookkeeping to track multiple timer
            suspension reasons (timers currently can only have one suspension reason) or alternatively defer
            scheduling a timer until a later time and computing a new "fair" firing time when scheduled.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::internalKeyEvent): Place a token on the stack to put all DOM timers
        scheduled on keydown and keypress into the holding tank if the quirk is enabled.
        * page/Quirks.cpp:
        (WebCore::Quirks::needsDeferKeyDownAndKeyPressTimersUntilNextEditingCommand const): Added.
        * page/Quirks.h:
        * page/Settings.yaml: Added setting so that this quirk can be enabled from a layout test. This setting
        also lets us enable the quirk for all sites or for certain third-party apps if desired.
        * page/ios/DOMTimerHoldingTank.cpp: Added.
        (WebCore::DOMTimerHoldingTank::DOMTimerHoldingTank):
        (WebCore::DOMTimerHoldingTank::add):
        (WebCore::DOMTimerHoldingTank::remove):
        (WebCore::DOMTimerHoldingTank::contains):
        (WebCore::DOMTimerHoldingTank::removeAll):
        (WebCore::DOMTimerHoldingTank::stopExceededMaximumHoldTimer):
        * page/ios/DOMTimerHoldingTank.h: Added.
        (WebCore::DeferDOMTimersForScope::DeferDOMTimersForScope):
        (WebCore::DeferDOMTimersForScope::~DeferDOMTimersForScope):
        (WebCore::DeferDOMTimersForScope::isDeferring):

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

        Unreviewed, rolling out r247397, r247378, r247366.

        Broke watchOS builds.

        Reverted changesets:

        "[WebGPU] Implement GPUError and error scopes"
        https://bugs.webkit.org/show_bug.cgi?id=199655
        https://trac.webkit.org/changeset/247366/webkit

        "[WebGPU] Move error scopes out of GPUDevice for more portable error generation"
        https://bugs.webkit.org/show_bug.cgi?id=199740
        https://trac.webkit.org/changeset/247397/webkit

2019-07-15  Rob Buis  <rbuis@igalia.com>

        MathML WPT test for RadicalDegreeBottomRaisePercent fails
        https://bugs.webkit.org/show_bug.cgi?id=183631

        Reviewed by Frédéric Wang.

        When stretching the radical operator also take thickness
        and radical gap into account:
        https://mathml-refresh.github.io/mathml-core/#radicals-msqrt-mroot

        Test: imported/w3c/web-platform-tests/mathml/presentation-markup/radicals/root-parameters-1.html

        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::layoutBlock):

2019-07-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Improve wasm wpt test results by fixing miscellaneous issues
        https://bugs.webkit.org/show_bug.cgi?id=199783

        Reviewed by Mark Lam.

        Remove WebAssemblyPrototype.

        Tests: imported/w3c/web-platform-tests/wasm/jsapi/constructor/instantiate-bad-imports.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/constructor/instantiate-bad-imports.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/global/constructor.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/global/constructor.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/global/toString.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/global/toString.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/global/value-set.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/global/value-set.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/global/valueOf.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/global/valueOf.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/instance/constructor-bad-imports.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/instance/constructor-bad-imports.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/instance/constructor.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/instance/constructor.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/instance/exports.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/instance/exports.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/instance/toString.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/instance/toString.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/interface.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/interface.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/memory/buffer.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/memory/buffer.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/memory/constructor.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/memory/constructor.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/memory/grow.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/memory/grow.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/memory/toString.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/memory/toString.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/constructor.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/constructor.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/customSections.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/customSections.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/exports.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/exports.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/imports.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/imports.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/toString.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/module/toString.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/constructor.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/constructor.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/get-set.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/get-set.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/grow.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/grow.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/length.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/length.any.worker.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/toString.any.html
               imported/w3c/web-platform-tests/wasm/jsapi/table/toString.any.worker.html

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::compileStreaming):
        (WebCore::JSDOMWindowBase::instantiateStreaming):

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

        Enable a debug WebRTC mode without any encryption
        https://bugs.webkit.org/show_bug.cgi?id=199177
        <rdar://problem/52074986>

        Reviewed by Eric Carlson.

        For every RTCPeerConnection, first set whether to use encryption or not
        based on page settings.
        If encryption is disabled, log it.
        Add internals API to toggle the switch from tests.
        Test: webrtc/disable-encryption.html

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::createLibWebRTCPeerConnectionBackend):
        * inspector/agents/InspectorPageAgent.cpp:
        * page/Settings.yaml:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::setEnableWebRTCEncryption):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setEnableWebRTCEncryption):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-07-15  Sihui Liu  <sihui_liu@apple.com>

        window.openDatabase is not writable
        https://bugs.webkit.org/show_bug.cgi?id=199737
        <rdar://problem/52551332>

        Reviewed by Chris Dumez.

        In r246707 we made openDatabase an undetectable attribute of window, and it was set to be read-only. This broke 
        some sites which replace window.openDatabase with their own implementation when window.openDatabase does not 
        exists or WebSQL is not implemented. 

        This patch removes the readonly property and adds a setter for openDatabase.

        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setOpenDatabase):

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

        Filter SDP c lines
        https://bugs.webkit.org/show_bug.cgi?id=199791

        Reviewed by Eric Carlson.

        As discussed in https://github.com/rtcweb-wg/mdns-ice-candidates/issues/91,
        use 0.0.0.0 for c lines when filtering the SDP.
        Covered by updated test.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::filterSDP const):

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

        naver.com: Video stops when tapping on the video to use buttons
        https://bugs.webkit.org/show_bug.cgi?id=199784
        <rdar://problem/48068610>

        Reviewed by Maciej Stachowiak.

        Opt out of simulated mouse event sending for tv.naver.com.
        When tv.naver.com receives the simulated mouseUp at touchEnd, it pauses the video right away and calls preventDefault()
        which prevents us from running the hover heuristics.

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

2019-07-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] GitHub breaks on FreeBSD because of "unsupported browser"
        https://bugs.webkit.org/show_bug.cgi?id=199745

        Reviewed by Carlos Garcia Campos.

        It's been a while since I last updated the fake version numbers in our user agent, both for
        the user agent quirks for naughty websites and also the Safari version in our standard user
        agent. Update them. This should fix github.com on FreeBSD at least. I also noticed some
        wonkiness on Google Docs recently that I thought required this update, but I didn't do
        anything about it at the time because I wasn't able to reproduce the issue when I tried
        again later.

        This could absolutely break websites, because the web is awful, but that's calculated risk.

        * platform/UserAgentQuirks.cpp:
        (WebCore::UserAgentQuirks::stringForQuirk):
        * platform/glib/UserAgentGLib.cpp:
        (WebCore::buildUserAgentString):

2019-07-14  Chris Dumez  <cdumez@apple.com>

        Add threading assertion to WeakPtrFactory::createWeakPtr()
        https://bugs.webkit.org/show_bug.cgi?id=199639

        Reviewed by Ryosuke Niwa.

        * platform/ScrollableArea.cpp:
        * rendering/RenderObject.cpp:

2019-07-14  Dean Jackson  <dino@apple.com>

        WebGL not supported on WKWebView on UIKit for Mac
        https://bugs.webkit.org/show_bug.cgi?id=199785
        <rdar://problem/52911449>

        Reviewed by Antoine Quint.

        UIKit for Mac was not creating a CGLPixelFormatObj because
        it wasn't using the code hidden in PLATFORM(MAC). Instead
        we should be guarding for USE(OPENGL).

        There are still some inconsistencies: <rdar://53062794>

        Test: webgl/smell-test.html

        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::allowOfflineRenderers const): We have to return
        true for this, since we don't have access to the Window Server.

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

        [Text autosizing] [iPadOS] Further adjust our heuristics to determine text autosizing candidates
        https://bugs.webkit.org/show_bug.cgi?id=199780
        <rdar://problem/52289088>

        Reviewed by Simon Fraser.

        Our current idempotent text autosizing candidate heuristic makes the right judgment call most of the time, but
        there is still a large batch of text autosizing bugs left unfixed by the first iteration of the heuristic added
        in r246781. This patch attempts to address most of these bugs by adjusting the decision-tree-based heuristic
        once again, mostly with improvements to the model generation pipeline.

        During the first iteration, I placed emphasis on tuning the max tree depth and min leaf size hyperparameters
        when coming up with my decision tree, and didn't consider the inclusion or exclusion of each feature as a
        hyperparameters. As such, the trees generated using the pipeline tended to use too many features, and as a
        result, tended to have cross-validation overall accuracy scores hovering around 73%.

        In this revised model generation pipeline, I now consider the inclusion of each feature (along with max depth
        and min leaf size, as before) as a hyperparameter. Since this increases the number of hyperparameters by many
        orders of magnitude, a naive grid search (as described in the prior ChangeLog entry) is no longer a tractible
        procedure for tuning hyperparameters to the training algorithm.

        Instead, I now use a stochastic greedy algorithm to search for good sets of hyperparameters; this process begins
        with seeding some number (usually 20-24) of "searchers" with completely randomized sets of hyperparameters (i.e.
        random max depth, random leaf size, and random subsets of features). I then evaluate the average performance of
        each set of hyperparameters by using them to generate 2000 decision trees over 90% of the training data, and
        then cross-validating these trees against the remaining 10%. These cross-validation scores are aggregated into a
        single confusion matrix, which is then passed into a loss function that computes a single value indicating how
        well training with the set of hyperparameters generalized to cross-validation data. After experimenting with
        various loss functions, I settled on the following:

        `k(false positive rate)^2 + (false negative rate)^2`

        ...where a constant k is chosen to penalize false positives (i.e. broken layout) more harshly than false
        negatives (small text). Additionally, squaring the false negative and false positive rates seems to help avoid
        converging on solutions that heavily favor reducing only false positives or false negatives, or vice versa.

        The stochastic algorithm starts by computing a loss value for the randomly generated configuration. Then, for
        an indefinite number of iterations, it randomly mutates the configuration (e.g. by adding or removing features,
        or changing min leaf size or max tree depth) and computes a new loss value for the mutated configuration. If the
        mutated configuration performs better (i.e. achieves lower loss) than the current configuration, I set the
        current configuration to be the mutated configuration. Otherwise, I keep the current (non-mutated) configuration
        as-is. The stochastic algorithm then proceeds, ad-infinitum, with this current configuration.

        Of course, since each mutation is small, this strategy so far is prone to leaving each searcher stuck in local
        optima. To mitigate this, for each searcher, I keep track of a side-table of configurations that have already
        been tested; when random mutations would normally lead to testing a configuration that has already been tested,
        each searcher instead increases the chance of applying additional mutations. This has the effect of searchers
        initially exhausting similar configurations, and expanding to test more and more dissimilar configurations as
        the local alternatives all turn out to be worse. This allows searchers to effectively jump out of local optima
        after being stuck for a long time.

        So, using these strategies, I simultaneously ran a handful of searchers until they all appeared to converge
        (a process that takes 8-12 hours on my current dataset). Many of the searchers achieved configurations with
        cross-validation scores of 81% and above, up from the 73% of the previous attempt. These additionally have the
        added bonus of reducing the number of features, often making the final trees themselves shallower and simpler to
        understand than before.

        This patch introduces one such decision tree generated using a set of hyperparameters acquired via this
        stochasic search algorithm; it appears to simultaneously use fewer features, and achieve better cross-validation
        performance.

        Test: fast/text-autosizing/ios/idempotentmode/idempotent-autosizing-candidates.html

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

        Adjust the early return to bail if either (1) the element is a candidate and the computed size is already equal
        to the boosted size, or (2) the element is not a candidate and the computed size is already equal to the
        specified size. Since the autosizing candidate heuristic depends on styles specified on the element itself (as
        opposed to styles on any element in the ancestor chain), a parent may be an autosizing candidate, but a child of
        it may not.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::isIdempotentTextAutosizingCandidate const):

        Revamp the idempotent text autosizing candidate heuristic. See the explanation above for more details.

        * rendering/style/RenderStyle.h:

        Remove some bits from RenderStyle's autosizeStatus, now that we care about fewer bits of information from the
        inherited flags.

        * rendering/style/TextSizeAdjustment.cpp:
        (WebCore::AutosizeStatus::updateStatus):
        * rendering/style/TextSizeAdjustment.h:

2019-07-13  Simon Fraser  <simon.fraser@apple.com>

        Don't do async overflow scrolling for visibility:hidden scrollers
        https://bugs.webkit.org/show_bug.cgi?id=199779

        Reviewed by Dean Jackson.
        
        An overflow:scroll with visibility:hidden is not scrollable on macOS, even if it has visible
        content. So disable async overflow:scroll when the scroller has non-visible visibility (this also
        takes visibility on ancestors into account).
        
        visibility:hidden overflow:scroll can be common because some JS libraries use it
        (https://github.com/wnr/element-resize-detector).

        Test: compositing/scrolling/async-overflow-scrolling/visibility-hidden-scrollers.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::canUseCompositedScrolling const): Don't use hasVisibleContent() because
        that's affected by  visible children.

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

        [WHLSL] Return statements don't need to keep track of the function they're in
        https://bugs.webkit.org/show_bug.cgi?id=199763

        Reviewed by Myles C. Maxfield.

        Return::m_function is only used in the Checker, and it can easily enough keep track of the current function.
        This means we no longer need to keep track of the current function in the NameResolver, and we can save 8 bytes per Return

        Since I was touching the NameResolver I also removed a few pointless overrides of Visitor::visit().

        No new tests as there is no intended functional change.

        * Modules/webgpu/WHLSL/AST/WHLSLReturn.h:
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::Checker::visit):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:
        (WebCore::WHLSL::NameResolver::NameResolver):
        (WebCore::WHLSL::resolveTypeNamesInFunctions):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.h:

2019-07-13  Andres Gonzalez  <andresg_22@apple.com>

        Add accessibility support to WKDataListSuggestionsView.
        https://bugs.webkit.org/show_bug.cgi?id=199772
        <rdar://problem/47095851>

        Reviewed by Chris Fleizach.

        Localizable strings for accessibility announcements.

        * en.lproj/Localizable.strings:

2019-07-13  Chris Dumez  <cdumez@apple.com>

        Drop non thread-safe usage of WeakPtr in VideoFullscreenInterfaceAVKit
        https://bugs.webkit.org/show_bug.cgi?id=199775

        Reviewed by Eric Carlson.

        The VideoFullscreenInterfaceAVKit constructor was making a weakPtr on the UI Thread
        of an WebThread object. The WeakPtr would then be used as a data member throughout
        the class on the UIThread. This is not thread-safe.

        This patch switches to using a raw pointer instead of a WeakPtr. This is a partial
        rollout of r243298, which turned the raw pointer into a WeakPtr for hardening
        purposes. For extra safety, this patch updates the VideoFullscreenControllerContext
        so that it notifies its clients (i.e. PlaybackSessionInterfaceAVKit) that it is
        getting destroyed, so that they can null-out their m_videoFullscreenModel &
        m_fullscreenChangeObserver data members. This gives the sames guarantees as WeakPtr
        but in a thread-safe way.

        This is very similar to the fix that was done for PlaybackSessionInterfaceAVKit in
        r247380.

        * platform/cocoa/VideoFullscreenModel.h:
        (WebCore::VideoFullscreenModelClient::modelDestroyed):
        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::setVideoFullscreenModel):
        (VideoFullscreenInterfaceAVKit::setVideoFullscreenChangeObserver):
        (VideoFullscreenInterfaceAVKit::modelDestroyed):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::~VideoFullscreenControllerContext):

2019-07-13  Zalan Bujtas  <zalan@apple.com>

        Cannot bring up custom media controls at all on v.youku.com
        https://bugs.webkit.org/show_bug.cgi?id=199699
        <rdar://problem/51835327>

        Reviewed by Simon Fraser.

        The "find the node under the finger" heuristic should only find nodes that are visible to hit-testing.

        When the user taps on the screen, we run a "find the best node under the finger" heuristic and use the node's location
        to dispatch the associated event (e.g. mousePressed).
        Ideally the "best node under the finger" and the final target node for the associated event are the same.
        However these two methods configure the hit-testing process differently which could lead to node mismatch.
        The "best node" heuristic calls hit-testing with AllowChildFrameContent. This flag allows hit-testing to descend into
        subframes even if the subframe is not visible to hit-testing (visibility: hidden).
        While event dispatching never descends into subfames through hit-testing, but instead it forwards the dispatching to subframes that are visible to hit-testing.

        This patch addresses the mismatching node issue by calling the descending version of hit-testing with a flag that enforces visiblity check before descending into a subframe.

        Tests: fast/events/touch/ios/visibility-hidden-iframe-click.html
               fast/events/touch/ios/visibility-hidden-nested-iframe-click.html

        * page/ios/FrameIOS.mm:
        (WebCore::Frame::hitTestResultAtViewportLocation):
        * rendering/HitTestRequest.h:
        (WebCore::HitTestRequest::skipsChildFrameContentInvisibleToHitTest const):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::nodeAtPoint):

2019-07-13  Chris Dumez  <cdumez@apple.com>

        Fix non thread-safe usage of makeWeakPtr() in MediaPlayerPrivateAVFoundation
        https://bugs.webkit.org/show_bug.cgi?id=199777

        Reviewed by Eric Carlson.

        The code was calling makeWeakPtr() on a main-thread object, from a background thread.
        This is not thread safe. To address the issue, this patches creates the WeakPtr ahead
        of time, on the main thread.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):
        (WebCore::MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification):
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

2019-07-12  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Mock GStreamer realtime sources should keep a Ref of their mock realtime media sources
        https://bugs.webkit.org/show_bug.cgi?id=194326

        WrappedMockRealtimeVideoSource is a subclass of RealtimeMediaSource which is refcounted, we can't
        use a unique_ptr on those.

        Also changed m_wrappedSource type to its actual type so it is cleaner even if needed
        to upcast it to RealtimeMediaSource so some method that are made private in the mock
        can still be called.

        Reviewed by Youenn Fablet.

        This fixes MediaStream tests

        * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.cpp:
        (WebCore::WrappedMockRealtimeAudioSource::create):
        (WebCore::WrappedMockRealtimeAudioSource::asRealtimeMediaSource):
        (WebCore::WrappedMockRealtimeAudioSource::WrappedMockRealtimeAudioSource):
        (WebCore::m_wrappedSource):
        (WebCore::MockGStreamerAudioCaptureSource::startProducingData):
        (WebCore::MockGStreamerAudioCaptureSource::settings):
        (WebCore::MockGStreamerAudioCaptureSource::capabilities):
        * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.h:
        * platform/mediastream/gstreamer/MockGStreamerVideoCaptureSource.cpp:
        (WebCore::WrappedMockRealtimeVideoSource::create):
        (WebCore::WrappedMockRealtimeVideoSource::asRealtimeMediaSource):
        (WebCore::WrappedMockRealtimeVideoSource::WrappedMockRealtimeVideoSource):
        (WebCore::m_wrappedSource):
        (WebCore::MockGStreamerVideoCaptureSource::settings):
        (WebCore::MockGStreamerVideoCaptureSource::capabilities):
        * platform/mediastream/gstreamer/MockGStreamerVideoCaptureSource.h:

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

        Change RELEASE_ASSERT in DocumentWriter::addData to ASSERT and early return
        https://bugs.webkit.org/show_bug.cgi?id=199756
        <rdar://problem/51554775>

        Reviewed by Brady Eidson.

        Attempts to reach this assertion were unsuccessful, but sometimes this assertion crashes.
        Let's change it to an early return to prevent crashes.

        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::addData):

2019-07-12  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Move error scopes out of GPUDevice for more portable error generation
        https://bugs.webkit.org/show_bug.cgi?id=199740

        Reviewed by Myles C. Maxfield.

        Move error generation into a separate RefCounted class to allow GPU objects to generate 
        errors independent of any GPUDevice.
        Create GPUObjectBase to delegate error generation and refactor GPUBuffer to inherit from GPUObjectBase.

        No behavior change or new tests. Error scopes covered by error-scopes-test.html.

        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::WebGPUDevice): Now creates a GPUErrorGenerator.
        (WebCore::WebGPUDevice::createBuffer const): Pass the GPUErrorGenerator to any created GPUBuffer.
        (WebCore::WebGPUDevice::createBufferMapped const): Ditto.
        (WebCore::WebGPUDevice::popErrorScope): Shouldn't be const. Can just ask for the GPUError rather than passing a lambda.
        (WebCore::WebGPUDevice::pushErrorScope const): Deleted.
        (WebCore::WebGPUDevice::popErrorScope const): Deleted.
        * Modules/webgpu/WebGPUDevice.h:
        (WebCore::WebGPUDevice::pushErrorScope):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/GPUBuffer.h: Now inherits from GPUObjectBase for error generation ease.
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::tryCreateBuffer): Ensure GPUBuffers reference the GPUErrorGenerator.
        (WebCore::GPUDevice::pushErrorScope): Deleted. No longer needed here.
        (WebCore::GPUDevice::popErrorScope): Deleted.
        (WebCore::GPUDevice::registerError): Deleted.
        * platform/graphics/gpu/GPUDevice.h: Move error scope logic out.
        * platform/graphics/gpu/GPUErrorGenerator.cpp: Added.
        (WebCore::GPUErrorGenerator::pushErrorScope):
        (WebCore::GPUErrorGenerator::popErrorScope):
        (WebCore::GPUErrorGenerator::generateError):
        * platform/graphics/gpu/GPUErrorGenerator.h: Added.
        (WebCore::GPUErrorGenerator::create):
        * platform/graphics/gpu/GPUObjectBase.h: Added.
        (WebCore::GPUObjectBase::generateError):
        (WebCore::GPUObjectBase::GPUObjectBase):
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm: Use the GPUErrorGenerator directly during buffer creation.
        (WebCore::GPUBuffer::validateBufferUsage):
        (WebCore::GPUBuffer::tryCreate):
        (WebCore::GPUBuffer::GPUBuffer):
        * platform/graphics/gpu/cocoa/GPUQueueMetal.mm:
        (WebCore::GPUQueue::submit): Prevent possible null dereference.

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

        Add release logging for quota checks
        https://bugs.webkit.org/show_bug.cgi?id=199697

        Reviewed by Alex Christensen.

        Log whether a request to extend quota is made and the result of the request.
        This logging should happen in the networking process.
        No change of behavior.

        * platform/Logging.h:
        * storage/StorageQuotaManager.cpp:
        (WebCore::StorageQuotaManager::askForMoreSpace):
        (WebCore::StorageQuotaManager::processPendingRequests):

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

        Stopping a cloned MediaStream video track should not stop any other video track
        https://bugs.webkit.org/show_bug.cgi?id=199635

        Reviewed by Eric Carlson.

        In case a track is requesting its source to end, the
        RealtimeVideoSource should request its own source to end and not stop it directly.

        Also, if a track is removing itself as an observer to a RealtimeVideoSource, we should
        stop the underlying source only if this one does not have any other observer.
        Covered by updated test.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::removeObserver):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::requestToEnd):
        (WebCore::RealtimeVideoSource::stopBeingObserved):
        * platform/mediastream/RealtimeVideoSource.h:

2019-07-12  Timothy Hatcher  <timothy@apple.com>

        Drop DarkModeCSSEnabled as an experimental feature and always enable it.
        https://bugs.webkit.org/show_bug.cgi?id=199725
        rdar://problem/52970972

        Reviewed by Megan Gardner.

        Tests: css-dark-mode

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::prefersColorSchemeEvaluate):
        * css/MediaQueryExpression.cpp:
        (WebCore::featureWithValidIdent):
        (WebCore::isFeatureValidWithoutValue):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::process):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setDarkModeCSSEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::darkModeCSSEnabled const): Deleted.

2019-07-12  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Refactor ShadowBlur: remove some class variables and use function parameters instead.
        https://bugs.webkit.org/show_bug.cgi?id=199511

        Reviewed by Said Abou-Hallawa.

        On the ShadowBlur class it is confusing to know if the status of the m_layerImage buffer or the
        values calculated by calculateLayerBoundingRect() are valid between the different function calls.

        To avoid this problem, pass this values as function parameters instead of storing them in the class.

        No new tests, no intended behaviour change.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::ShadowBlur):
        (WebCore::ShadowBlur::calculateLayerBoundingRect):
        (WebCore::ShadowBlur::drawShadowBuffer):
        (WebCore::ShadowBlur::drawRectShadow): Pass the parameters from the callback.
        (WebCore::ShadowBlur::drawInsetShadow): Ditto.
        (WebCore::ShadowBlur::drawRectShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithoutTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::drawLayerPieces):
        (WebCore::ShadowBlur::drawLayerPiecesAndFillCenter):
        (WebCore::ShadowBlur::blurShadowBuffer):
        (WebCore::ShadowBlur::blurAndColorShadowBuffer):
        (WebCore::ShadowBlur::drawShadowLayer):
        * platform/graphics/ShadowBlur.h: Use a struct to pass the values calculated on calculateLayerBoundingRect().

2019-07-12  Adrian Perez de Castro  <aperez@igalia.com>

        [ATK] Avoid unneeded call to to core(selection) in listObjectForSelection()
        https://bugs.webkit.org/show_bug.cgi?id=199748
        <rdar://problem/52995908>

        Reviewed by Konstantin Tokarev.

        No new tests needed.

        * accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:
        (listObjectForCoreSelection): Renamed from listObjectForSelection() and remove the
        unneeded call to core() now that coreSelection is passed directly to the function.
        (optionFromList): Change to pass coreSelection directly to listObjectForCoreSelection().

2019-07-11  Chris Dumez  <cdumez@apple.com>

        Fix non-thread safe use of makeWeakPtr() under MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::processInputNotify()
        https://bugs.webkit.org/show_bug.cgi?id=199727

        Reviewed by Eric Carlson.

        Stop calling makeWeakPtr() on a main thread object from a background thread.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::processInputNotify):

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

        Register a MediaStreamTrack as media producer only if it is a capture track
        https://bugs.webkit.org/show_bug.cgi?id=199566
        <rdar://problem/52761361>

        Addressing post-landing comment to simplify setMuted call.
        Unreviewed.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):

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

        Protect CoreAudioSharedUnit::m_clients for accessing in different threads simultaneously
        https://bugs.webkit.org/show_bug.cgi?id=199717

        Reviewed by Eric Carlson.

        Add a lock whenever accessing to m_clients.
        Manual tests show that audio capture still works.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::addClient):
        (WebCore::CoreAudioSharedUnit::removeClient):
        (WebCore::CoreAudioSharedUnit::forEachClient const):
        (WebCore::CoreAudioSharedUnit::processMicrophoneSamples):
        (WebCore::CoreAudioSharedUnit::captureFailed):

2019-07-11  Chris Dumez  <cdumez@apple.com>

        Drop non thread-safe usage of WeakPtr in PlaybackSessionInterfaceAVKit
        https://bugs.webkit.org/show_bug.cgi?id=199698

        Reviewed by Eric Carlson.

        The PlaybackSessionInterfaceAVKit constructor was making a weakPtr on the UI Thread
        of an WebThread object. The WeakPtr would then be used as a data member throughout
        the class on the UIThread. This is not thread-safe.

        This patch switches to using a raw pointer instead of a WeakPtr. This is a partial
        rollout of r243337, which turned the raw pointer into a WeakPtr for hardening
        purposes. For extra safety, this patch updates the VideoFullscreenControllerContext
        so that it notifies its clients (i.e. PlaybackSessionInterfaceAVKit) that it is
        getting destroyed, so that they can null-out their m_playbackSessionModel data
        member. This gives the sames guarantees than WeakPtr but in a thread-safe way.

        * platform/cocoa/PlaybackSessionModel.h:
        (WebCore::PlaybackSessionModelClient::modelDestroyed):
        * platform/ios/PlaybackSessionInterfaceAVKit.h:
        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        (WebCore::PlaybackSessionInterfaceAVKit::PlaybackSessionInterfaceAVKit):
        (WebCore::PlaybackSessionInterfaceAVKit::~PlaybackSessionInterfaceAVKit):
        (WebCore::PlaybackSessionInterfaceAVKit::playbackSessionModel const):
        (WebCore::PlaybackSessionInterfaceAVKit::modelDestroyed):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::~VideoFullscreenControllerContext):
        (VideoFullscreenControllerContext::addClient):
        (VideoFullscreenControllerContext::removeClient):

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

        Fix builds where HAVE_DESIGN_SYSTEM_UI_FONTS is not defined.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::fontWithFamilySpecialCase):

2019-07-11  Justin Fan  <justin_fan@apple.com>

        Unreviewed build fix.

        * Modules/webgpu/WHLSL/WHLSLRecursionChecker.cpp: Missing include.

2019-07-11  Myles C. Maxfield  <mmaxfield@apple.com>

        New York font erroneously gets synthetic bold
        https://bugs.webkit.org/show_bug.cgi?id=199653
        <rdar://problem/51692592>

        Reviewed by Simon Fraser.

        This patch adds support for -apple-system-ui-serif, -apple-system-ui-monospaced,
        and -apple-system-ui-rounded, behind an SPI that is off-by-default. We don't want
        to expose these fonts to the web because we don't a standardization story for them
        yet, but we do want some apps to be able to use them.

        WebKit clients who want to use these fonts can set
        -[WKPreferences _shouldAllowDesignSystemUIFonts] = YES.

        The patch generalizes our existing system-ui infrastructure to handle these three
        additional fonts. It also explicitly disables the unsupported dot-prefixed names
        so they don't leak out into Web content.

        Tests: fast/text/design-system-ui-10.html
               fast/text/design-system-ui-11.html
               fast/text/design-system-ui-12.html
               fast/text/design-system-ui-13.html
               fast/text/design-system-ui-14.html
               fast/text/design-system-ui-15.html
               fast/text/design-system-ui-16.html
               fast/text/design-system-ui-2.html
               fast/text/design-system-ui-3.html
               fast/text/design-system-ui-4.html
               fast/text/design-system-ui-5.html
               fast/text/design-system-ui-6.html
               fast/text/design-system-ui-7.html
               fast/text/design-system-ui-8.html
               fast/text/design-system-ui-9.html
               fast/text/design-system-ui.html

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::shouldAllowDesignSystemUIFonts const):
        * css/CSSFontFace.h:
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::load):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::initializeFontStyle):
        * page/Settings.yaml:
        * platform/graphics/FontDescription.cpp:
        (WebCore::m_shouldAllowDesignSystemUIFonts):
        (WebCore::m_shouldAllowUserInstalledFonts): Deleted.
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::shouldAllowDesignSystemUIFonts const):
        (WebCore::FontDescription::setShouldAllowDesignSystemUIFonts):
        (WebCore::FontDescription::operator== const):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::platformFontLookupWithFamily):
        (WebCore::fontWithFamily):
        * platform/graphics/cocoa/FontCacheCoreText.h:
        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::systemFontUse):
        (WebCore::systemFontCascadeList):
        (WebCore::FontCascadeDescription::effectiveFamilyCount const):
        (WebCore::FontCascadeDescription::effectiveFamilyAt const):
        (WebCore::isSystemFontString): Deleted.
        (WebCore::isUIFontTextStyle): Deleted.
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::ctFont const):
        * platform/graphics/cocoa/SystemFontDatabaseCoreText.cpp:
        (WebCore::SystemFontDatabaseCoreText::createSystemUI):
        (WebCore::SystemFontDatabaseCoreText::createDesignSystemUI):
        (WebCore::SystemFontDatabaseCoreText::createTextStyle):
        (WebCore::SystemFontDatabaseCoreText::cascadeList):
        (WebCore::SystemFontDatabaseCoreText::applyWeightItalicsAndFallbackBehavior):
        (WebCore::SystemFontDatabaseCoreText::systemFontParameters):
        * platform/graphics/cocoa/SystemFontDatabaseCoreText.h:
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::platformFontWithFamilySpecialCase):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::platformFontWithFamilySpecialCase):
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setShouldAllowDesignSystemUIFonts):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2019-07-11  Pablo Saavedra  <psaavedra@igalia.com>

        [WPE][GTK] Build failure with ENABLE_ACCESSIBILITY=OFF
        https://bugs.webkit.org/show_bug.cgi?id=199625

        Added ENABLE(ACCESSIBILITY) and replaced HAVE(ACCESSIBILITY)
        with ENABLE(ACCESSIBILITY) in the code.

        Additionally, the TestRunner code generator now honors the
        Conditional IDL format.

        No new tests as there is no intended functional change

        Reviewed by Konstantin Tokarev.

        * accessibility/AXObjectCache.cpp:
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::detach):
        (WebCore::AccessibilityObject::isDetached const):
        * accessibility/AccessibilityObject.h:
        * accessibility/atk/AXObjectCacheAtk.cpp:
        * accessibility/atk/AccessibilityObjectAtk.cpp:
        * accessibility/atk/WebKitAccessible.cpp:
        * accessibility/atk/WebKitAccessible.h:
        * accessibility/atk/WebKitAccessibleHyperlink.cpp:
        * accessibility/atk/WebKitAccessibleHyperlink.h:
        * accessibility/atk/WebKitAccessibleInterfaceAction.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceAction.h:
        * accessibility/atk/WebKitAccessibleInterfaceComponent.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceComponent.h:
        * accessibility/atk/WebKitAccessibleInterfaceDocument.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceDocument.h:
        * accessibility/atk/WebKitAccessibleInterfaceEditableText.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceEditableText.h:
        * accessibility/atk/WebKitAccessibleInterfaceHyperlinkImpl.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceHyperlinkImpl.h:
        * accessibility/atk/WebKitAccessibleInterfaceHypertext.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceHypertext.h:
        * accessibility/atk/WebKitAccessibleInterfaceImage.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceImage.h:
        * accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceSelection.h:
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceTable.h:
        * accessibility/atk/WebKitAccessibleInterfaceTableCell.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceTableCell.h:
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceText.h:
        * accessibility/atk/WebKitAccessibleInterfaceValue.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceValue.h:
        * accessibility/atk/WebKitAccessibleUtil.cpp:
        * accessibility/atk/WebKitAccessibleUtil.h:
        * accessibility/ios/AXObjectCacheIOS.mm:
        * accessibility/ios/AccessibilityObjectIOS.mm:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        * accessibility/mac/AXObjectCacheMac.mm:
        * accessibility/mac/AccessibilityObjectBase.mm:
        * accessibility/mac/AccessibilityObjectMac.mm:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        * accessibility/win/AccessibilityObjectWin.cpp:
        * accessibility/win/AccessibilityObjectWrapperWin.cpp:
        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        * editing/FrameSelection.h:
        * editing/atk/FrameSelectionAtk.cpp:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setInnerTextValue):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):

2019-07-11  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Implement GPUError and error scopes
        https://bugs.webkit.org/show_bug.cgi?id=199655

        Reviewed by Myles C. Maxfield.

        Add GPUErrorFilter, GPUError, and the ability to push and pop error scopes on a GPUDevice.
        This will allow us to check for WebGPU errors from JavaScript.
        Currently, only some GPUBuffer creation errors are reported for testing; more errors will follow in later patches.

        Test: webgpu/error-scopes-test.html

        * Modules/webgpu/GPUErrorFilter.idl: Added.
        * Modules/webgpu/GPUOutOfMemoryError.idl: Added.
        * Modules/webgpu/GPUValidationError.idl: Added.
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::pushErrorScope):
        (WebCore::WebGPUDevice::popErrorScope): Resolve the Promise here, since GPUDevice shouldn't worry about DOM layer.
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDeviceErrorScopes.cpp: Added.
        (WebCore::WebGPUDeviceErrorScopes::pushErrorScope): Delegates to WebGPUDevice.
        (WebCore::WebGPUDeviceErrorScopes::popErrorScope): Ditto.
        * Modules/webgpu/WebGPUDeviceErrorScopes.h: Added.
        * Modules/webgpu/WebGPUDeviceErrorScopes.idl: Added.
        * platform/graphics/gpu/GPUBuffer.h:
        * platform/graphics/gpu/GPUDevice.cpp: The actual error stack lives here.
        (WebCore::GPUDevice::pushErrorScope):
        (WebCore::GPUDevice::popErrorScope): Calls a callback with a GPUError, if any.
        (WebCore::GPUDevice::registerError): Actually creates GPUErrors.
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/GPUError.cpp: Added.
        (WebCore::createError): Factory function for various error types.
        * platform/graphics/gpu/GPUError.h: Added.
        * platform/graphics/gpu/GPUErrorFilter.h: Added.
        * platform/graphics/gpu/GPUOutOfMemoryError.h: Added.
        (WebCore::GPUOutOfMemoryError::create):
        * platform/graphics/gpu/GPUValidationError.cpp: Added.
        (WebCore::GPUValidationError::create):
        (WebCore::GPUValidationError::GPUValidationError):
        * platform/graphics/gpu/GPUValidationError.h: Added.
        (WebCore::GPUValidationError::message const):
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::validateBufferUsage): Create an actual GPUValidationError :)
        (WebCore::GPUBuffer::tryCreate): Create GPUOutOfMemoryErrors where appropriate.

        Add file/name references:
        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

        Missing includes:
        * Modules/webgpu/WHLSL/WHLSLCheckTextureReferences.cpp:

2019-07-11  Tim Horton  <timothy_horton@apple.com>

        Null deref of RenderView under FrameView::setNeedsCompositingConfigurationUpdate
        https://bugs.webkit.org/show_bug.cgi?id=199723
        <rdar://problem/51554747>

        Reviewed by Simon Fraser.

        * page/FrameView.cpp:
        (WebCore::FrameView::setNeedsCompositingConfigurationUpdate):
        Add a null-check; it looks like it is possible to get here by dismissing
        the find overlay (or other page overlay) at an inopportune time.

2019-07-11  Chris Dumez  <cdumez@apple.com>

        Pages using Google Tag Manager Google's anti-flicker optimization may take ~5 seconds to do initial paint
        https://bugs.webkit.org/show_bug.cgi?id=199704
        <rdar://problem/52966461>

        Reviewed by Geoffrey Garen.

        Apply the same fix as r246764 for when "https://www.googletagmanager.com/gtm.js" load is blocked by a content
        extension to avoid delaying initial paint by ~5 seconds. This was tested on https://www.formula1.com/en.html.

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForLoad):

2019-07-11  Chris Dumez  <cdumez@apple.com>

        Disable RGB10 IOSurface pixel format for Mac Catalyst
        https://bugs.webkit.org/show_bug.cgi?id=199712
        <rdar://problem/52793584>

        Reviewed by Beth Dakin.

        Disable RGB10 IOSurface pixel format for Mac Catalyst. This format is not supported
        on Mac Catalyst and causes us not to render anything.

        * platform/graphics/cocoa/IOSurface.h:

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

        [iOS WK2] Can't place caret or select in content that overflows a contenteditable element
        https://bugs.webkit.org/show_bug.cgi?id=199741
        rdar://problem/50545233

        Reviewed by Wenson Hsieh.

        Various code paths for editing used renderer->absoluteBoundingBoxRect(), which is the border
        box of the element (or a set of line boxes for inline elements) converted to absolute
        coordinates. This excludes overflow content, but contenteditable needs to be able to
        place the caret in overflow content, and allow selection rects to be in the overflow area
        (if the element has visible overflow).

        Try to clean this up by adding some static helpers on WebPage for accessing the relevant
        rects, and use them in code call from visiblePositionInFocusedNodeForPoint(), and
        code that is input to selectionClipRect.
        
        This changes selectionClipRect to use the padding box (excluding borders), which is a progression.

        Tests: editing/caret/ios/caret-in-overflow-area.html
               editing/selection/ios/place-selection-in-overflow-area.html
               editing/selection/ios/selection-extends-into-overflow-area.html

        * editing/FrameSelection.cpp:
        (WebCore::DragCaretController::editableElementRectInRootViewCoordinates const):

2019-07-11  Jonathan Bedard  <jbedard@apple.com>

        [iOS 13] Enable WebKit build
        https://bugs.webkit.org/show_bug.cgi?id=199481
        <rdar://problem/52619048>

        Reviewed by Tim Horton.

        No new tests, iOS 13 test expectations will be migrated in the near future.

        * platform/ios/LocalCurrentTraitCollection.mm:
        (WebCore::LocalCurrentTraitCollection::LocalCurrentTraitCollection): Remove underscore from currentTraitCollection.
        (WebCore::LocalCurrentTraitCollection::~LocalCurrentTraitCollection): Remove underscore from setCurrentTraitCollection.

2019-07-11  Chris Dumez  <cdumez@apple.com>

        Fix non thread-safe usage of makeWeakPtr() in MediaPlayerPrivateMediaFoundation
        https://bugs.webkit.org/show_bug.cgi?id=199700

        Reviewed by Eric Carlson.

        The code was calling makeWeakPtr() on a main-thread object, from a background thread.
        This is not thread safe. To address the issue, this patches creates the WeakPtr ahead
        of time, on the main thread. 

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::MediaPlayerPrivateMediaFoundation):
        (WebCore::MediaPlayerPrivateMediaFoundation::endCreatedMediaSource):
        (WebCore::MediaPlayerPrivateMediaFoundation::endGetEvent):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::processInputNotify):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:
        (WebCore::MediaPlayerPrivateMediaFoundation::ThreadSafeWrapper::create):
        (WebCore::MediaPlayerPrivateMediaFoundation::ThreadSafeWrapper::wrapped):
        (WebCore::MediaPlayerPrivateMediaFoundation::ThreadSafeWrapper::ThreadSafeWrapper):

2019-07-11  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Cleanup InlineFormattingContext::LineLayout class.
        https://bugs.webkit.org/show_bug.cgi?id=199702
        <rdar://problem/52931733>

        Reviewed by Sam Weinig.

        Move some structs to .cpp. They don't need to pollute the class declaration. 

        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::LineLayout::layoutState const):
        (): Deleted.
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::LineInput::HorizontalConstraint::HorizontalConstraint):
        (WebCore::Layout::LineInput::LineInput):
        (WebCore::Layout::InlineFormattingContext::LineLayout::placeInlineItems const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::LineInput::HorizontalConstraint::HorizontalConstraint): Deleted.
        (WebCore::Layout::InlineFormattingContext::LineLayout::LineInput::LineInput): Deleted.

2019-07-11  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Implement support for ARIA roles insertion, deletion, subscript, superscript, and time
        https://bugs.webkit.org/show_bug.cgi?id=199692

        Reviewed by Chris Fleizach.

        Create new AccessibilityRole types which correspond to the new ARIA roles and
        update AccessibilityRenderObject::determineAccessibilityRole() to assign these
        internal roles to the related HTML elements.

        Update both ATK and Mac to recognize these new internal roles. In addition, update
        the ATK mappings for the ins and del elements to ATK_ROLE_CONTENT_INSERTION and
        ATK_ROLE_CONTENT_DELETION respectively. Also expose "insertion" and "deletion" via
        the AtkObject xml-roles attribute so that this information is not completely absent
        for GTK or WPE built against earlier versions of ATK.

        Remove AccessibilityObject's isSubscriptStyleGroup() and isSuperscriptStyleGroup().
        These two methods were only being used by ATK and are no longer needed for platform
        role mapping.

        No new tests. Instead add the roles to the existing role-exposure tests.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::initializeRoleMap):
        (WebCore::AccessibilityObject::isSubscriptStyleGroup const): Deleted.
        (WebCore::AccessibilityObject::isSuperscriptStyleGroup const): Deleted.
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/atk/WebKitAccessible.cpp:
        (webkitAccessibleGetAttributes):
        (atkRole):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):

2019-07-11  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][MediaStream] Use the new dispatchMediaSampleToObservers to dispatch new buffers
        https://bugs.webkit.org/show_bug.cgi?id=199689

        Reviewed by Philippe Normand.

        We already have tests for this.

        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        (WebCore::GStreamerVideoCaptureSource::processNewFrame):
        (WebCore::GStreamerVideoCaptureSource::newSampleCallback):
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h:

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

        [iOS WK2] With modal overlay and body overflow:hidden, can't access all the content
        https://bugs.webkit.org/show_bug.cgi?id=199693
        rdar://problem/51930364

        Reviewed by Tim Horton.

        A page with overflow:hidden on the root needs to be scrollable if:
        * it's zoomed
        * the visual viewport is smaller than the layout viewport (including visible keyboard)
        * scrolling is required to hide MobileSafari's squishy bars

        This patch does the last two, plumbing a "visual viewport is smaller than layout viewport"
        bit up from WebCore via the scrolling tree (that way, when it changes we automatically trigger
        a commit), and checking for squished bars in WKWebView.

        Tested by new API tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::updateLayoutViewport):
        (WebCore::FrameView::layoutOrVisualViewportChanged): Make this not iOS-specific. It's not yet called
        in all the right places (doing so has risk because it's exposed via VisualViewport resize events).
        (WebCore::FrameView::didUpdateViewportOverrideRects): Deleted.
        * page/FrameView.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewVisualViewportChanged):
        (WebCore::AsyncScrollingCoordinator::setFrameScrollingNodeState):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::frameViewVisualViewportChanged):
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
        (WebCore::ScrollingStateFrameScrollingNode::setPropertyChangedBitsAfterReattach):
        (WebCore::ScrollingStateFrameScrollingNode::setVisualViewportIsSmallerThanLayoutViewport):
        (WebCore::ScrollingStateFrameScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:

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

        [WHLSL] Optional<UniqueRef<T>> -> std::unique_ptr in Return/IfStatement/ForLoop
        https://bugs.webkit.org/show_bug.cgi?id=199695

        Reviewed by Dean Jackson.

        Trivial patch that saves 8 bytes per Return/If, and 16 bytes per For loop.

        No new tests as there is no intended functional change.

        * Modules/webgpu/WHLSL/AST/WHLSLForLoop.h:
        (WebCore::WHLSL::AST::ForLoop::ForLoop):
        (WebCore::WHLSL::AST::ForLoop::condition):
        (WebCore::WHLSL::AST::ForLoop::increment):
        * Modules/webgpu/WHLSL/AST/WHLSLIfStatement.h:
        (WebCore::WHLSL::AST::IfStatement::IfStatement):
        (WebCore::WHLSL::AST::IfStatement::elseBody):
        * Modules/webgpu/WHLSL/AST/WHLSLReturn.h:
        (WebCore::WHLSL::AST::Return::Return):
        (WebCore::WHLSL::AST::Return::value):
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parseIfStatement):
        (WebCore::WHLSL::Parser::parseForLoop):
        (WebCore::WHLSL::Parser::parseStatement):

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

        [WHLSL] The recursion checker should not have quadratic complexity
        https://bugs.webkit.org/show_bug.cgi?id=199688

        Reviewed by Saam Barati.

        I fix it by using two different hash sets, tracking which functions we have started visiting, and which we have finished visiting.
        The difference are those that are currently "on the stack", and calling any of those is an error.
        As a bonus, I also overrode visit(Program&), so that we only bother visiting function definitions.

        On whlsl-compute.html ran 5 times, this patch reduces the time spent in the recursion checker from 26ms to 12ms.
        It is likely to be a much bigger win on larger programs (since it took the complexity from quadratic to linear).

        No new tests as there is no intended functional change.

        * Modules/webgpu/WHLSL/WHLSLRecursionChecker.cpp:

2019-07-10  Sihui Liu  <sihui_liu@apple.com>

        Crash at WebCore::IDBServer::MemoryObjectStoreCursor::incrementReverseIterator
        https://bugs.webkit.org/show_bug.cgi?id=199677
        <rdar://problem/52334665>

        Reviewed by Alex Christensen.

        Add an early return in incrementReverseIterator when setFirstInRemainingRange fails to set m_iterator. This is 
        in line with what we did in incrementForwardIterator.

        * Modules/indexeddb/server/MemoryObjectStoreCursor.cpp:
        (WebCore::IDBServer::MemoryObjectStoreCursor::incrementReverseIterator):

2019-07-10  Chris Dumez  <cdumez@apple.com>

        Stop using GenericTaskQueue from multiple threads
        https://bugs.webkit.org/show_bug.cgi?id=199652

        Reviewed by Eric Carlson and Geoffrey Garen.

        WebCoreAVFLoaderDelegate was calling GenericTaskQueue::enqueueTask() from a background thread,
        which is not safe because the implementation of enqueueTask() calls makeWeakPtr() on the
        GenericTaskQueue (a main thread object).

        Update WebCoreAVFLoaderDelegate to make sure it is on the main thread before it calls
        GenericTaskQueue::enqueueTask().

        * platform/GenericTaskQueue.h:
        Remove last template parameter which was used exclusively by WebCoreAVFLoaderDelegate to try and
        make GenericTaskQueue thread-safe.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFMovieObserver metadataLoaded]):
        (-[WebCoreAVFMovieObserver didEnd:]):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[WebCoreAVFMovieObserver legibleOutput:didOutputAttributedStrings:nativeSampleBuffers:forItemTime:]):
        (-[WebCoreAVFMovieObserver outputSequenceWasFlushed:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForLoadingOfRequestedResource:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:didCancelLoadingRequest:]):

2019-07-10  Chris Fleizach  <cfleizach@apple.com>

        AX: VoiceOver ignored role="presentation" on <table> HTML elements
        https://bugs.webkit.org/show_bug.cgi?id=199659

        Reviewed by Zalan Bujtas.

        Only include a table ancestor if it's a table we care about for accessibility.

        Modified Test: accessibility/ios-simulator/tables-lists.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityTableAncestor]):

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

        [WHLSL] Track code locations correctly throughout the compiler to get good error messages
        https://bugs.webkit.org/show_bug.cgi?id=199675

        Reviewed by Myles Maxfield.

        The basic idea is to go from having each AST node contain its own token to having each AST node contain a pair of offsets into the source,
        the offset before its start and the offset after its end. This will let us get good error messages.
        As a bonus, it saves a bit of memory as Tokens are larger (one extra word for their type).

        The new CodeLocation class is put in Lexer.h, because it has a cyclic dependency on Token, which also has a cyclic dependency on Lexer.

        No new tests as there is no intended functional change.

        * Modules/webgpu/WHLSL/AST/WHLSLArrayReferenceType.h:
        (WebCore::WHLSL::AST::ArrayReferenceType::ArrayReferenceType):
        * Modules/webgpu/WHLSL/AST/WHLSLArrayType.h:
        (WebCore::WHLSL::AST::ArrayType::ArrayType):
        * Modules/webgpu/WHLSL/AST/WHLSLAssignmentExpression.h:
        (WebCore::WHLSL::AST::AssignmentExpression::AssignmentExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLBaseFunctionAttribute.h:
        (WebCore::WHLSL::AST::BaseFunctionAttribute::BaseFunctionAttribute):
        * Modules/webgpu/WHLSL/AST/WHLSLBaseSemantic.h:
        (WebCore::WHLSL::AST::BaseSemantic::BaseSemantic):
        * Modules/webgpu/WHLSL/AST/WHLSLBlock.h:
        (WebCore::WHLSL::AST::Block::Block):
        * Modules/webgpu/WHLSL/AST/WHLSLBooleanLiteral.h:
        (WebCore::WHLSL::AST::BooleanLiteral::BooleanLiteral):
        (WebCore::WHLSL::AST::BooleanLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLBreak.h:
        (WebCore::WHLSL::AST::Break::Break):
        * Modules/webgpu/WHLSL/AST/WHLSLBuiltInSemantic.h:
        (WebCore::WHLSL::AST::BuiltInSemantic::BuiltInSemantic):
        * Modules/webgpu/WHLSL/AST/WHLSLCallExpression.h:
        (WebCore::WHLSL::AST::CallExpression::CallExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLCommaExpression.h:
        (WebCore::WHLSL::AST::CommaExpression::CommaExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLContinue.h:
        (WebCore::WHLSL::AST::Continue::Continue):
        * Modules/webgpu/WHLSL/AST/WHLSLDereferenceExpression.h:
        (WebCore::WHLSL::AST::DereferenceExpression::DereferenceExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLDoWhileLoop.h:
        (WebCore::WHLSL::AST::DoWhileLoop::DoWhileLoop):
        * Modules/webgpu/WHLSL/AST/WHLSLDotExpression.h:
        (WebCore::WHLSL::AST::DotExpression::DotExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLEffectfulExpressionStatement.h:
        (WebCore::WHLSL::AST::EffectfulExpressionStatement::EffectfulExpressionStatement):
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationDefinition.h:
        (WebCore::WHLSL::AST::EnumerationDefinition::EnumerationDefinition):
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationMember.h:
        (WebCore::WHLSL::AST::EnumerationMember::EnumerationMember):
        (WebCore::WHLSL::AST::EnumerationMember::codeLocation const):
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationMemberLiteral.h:
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::EnumerationMemberLiteral):
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::wrap):
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLExpression.h:
        (WebCore::WHLSL::AST::Expression::Expression):
        (WebCore::WHLSL::AST::Expression::codeLocation const):
        (WebCore::WHLSL::AST::Expression::updateCodeLocation):
        * Modules/webgpu/WHLSL/AST/WHLSLFallthrough.h:
        (WebCore::WHLSL::AST::Fallthrough::Fallthrough):
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteral.h:
        (WebCore::WHLSL::AST::FloatLiteral::FloatLiteral):
        (WebCore::WHLSL::AST::FloatLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.cpp:
        (WebCore::WHLSL::AST::FloatLiteralType::FloatLiteralType):
        (WebCore::WHLSL::AST::FloatLiteralType::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLForLoop.h:
        (WebCore::WHLSL::AST::ForLoop::ForLoop):
        * Modules/webgpu/WHLSL/AST/WHLSLFunctionDeclaration.h:
        (WebCore::WHLSL::AST::FunctionDeclaration::FunctionDeclaration):
        (WebCore::WHLSL::AST::FunctionDeclaration::codeLocation const):
        * Modules/webgpu/WHLSL/AST/WHLSLGlobalVariableReference.h:
        (WebCore::WHLSL::AST::GlobalVariableReference::GlobalVariableReference):
        * Modules/webgpu/WHLSL/AST/WHLSLIfStatement.h:
        (WebCore::WHLSL::AST::IfStatement::IfStatement):
        * Modules/webgpu/WHLSL/AST/WHLSLIndexExpression.h:
        (WebCore::WHLSL::AST::IndexExpression::IndexExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteral.h:
        (WebCore::WHLSL::AST::IntegerLiteral::IntegerLiteral):
        (WebCore::WHLSL::AST::IntegerLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.cpp:
        (WebCore::WHLSL::AST::IntegerLiteralType::IntegerLiteralType):
        (WebCore::WHLSL::AST::IntegerLiteralType::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLLogicalExpression.h:
        (WebCore::WHLSL::AST::LogicalExpression::LogicalExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLLogicalNotExpression.h:
        (WebCore::WHLSL::AST::LogicalNotExpression::LogicalNotExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLMakeArrayReferenceExpression.h:
        (WebCore::WHLSL::AST::MakeArrayReferenceExpression::MakeArrayReferenceExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLMakePointerExpression.h:
        (WebCore::WHLSL::AST::MakePointerExpression::MakePointerExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLNamedType.h:
        (WebCore::WHLSL::AST::NamedType::NamedType):
        (WebCore::WHLSL::AST::NamedType::codeLocation const):
        (WebCore::WHLSL::AST::NamedType::updateCodeLocation):
        * Modules/webgpu/WHLSL/AST/WHLSLNativeTypeDeclaration.h:
        (WebCore::WHLSL::AST::NativeTypeDeclaration::NativeTypeDeclaration):
        * Modules/webgpu/WHLSL/AST/WHLSLNullLiteral.h:
        (WebCore::WHLSL::AST::NullLiteral::NullLiteral):
        (WebCore::WHLSL::AST::NullLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLNumThreadsFunctionAttribute.h:
        (WebCore::WHLSL::AST::NumThreadsFunctionAttribute::NumThreadsFunctionAttribute):
        * Modules/webgpu/WHLSL/AST/WHLSLPointerType.h:
        (WebCore::WHLSL::AST::PointerType::PointerType):
        * Modules/webgpu/WHLSL/AST/WHLSLPropertyAccessExpression.h:
        (WebCore::WHLSL::AST::PropertyAccessExpression::PropertyAccessExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLReadModifyWriteExpression.h:
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::create):
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::ReadModifyWriteExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLReferenceType.h:
        (WebCore::WHLSL::AST::ReferenceType::ReferenceType):
        * Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.h:
        (WebCore::WHLSL::AST::ResourceSemantic::ResourceSemantic):
        * Modules/webgpu/WHLSL/AST/WHLSLReturn.h:
        (WebCore::WHLSL::AST::Return::Return):
        * Modules/webgpu/WHLSL/AST/WHLSLSpecializationConstantSemantic.h:
        (WebCore::WHLSL::AST::SpecializationConstantSemantic::SpecializationConstantSemantic):
        * Modules/webgpu/WHLSL/AST/WHLSLStageInOutSemantic.h:
        (WebCore::WHLSL::AST::StageInOutSemantic::StageInOutSemantic):
        * Modules/webgpu/WHLSL/AST/WHLSLStatement.h:
        (WebCore::WHLSL::AST::Statement::Statement):
        (WebCore::WHLSL::AST::Statement::codeLocation const):
        (WebCore::WHLSL::AST::Statement::updateCodeLocation):
        * Modules/webgpu/WHLSL/AST/WHLSLStatementList.h:
        (WebCore::WHLSL::AST::StatementList::StatementList):
        * Modules/webgpu/WHLSL/AST/WHLSLStructureDefinition.h:
        (WebCore::WHLSL::AST::StructureDefinition::StructureDefinition):
        * Modules/webgpu/WHLSL/AST/WHLSLStructureElement.h:
        (WebCore::WHLSL::AST::StructureElement::StructureElement):
        (WebCore::WHLSL::AST::StructureElement::codeLocation const):
        * Modules/webgpu/WHLSL/AST/WHLSLSwitchCase.h:
        (WebCore::WHLSL::AST::SwitchCase::SwitchCase):
        * Modules/webgpu/WHLSL/AST/WHLSLSwitchStatement.h:
        (WebCore::WHLSL::AST::SwitchStatement::SwitchStatement):
        * Modules/webgpu/WHLSL/AST/WHLSLTernaryExpression.h:
        (WebCore::WHLSL::AST::TernaryExpression::TernaryExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLTrap.h:
        (WebCore::WHLSL::AST::Trap::Trap):
        * Modules/webgpu/WHLSL/AST/WHLSLTypeDefinition.h:
        (WebCore::WHLSL::AST::TypeDefinition::TypeDefinition):
        * Modules/webgpu/WHLSL/AST/WHLSLTypeReference.cpp:
        (WebCore::WHLSL::AST::TypeReference::wrap):
        * Modules/webgpu/WHLSL/AST/WHLSLTypeReference.h:
        (WebCore::WHLSL::AST::TypeReference::TypeReference):
        (WebCore::WHLSL::AST::TypeReference::cloneTypeReference const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.h:
        (WebCore::WHLSL::AST::UnnamedType::UnnamedType):
        (WebCore::WHLSL::AST::UnnamedType::codeLocation const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteral.h:
        (WebCore::WHLSL::AST::UnsignedIntegerLiteral::UnsignedIntegerLiteral):
        (WebCore::WHLSL::AST::UnsignedIntegerLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.cpp:
        (WebCore::WHLSL::AST::UnsignedIntegerLiteralType::UnsignedIntegerLiteralType):
        (WebCore::WHLSL::AST::UnsignedIntegerLiteralType::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclaration.h:
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclarationsStatement.h:
        (WebCore::WHLSL::AST::VariableDeclarationsStatement::VariableDeclarationsStatement):
        * Modules/webgpu/WHLSL/AST/WHLSLVariableReference.h:
        (WebCore::WHLSL::AST::VariableReference::VariableReference):
        (WebCore::WHLSL::AST::VariableReference::wrap):
        * Modules/webgpu/WHLSL/AST/WHLSLWhileLoop.h:
        (WebCore::WHLSL::AST::WhileLoop::WhileLoop):
        * Modules/webgpu/WHLSL/WHLSLAutoInitializeVariables.cpp:
        (WebCore::WHLSL::AutoInitialize::visit):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::resolveWithOperatorAnderIndexer):
        (WebCore::WHLSL::resolveWithOperatorLength):
        (WebCore::WHLSL::resolveWithReferenceComparator):
        (WebCore::WHLSL::resolveByInstantiation):
        (WebCore::WHLSL::resolveFunction):
        (WebCore::WHLSL::Checker::visit):
        (WebCore::WHLSL::argumentTypeForAndOverload):
        (WebCore::WHLSL::Checker::finishVisiting):
        * Modules/webgpu/WHLSL/WHLSLInferTypes.cpp:
        (WebCore::WHLSL::matchAndCommit):
        * Modules/webgpu/WHLSL/WHLSLLexer.cpp:
        (WebCore::WHLSL::Token::typeName):
        (WebCore::WHLSL::Lexer::consumeTokenFromStream):
        * Modules/webgpu/WHLSL/WHLSLLexer.h:
        (WebCore::WHLSL::AST::CodeLocation::CodeLocation):
        (WebCore::WHLSL::AST::CodeLocation::startOffset const):
        (WebCore::WHLSL::AST::CodeLocation::endOffset const):
        (WebCore::WHLSL::Token::startOffset const):
        (WebCore::WHLSL::Lexer::errorString):
        (WebCore::WHLSL::Token::stringView const):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:
        (WebCore::WHLSL::NameResolver::visit):
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parse):
        (WebCore::WHLSL::Parser::peek):
        (WebCore::WHLSL::Parser::peekFurther):
        (WebCore::WHLSL::Types::includes):
        (WebCore::WHLSL::Types::appendNameTo):
        (WebCore::WHLSL::Types<t>::includes):
        (WebCore::WHLSL::Types<t>::appendNameTo):
        (WebCore::WHLSL::Parser::peekType):
        (WebCore::WHLSL::Parser::tryType):
        (WebCore::WHLSL::Parser::tryTypes):
        (WebCore::WHLSL::Parser::consumeType):
        (WebCore::WHLSL::Parser::consumeTypes):
        (WebCore::WHLSL::Parser::consumeIntegralLiteral):
        (WebCore::WHLSL::Parser::parseConstantExpression):
        (WebCore::WHLSL::Parser::parseTypeArgument):
        (WebCore::WHLSL::Parser::parseTypeArguments):
        (WebCore::WHLSL::Parser::parseTypeSuffixAbbreviated):
        (WebCore::WHLSL::Parser::parseTypeSuffixNonAbbreviated):
        (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::parseComputeFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseVertexOrFragmentFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseRegularFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseOperatorFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseFunctionDeclaration):
        (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::parseLimitedSuffixOperator):
        (WebCore::WHLSL::Parser::parseSuffixOperator):
        (WebCore::WHLSL::Parser::parseExpression):
        (WebCore::WHLSL::Parser::completeTernaryConditional):
        (WebCore::WHLSL::Parser::completeAssignment):
        (WebCore::WHLSL::Parser::parsePossibleTernaryConditional):
        (WebCore::WHLSL::Parser::completePossibleLogicalBinaryOperation):
        (WebCore::WHLSL::Parser::completePossibleRelationalBinaryOperation):
        (WebCore::WHLSL::Parser::completePossibleShift):
        (WebCore::WHLSL::Parser::completePossibleAdd):
        (WebCore::WHLSL::Parser::completePossibleMultiply):
        (WebCore::WHLSL::Parser::parsePossiblePrefix):
        (WebCore::WHLSL::Parser::parsePossibleSuffix):
        (WebCore::WHLSL::Parser::parseCallExpression):
        (WebCore::WHLSL::Parser::parseTerm):
        * Modules/webgpu/WHLSL/WHLSLParser.h:
        * Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp:
        (WebCore::WHLSL::anonymousToken):
        (WebCore::WHLSL::PreserveLifetimes::PreserveLifetimes):
        (WebCore::WHLSL::PreserveLifetimes::assignVariableIntoStruct):
        (WebCore::WHLSL::preserveVariableLifetimes):
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        (WebCore::WHLSL::PropertyResolver::visit):
        (WebCore::WHLSL::wrapAnderCallArgument):
        (WebCore::WHLSL::setterCall):
        (WebCore::WHLSL::getterCall):
        (WebCore::WHLSL::modify):
        (WebCore::WHLSL::PropertyResolver::simplifyRightValue):
        (WebCore::WHLSL::LeftValueSimplifier::finishVisiting):
        * 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-07-10  Ryosuke Niwa  <rniwa@webkit.org>

        [iOS] REGRESSION(r244851): Revealing caret sometimes fails when content inset is used
        https://bugs.webkit.org/show_bug.cgi?id=199662

        Reviewed by Simon Fraser.

        The bug was caused by ScrollableArea::maximumScrollPosition using ScrollableArea::visibleSize, which does not
        take the content insets into account correctly, rather than FrameView::visualViewportRectExpandedByContentInsets,
        which does, and is used for "viewRect" in RenderLayer::scrollRectToVisible.

        Override the maximum scroll position using visualViewportRectExpandedByContentInsets in iOS to fix the issue.

        Test: editing/selection/ios/autoscroll-with-top-content-inset-2.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible): Fixed the bug.

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

        Unreviewed, rolling out r247316.

        Broke Mojave build

        Reverted changeset:

        "[WHLSL] Track code locations correctly throughout the
        compiler to get good error messages"
        https://bugs.webkit.org/show_bug.cgi?id=199675
        https://trac.webkit.org/changeset/247316

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

        Allow CMake to build WebCore on Mac
        https://bugs.webkit.org/show_bug.cgi?id=198979

        Reviewed by Don Olmstead.

        * Modules/websockets/ThreadableWebSocketChannel.cpp:
        (WebCore::ThreadableWebSocketChannel::validateURL):
        * PlatformMac.cmake:
        * platform/cocoa/VideoFullscreenModelVideoElement.mm:
        * platform/ios/WebItemProviderPasteboard.h:

2019-07-10  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r247292.

        Caused CloseWebViewDuringEnterFullscreen.VideoFullscreen API
        test to time out on Mojave bots

        Reverted changeset:

        "Stop using GenericTaskQueue from multiple threads"
        https://bugs.webkit.org/show_bug.cgi?id=199652
        https://trac.webkit.org/changeset/247292

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

        [WHLSL] Track code locations correctly throughout the compiler to get good error messages
        https://bugs.webkit.org/show_bug.cgi?id=199675

        Reviewed by Myles Maxfield.

        The basic idea is to go from having each AST node contain its own token to having each AST node contain a pair of offsets into the source,
        the offset before its start and the offset after its end. This will let us get good error messages.
        As a bonus, it saves a bit of memory as Tokens are larger (one extra word for their type).

        The new CodeLocation class is put in Lexer.h, because it has a cyclic dependency on Token, which also has a cyclic dependency on Lexer.

        No new tests as there is no intended functional change.

        * Modules/webgpu/WHLSL/AST/WHLSLArrayReferenceType.h:
        (WebCore::WHLSL::AST::ArrayReferenceType::ArrayReferenceType):
        * Modules/webgpu/WHLSL/AST/WHLSLArrayType.h:
        (WebCore::WHLSL::AST::ArrayType::ArrayType):
        * Modules/webgpu/WHLSL/AST/WHLSLAssignmentExpression.h:
        (WebCore::WHLSL::AST::AssignmentExpression::AssignmentExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLBaseFunctionAttribute.h:
        (WebCore::WHLSL::AST::BaseFunctionAttribute::BaseFunctionAttribute):
        * Modules/webgpu/WHLSL/AST/WHLSLBaseSemantic.h:
        (WebCore::WHLSL::AST::BaseSemantic::BaseSemantic):
        * Modules/webgpu/WHLSL/AST/WHLSLBlock.h:
        (WebCore::WHLSL::AST::Block::Block):
        * Modules/webgpu/WHLSL/AST/WHLSLBooleanLiteral.h:
        (WebCore::WHLSL::AST::BooleanLiteral::BooleanLiteral):
        (WebCore::WHLSL::AST::BooleanLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLBreak.h:
        (WebCore::WHLSL::AST::Break::Break):
        * Modules/webgpu/WHLSL/AST/WHLSLBuiltInSemantic.h:
        (WebCore::WHLSL::AST::BuiltInSemantic::BuiltInSemantic):
        * Modules/webgpu/WHLSL/AST/WHLSLCallExpression.h:
        (WebCore::WHLSL::AST::CallExpression::CallExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLCommaExpression.h:
        (WebCore::WHLSL::AST::CommaExpression::CommaExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLContinue.h:
        (WebCore::WHLSL::AST::Continue::Continue):
        * Modules/webgpu/WHLSL/AST/WHLSLDereferenceExpression.h:
        (WebCore::WHLSL::AST::DereferenceExpression::DereferenceExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLDoWhileLoop.h:
        (WebCore::WHLSL::AST::DoWhileLoop::DoWhileLoop):
        * Modules/webgpu/WHLSL/AST/WHLSLDotExpression.h:
        (WebCore::WHLSL::AST::DotExpression::DotExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLEffectfulExpressionStatement.h:
        (WebCore::WHLSL::AST::EffectfulExpressionStatement::EffectfulExpressionStatement):
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationDefinition.h:
        (WebCore::WHLSL::AST::EnumerationDefinition::EnumerationDefinition):
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationMember.h:
        (WebCore::WHLSL::AST::EnumerationMember::EnumerationMember):
        (WebCore::WHLSL::AST::EnumerationMember::codeLocation const):
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationMemberLiteral.h:
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::EnumerationMemberLiteral):
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::wrap):
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLExpression.h:
        (WebCore::WHLSL::AST::Expression::Expression):
        (WebCore::WHLSL::AST::Expression::codeLocation const):
        (WebCore::WHLSL::AST::Expression::updateCodeLocation):
        * Modules/webgpu/WHLSL/AST/WHLSLFallthrough.h:
        (WebCore::WHLSL::AST::Fallthrough::Fallthrough):
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteral.h:
        (WebCore::WHLSL::AST::FloatLiteral::FloatLiteral):
        (WebCore::WHLSL::AST::FloatLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.cpp:
        (WebCore::WHLSL::AST::FloatLiteralType::FloatLiteralType):
        (WebCore::WHLSL::AST::FloatLiteralType::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLForLoop.h:
        (WebCore::WHLSL::AST::ForLoop::ForLoop):
        * Modules/webgpu/WHLSL/AST/WHLSLFunctionDeclaration.h:
        (WebCore::WHLSL::AST::FunctionDeclaration::FunctionDeclaration):
        (WebCore::WHLSL::AST::FunctionDeclaration::codeLocation const):
        * Modules/webgpu/WHLSL/AST/WHLSLGlobalVariableReference.h:
        (WebCore::WHLSL::AST::GlobalVariableReference::GlobalVariableReference):
        * Modules/webgpu/WHLSL/AST/WHLSLIfStatement.h:
        (WebCore::WHLSL::AST::IfStatement::IfStatement):
        * Modules/webgpu/WHLSL/AST/WHLSLIndexExpression.h:
        (WebCore::WHLSL::AST::IndexExpression::IndexExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteral.h:
        (WebCore::WHLSL::AST::IntegerLiteral::IntegerLiteral):
        (WebCore::WHLSL::AST::IntegerLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.cpp:
        (WebCore::WHLSL::AST::IntegerLiteralType::IntegerLiteralType):
        (WebCore::WHLSL::AST::IntegerLiteralType::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLLogicalExpression.h:
        (WebCore::WHLSL::AST::LogicalExpression::LogicalExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLLogicalNotExpression.h:
        (WebCore::WHLSL::AST::LogicalNotExpression::LogicalNotExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLMakeArrayReferenceExpression.h:
        (WebCore::WHLSL::AST::MakeArrayReferenceExpression::MakeArrayReferenceExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLMakePointerExpression.h:
        (WebCore::WHLSL::AST::MakePointerExpression::MakePointerExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLNamedType.h:
        (WebCore::WHLSL::AST::NamedType::NamedType):
        (WebCore::WHLSL::AST::NamedType::codeLocation const):
        (WebCore::WHLSL::AST::NamedType::updateCodeLocation):
        * Modules/webgpu/WHLSL/AST/WHLSLNativeTypeDeclaration.h:
        (WebCore::WHLSL::AST::NativeTypeDeclaration::NativeTypeDeclaration):
        * Modules/webgpu/WHLSL/AST/WHLSLNullLiteral.h:
        (WebCore::WHLSL::AST::NullLiteral::NullLiteral):
        (WebCore::WHLSL::AST::NullLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLNumThreadsFunctionAttribute.h:
        (WebCore::WHLSL::AST::NumThreadsFunctionAttribute::NumThreadsFunctionAttribute):
        * Modules/webgpu/WHLSL/AST/WHLSLPointerType.h:
        (WebCore::WHLSL::AST::PointerType::PointerType):
        * Modules/webgpu/WHLSL/AST/WHLSLPropertyAccessExpression.h:
        (WebCore::WHLSL::AST::PropertyAccessExpression::PropertyAccessExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLReadModifyWriteExpression.h:
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::create):
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::ReadModifyWriteExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLReferenceType.h:
        (WebCore::WHLSL::AST::ReferenceType::ReferenceType):
        * Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.h:
        (WebCore::WHLSL::AST::ResourceSemantic::ResourceSemantic):
        * Modules/webgpu/WHLSL/AST/WHLSLReturn.h:
        (WebCore::WHLSL::AST::Return::Return):
        * Modules/webgpu/WHLSL/AST/WHLSLSpecializationConstantSemantic.h:
        (WebCore::WHLSL::AST::SpecializationConstantSemantic::SpecializationConstantSemantic):
        * Modules/webgpu/WHLSL/AST/WHLSLStageInOutSemantic.h:
        (WebCore::WHLSL::AST::StageInOutSemantic::StageInOutSemantic):
        * Modules/webgpu/WHLSL/AST/WHLSLStatement.h:
        (WebCore::WHLSL::AST::Statement::Statement):
        (WebCore::WHLSL::AST::Statement::codeLocation const):
        (WebCore::WHLSL::AST::Statement::updateCodeLocation):
        * Modules/webgpu/WHLSL/AST/WHLSLStatementList.h:
        (WebCore::WHLSL::AST::StatementList::StatementList):
        * Modules/webgpu/WHLSL/AST/WHLSLStructureDefinition.h:
        (WebCore::WHLSL::AST::StructureDefinition::StructureDefinition):
        * Modules/webgpu/WHLSL/AST/WHLSLStructureElement.h:
        (WebCore::WHLSL::AST::StructureElement::StructureElement):
        (WebCore::WHLSL::AST::StructureElement::codeLocation const):
        * Modules/webgpu/WHLSL/AST/WHLSLSwitchCase.h:
        (WebCore::WHLSL::AST::SwitchCase::SwitchCase):
        * Modules/webgpu/WHLSL/AST/WHLSLSwitchStatement.h:
        (WebCore::WHLSL::AST::SwitchStatement::SwitchStatement):
        * Modules/webgpu/WHLSL/AST/WHLSLTernaryExpression.h:
        (WebCore::WHLSL::AST::TernaryExpression::TernaryExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLTrap.h:
        (WebCore::WHLSL::AST::Trap::Trap):
        * Modules/webgpu/WHLSL/AST/WHLSLTypeDefinition.h:
        (WebCore::WHLSL::AST::TypeDefinition::TypeDefinition):
        * Modules/webgpu/WHLSL/AST/WHLSLTypeReference.cpp:
        (WebCore::WHLSL::AST::TypeReference::wrap):
        * Modules/webgpu/WHLSL/AST/WHLSLTypeReference.h:
        (WebCore::WHLSL::AST::TypeReference::TypeReference):
        (WebCore::WHLSL::AST::TypeReference::cloneTypeReference const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.h:
        (WebCore::WHLSL::AST::UnnamedType::UnnamedType):
        (WebCore::WHLSL::AST::UnnamedType::codeLocation const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteral.h:
        (WebCore::WHLSL::AST::UnsignedIntegerLiteral::UnsignedIntegerLiteral):
        (WebCore::WHLSL::AST::UnsignedIntegerLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.cpp:
        (WebCore::WHLSL::AST::UnsignedIntegerLiteralType::UnsignedIntegerLiteralType):
        (WebCore::WHLSL::AST::UnsignedIntegerLiteralType::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclaration.h:
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclarationsStatement.h:
        (WebCore::WHLSL::AST::VariableDeclarationsStatement::VariableDeclarationsStatement):
        * Modules/webgpu/WHLSL/AST/WHLSLVariableReference.h:
        (WebCore::WHLSL::AST::VariableReference::VariableReference):
        (WebCore::WHLSL::AST::VariableReference::wrap):
        * Modules/webgpu/WHLSL/AST/WHLSLWhileLoop.h:
        (WebCore::WHLSL::AST::WhileLoop::WhileLoop):
        * Modules/webgpu/WHLSL/WHLSLAutoInitializeVariables.cpp:
        (WebCore::WHLSL::AutoInitialize::visit):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::resolveWithOperatorAnderIndexer):
        (WebCore::WHLSL::resolveWithOperatorLength):
        (WebCore::WHLSL::resolveWithReferenceComparator):
        (WebCore::WHLSL::resolveByInstantiation):
        (WebCore::WHLSL::resolveFunction):
        (WebCore::WHLSL::Checker::visit):
        (WebCore::WHLSL::argumentTypeForAndOverload):
        (WebCore::WHLSL::Checker::finishVisiting):
        * Modules/webgpu/WHLSL/WHLSLInferTypes.cpp:
        (WebCore::WHLSL::matchAndCommit):
        * Modules/webgpu/WHLSL/WHLSLLexer.cpp:
        (WebCore::WHLSL::Token::typeName):
        (WebCore::WHLSL::Lexer::consumeTokenFromStream):
        * Modules/webgpu/WHLSL/WHLSLLexer.h:
        (WebCore::WHLSL::AST::CodeLocation::CodeLocation):
        (WebCore::WHLSL::AST::CodeLocation::startOffset const):
        (WebCore::WHLSL::AST::CodeLocation::endOffset const):
        (WebCore::WHLSL::Token::startOffset const):
        (WebCore::WHLSL::Lexer::errorString):
        (WebCore::WHLSL::Token::stringView const):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:
        (WebCore::WHLSL::NameResolver::visit):
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parse):
        (WebCore::WHLSL::Parser::peek):
        (WebCore::WHLSL::Parser::peekFurther):
        (WebCore::WHLSL::Types::includes):
        (WebCore::WHLSL::Types::appendNameTo):
        (WebCore::WHLSL::Types<t>::includes):
        (WebCore::WHLSL::Types<t>::appendNameTo):
        (WebCore::WHLSL::Parser::peekType):
        (WebCore::WHLSL::Parser::tryType):
        (WebCore::WHLSL::Parser::tryTypes):
        (WebCore::WHLSL::Parser::consumeType):
        (WebCore::WHLSL::Parser::consumeTypes):
        (WebCore::WHLSL::Parser::consumeIntegralLiteral):
        (WebCore::WHLSL::Parser::parseConstantExpression):
        (WebCore::WHLSL::Parser::parseTypeArgument):
        (WebCore::WHLSL::Parser::parseTypeArguments):
        (WebCore::WHLSL::Parser::parseTypeSuffixAbbreviated):
        (WebCore::WHLSL::Parser::parseTypeSuffixNonAbbreviated):
        (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::parseComputeFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseVertexOrFragmentFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseRegularFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseOperatorFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseFunctionDeclaration):
        (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::parseLimitedSuffixOperator):
        (WebCore::WHLSL::Parser::parseSuffixOperator):
        (WebCore::WHLSL::Parser::parseExpression):
        (WebCore::WHLSL::Parser::completeTernaryConditional):
        (WebCore::WHLSL::Parser::completeAssignment):
        (WebCore::WHLSL::Parser::parsePossibleTernaryConditional):
        (WebCore::WHLSL::Parser::completePossibleLogicalBinaryOperation):
        (WebCore::WHLSL::Parser::completePossibleRelationalBinaryOperation):
        (WebCore::WHLSL::Parser::completePossibleShift):
        (WebCore::WHLSL::Parser::completePossibleAdd):
        (WebCore::WHLSL::Parser::completePossibleMultiply):
        (WebCore::WHLSL::Parser::parsePossiblePrefix):
        (WebCore::WHLSL::Parser::parsePossibleSuffix):
        (WebCore::WHLSL::Parser::parseCallExpression):
        (WebCore::WHLSL::Parser::parseTerm):
        * Modules/webgpu/WHLSL/WHLSLParser.h:
        * Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp:
        (WebCore::WHLSL::anonymousToken):
        (WebCore::WHLSL::PreserveLifetimes::PreserveLifetimes):
        (WebCore::WHLSL::PreserveLifetimes::assignVariableIntoStruct):
        (WebCore::WHLSL::preserveVariableLifetimes):
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        (WebCore::WHLSL::PropertyResolver::visit):
        (WebCore::WHLSL::wrapAnderCallArgument):
        (WebCore::WHLSL::setterCall):
        (WebCore::WHLSL::getterCall):
        (WebCore::WHLSL::modify):
        (WebCore::WHLSL::PropertyResolver::simplifyRightValue):
        (WebCore::WHLSL::LeftValueSimplifier::finishVisiting):
        * 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-07-10  Kenneth Russell  <kbr@chromium.org>

        Hook up WebGL's back buffer in ANGLE backend on macOS
        https://bugs.webkit.org/show_bug.cgi?id=198982

        Reviewed by Alex Christensen.

        Fix a few places which were accidentally calling desktop OpenGL rather
        than ANGLE. Fix some calls which were using ANGLE's OpenGL ES 3.0
        entry points rather than the OpenGL ES 2.0 extension APIs, causing
        them to generate errors in WebGL 1.0's backend. Change
        Extensions3DANGLE to use ANGLE's requestable extension mechanism.

        Fix framebuffer setup when using ANGLE for WebGL 1.0 contexts, for
        both antialias:true and false.

        Remove ANGLEWebKitBridge in ANGLE backend. It interfered with the
        correct operation of ANGLE's internal shader compiler, and was
        unnecessary given the use of ANGLE. Remove all manual shader name
        hashing and mapping in ANGLE backend.

        Tested with parts of the WebGL conformance suite and the San
        Angeles demo, which now runs properly with WebKit's ANGLE backend
        for WebGL.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::getProgramParameter):
        (WebCore::WebGLRenderingContextBase::getUniformLocation):
        (WebCore::WebGLRenderingContextBase::linkProgramWithoutInvalidatingAttribLocations):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/angle/Extensions3DANGLE.cpp:
        (WebCore::Extensions3DANGLE::Extensions3DANGLE):
        (WebCore::Extensions3DANGLE::supports):
        (WebCore::Extensions3DANGLE::ensureEnabled):
        (WebCore::Extensions3DANGLE::isEnabled):
        (WebCore::Extensions3DANGLE::getTranslatedShaderSourceANGLE):
        (WebCore::Extensions3DANGLE::initializeAvailableExtensions):
        (WebCore::Extensions3DANGLE::blitFramebuffer):
        (WebCore::Extensions3DANGLE::renderbufferStorageMultisample):
        (WebCore::Extensions3DANGLE::createVertexArrayOES):
        (WebCore::Extensions3DANGLE::deleteVertexArrayOES):
        (WebCore::Extensions3DANGLE::isVertexArrayOES):
        (WebCore::Extensions3DANGLE::bindVertexArrayOES):
        (WebCore::Extensions3DANGLE::supportsExtension):
        (WebCore::Extensions3DANGLE::drawBuffersEXT):
        (WebCore::Extensions3DANGLE::drawArraysInstanced):
        (WebCore::Extensions3DANGLE::drawElementsInstanced):
        (WebCore::Extensions3DANGLE::vertexAttribDivisor):
        * platform/graphics/angle/Extensions3DANGLE.h:
        * platform/graphics/angle/GraphicsContext3DANGLE.cpp:
        (WebCore::GraphicsContext3D::validateAttributes):
        (WebCore::GraphicsContext3D::reshapeFBOs):
        (WebCore::GraphicsContext3D::attachDepthAndStencilBufferIfNeeded):
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary):
        (WebCore::GraphicsContext3D::validateDepthStencil):
        (WebCore::GraphicsContext3D::prepareTexture):
        (WebCore::GraphicsContext3D::attachShader):
        (WebCore::GraphicsContext3D::bindAttribLocation):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::compileShaderDirect):
        (WebCore::GraphicsContext3D::detachShader):
        (WebCore::GraphicsContext3D::getActiveAttribImpl):
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getActiveUniformImpl):
        (WebCore::GraphicsContext3D::getActiveUniform):
        (WebCore::GraphicsContext3D::getAttribLocation):
        (WebCore::GraphicsContext3D::getAttribLocationDirect):
        (WebCore::GraphicsContext3D::moveErrorsToSyntheticErrorList):
        (WebCore::GraphicsContext3D::linkProgram):
        (WebCore::GraphicsContext3D::shaderSource):
        (WebCore::GraphicsContext3D::getUnmangledInfoLog):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getUniformLocation):
        (WebCore::GraphicsContext3D::createBuffer):
        (WebCore::GraphicsContext3D::createFramebuffer):
        (WebCore::GraphicsContext3D::createProgram):
        (WebCore::GraphicsContext3D::createRenderbuffer):
        (WebCore::GraphicsContext3D::createShader):
        (WebCore::GraphicsContext3D::createTexture):
        (WebCore::GraphicsContext3D::deleteBuffer):
        (WebCore::GraphicsContext3D::deleteFramebuffer):
        (WebCore::GraphicsContext3D::deleteProgram):
        (WebCore::GraphicsContext3D::deleteRenderbuffer):
        (WebCore::GraphicsContext3D::deleteShader):
        (WebCore::GraphicsContext3D::deleteTexture):
        (WebCore::GraphicsContext3D::synthesizeGLError):
        (): Deleted.
        (WebCore::setCurrentNameHashMapForShader): Deleted.
        (WebCore::nameHashForShader): Deleted.
        (WebCore::GraphicsContext3D::checkVaryingsPacking const): Deleted.
        (WebCore::GraphicsContext3D::precisionsMatch const): Deleted.
        (WebCore::generateHashedName): Deleted.
        (WebCore::GraphicsContext3D::mappedSymbolInShaderSourceMap): Deleted.
        (WebCore::GraphicsContext3D::mappedSymbolName): Deleted.
        (WebCore::GraphicsContext3D::originalSymbolInShaderSourceMap): Deleted.
        (WebCore::GraphicsContext3D::originalSymbolName): Deleted.
        (WebCore::GraphicsContext3D::getNonBuiltInActiveSymbolCount): Deleted.
        (WebCore::GraphicsContext3D::getShaderSource): Deleted.
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::checkGPUStatus):
        (WebCore::GraphicsContext3D::allocateIOSurfaceBackingStore):
        (WebCore::GraphicsContext3D::updateFramebufferTextureBackingStoreFromLayer):
        * platform/graphics/cocoa/WebGLLayer.h:
        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer initWithGraphicsContext3D:]):
        (-[WebGLLayer copyImageSnapshotWithColorSpace:]):
        (-[WebGLLayer display]):
        (-[WebGLLayer setEGLDisplay:andConfig:]):
        (-[WebGLLayer dealloc]):
        (-[WebGLLayer allocateIOSurfaceBackingStoreWithSize:usingAlpha:]):
        (-[WebGLLayer bindFramebufferToNextAvailableSurface]):

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

        openDatabase property should not be enumerable on DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=199672
        <rdar://problem/52809000>

        Reviewed by Chris Dumez.

        Test: storage/websql/openDatabase-deprecation.html

        * Modules/webdatabase/DOMWindowWebDatabase.idl:

2019-07-10  Chris Dumez  <cdumez@apple.com>

        Fix unsafe usage of makeWeakPtr() in CMTimebaseEffectiveRateChangedCallback()
        https://bugs.webkit.org/show_bug.cgi?id=199656

        Reviewed by Eric Carlson.

        CMTimebaseEffectiveRateChangedCallback() is getting called on a background thread and would call
        makeWeakPtr() on the MediaPlayerPrivateMediaSourceAVFObjC object, which is not safe because
        MediaPlayerPrivateMediaSourceAVFObjC is a main thread object.

        To address the issue, move the logic for listening to effective rate changes to its own
        Listener class which is ThreadSafeRefCounted. Instead of using makeWeakPtr() on the background
        thread, we now merely ref the thread-safe listener.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::EffectiveRateChangedListener::create):
        (WebCore::EffectiveRateChangedListener::effectiveRateChanged):
        (WebCore::CMTimebaseEffectiveRateChangedCallback):
        (WebCore::EffectiveRateChangedListener::stop):
        (WebCore::EffectiveRateChangedListener::EffectiveRateChangedListener):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::~MediaPlayerPrivateMediaSourceAVFObjC):

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

        Remove TouchActionData
        https://bugs.webkit.org/show_bug.cgi?id=199668

        Reviewed by Simon Fraser.

        TouchActionData structure has been superseded by touch-action regions in EventRegion and is unused.
        Remove it and the supporting code.

        No functional changes.

        * dom/Document.cpp:
        (WebCore::Document::nodeWillBeRemoved):
        (WebCore::Document::updateTouchActionElements): Deleted.
        * dom/Document.h:
        (WebCore::Document::mayHaveElementsWithNonAutoTouchAction const):
        (WebCore::Document::setMayHaveElementsWithNonAutoTouchAction):

        Replace touchActionElements set with a bit that covers the only remaining clients (optimizations).
        Note that touchActionElements was not deleted when emptied, it had the same "may have" behavior (which
        is currently needed).

        (WebCore::Document::touchActionElements const): Deleted.
        * dom/Element.cpp:
        (WebCore::Element::computedTouchActions const): Deleted.
        * dom/Element.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::absoluteEventTrackingRegionsForFrame const):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::touchActionDataAtPoint const): Deleted.
        * page/scrolling/ScrollingTree.h:
        * platform/EventTrackingRegions.cpp:
        (WebCore::operator==):
        * platform/EventTrackingRegions.h:
        (): Deleted.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateEventRegion):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveElement):

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

        [LFC][IFC] Remove redundant InlineFormattingContext::LineLayout members.
        https://bugs.webkit.org/show_bug.cgi?id=199654
        <rdar://problem/52869206>

        Reviewed by Antti Koivisto.

        Some of the members are actually only needed in selected functions.

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthConstraints const):
        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::LineLayout::layoutState const):
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::LineLayout::LineLayout):
        (WebCore::Layout::InlineFormattingContext::LineLayout::layout const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::computedIntrinsicWidth const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::createDisplayRuns const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::alignRuns const):
        * layout/inlineformatting/InlineFormattingState.h:
        (WebCore::Layout::InlineFormattingState::inlineItems):
        (WebCore::Layout::InlineFormattingState::inlineRuns):
        (WebCore::Layout::InlineFormattingState::lineBoxes):

2019-07-10  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer] Protect against null samples and samples with null buffers
        https://bugs.webkit.org/show_bug.cgi?id=199619

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::GstVideoFrameHolder::GstVideoFrameHolder): Assert to enforce non-null samples.
        (WebCore::GstVideoFrameHolder::updateTexture): Protect against null m_buffer and improperly mapped video frame.

2019-07-09  Andres Gonzalez  <andresg_22@apple.com>

        AX: HTML datalist accessibility is not exposed by WebKit
        https://bugs.webkit.org/show_bug.cgi?id=196998
        <rdar://problem/49962521>

        Reviewed by Chris Fleizach.

        Input fields with datalist are exposed as having a listbox popup.

        Test: accessibility/datalist.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::popupValue const):
        (WebCore::AccessibilityObject::hasDatalist const):
        * accessibility/AccessibilityObject.h:

2019-07-09  Justin Fan  <justin_fan@apple.com>

        Replace old, broken WebGPU IDL spec link with the new one in IDL comments.

        Rubber-stamped by Myles C. Maxfield.

        No test changes or change in behavior.

        * Modules/webgpu/GPUBindGroupLayoutBinding.idl:
        * Modules/webgpu/GPUBindGroupLayoutDescriptor.idl:
        * Modules/webgpu/GPUBlendDescriptor.idl:
        * Modules/webgpu/GPUBufferDescriptor.idl:
        * Modules/webgpu/GPUBufferUsage.idl:
        * Modules/webgpu/GPUCanvasContext.idl:
        * Modules/webgpu/GPUColor.idl:
        * Modules/webgpu/GPUColorStateDescriptor.idl:
        * Modules/webgpu/GPUColorWriteBits.idl:
        * Modules/webgpu/GPUCompareFunction.idl:
        * Modules/webgpu/GPUDepthStencilStateDescriptor.idl:
        * Modules/webgpu/GPUExtent3D.idl:
        * Modules/webgpu/GPULoadOp.idl:
        * Modules/webgpu/GPUOrigin3D.idl:
        * Modules/webgpu/GPURequestAdapterOptions.idl:
        * Modules/webgpu/GPUSamplerDescriptor.idl:
        * Modules/webgpu/GPUShaderStageBit.idl:
        * Modules/webgpu/GPUStoreOp.idl:
        * Modules/webgpu/GPUTextureDescriptor.idl:
        * Modules/webgpu/GPUTextureUsage.idl:
        * Modules/webgpu/GPUVertexAttributeDescriptor.idl:
        * Modules/webgpu/GPUVertexBufferDescriptor.idl:
        * Modules/webgpu/GPUVertexInputDescriptor.idl:
        * Modules/webgpu/WebGPU.idl:
        * Modules/webgpu/WebGPUAdapter.idl:
        * Modules/webgpu/WebGPUBindGroup.idl:
        * Modules/webgpu/WebGPUBindGroupBinding.idl:
        * Modules/webgpu/WebGPUBindGroupDescriptor.idl:
        * Modules/webgpu/WebGPUBindGroupLayout.idl:
        * Modules/webgpu/WebGPUBuffer.idl:
        * Modules/webgpu/WebGPUBufferBinding.idl:
        * Modules/webgpu/WebGPUCommandBuffer.idl:
        * Modules/webgpu/WebGPUCommandEncoder.idl:
        * Modules/webgpu/WebGPUComputePassEncoder.idl:
        * Modules/webgpu/WebGPUComputePipeline.idl:
        * Modules/webgpu/WebGPUComputePipelineDescriptor.idl:
        * Modules/webgpu/WebGPUDevice.idl:
        * Modules/webgpu/WebGPUPipelineDescriptorBase.idl:
        * Modules/webgpu/WebGPUPipelineLayout.idl:
        * Modules/webgpu/WebGPUPipelineLayoutDescriptor.idl:
        * Modules/webgpu/WebGPUPipelineStageDescriptor.idl:
        * Modules/webgpu/WebGPUProgrammablePassEncoder.idl:
        * Modules/webgpu/WebGPUQueue.idl:
        * Modules/webgpu/WebGPURenderPassDescriptor.idl:
        * Modules/webgpu/WebGPURenderPassEncoder.idl:
        * Modules/webgpu/WebGPURenderPipeline.idl:
        * Modules/webgpu/WebGPURenderPipelineDescriptor.idl:
        * Modules/webgpu/WebGPUSampler.idl:
        * Modules/webgpu/WebGPUShaderModule.idl:
        * Modules/webgpu/WebGPUShaderModuleDescriptor.idl:
        * Modules/webgpu/WebGPUSwapChain.idl:
        * Modules/webgpu/WebGPUTexture.idl:
        * Modules/webgpu/WebGPUTextureView.idl:

2019-07-09  Chris Dumez  <cdumez@apple.com>

        Stop using GenericTaskQueue from multiple threads
        https://bugs.webkit.org/show_bug.cgi?id=199652

        Reviewed by Geoffrey Garen.

        WebCoreAVFLoaderDelegate was calling GenericTaskQueue::enqueueTask() from a background thread,
        which is not safe because the implementation of enqueueTask() calls makeWeakPtr() on the
        GenericTaskQueue (a main thread object).

        Update WebCoreAVFLoaderDelegate to use callOnMainThread() instead.

        * platform/GenericTaskQueue.h:
        Stop last template parameter which was used exclusively by WebCoreAVFLoaderDelegate to try and
        make GenericTaskQueue thread-safe.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFMovieObserver metadataLoaded]):
        (-[WebCoreAVFMovieObserver didEnd:]):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[WebCoreAVFMovieObserver legibleOutput:didOutputAttributedStrings:nativeSampleBuffers:forItemTime:]):
        (-[WebCoreAVFMovieObserver outputSequenceWasFlushed:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForLoadingOfRequestedResource:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:didCancelLoadingRequest:]):

2019-07-09  Tim Horton  <timothy_horton@apple.com>

        Fixed elements appear in the middle of full page screenshots taken when scrolled
        https://bugs.webkit.org/show_bug.cgi?id=199649
        <rdar://problem/52476226>

        Reviewed by Simon Fraser.

        * page/FrameView.h:
        Expose a getter for the layout viewport override rect.

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

        Fix build after r247279
        https://bugs.webkit.org/show_bug.cgi?id=199640

        * WebCore.xcodeproj/project.pbxproj:

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

        Move AutofillElements.{h,cpp} from editing/ios to editing/cocoa since they're used on macOS
        https://bugs.webkit.org/show_bug.cgi?id=199640

        Reviewed by Chris Dumez.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/cocoa/AutofillElements.cpp: Copied from Source/WebCore/editing/ios/AutofillElements.cpp.
        * editing/cocoa/AutofillElements.h: Copied from Source/WebCore/editing/ios/AutofillElements.h.
        * editing/ios/AutofillElements.cpp: Removed.
        * editing/ios/AutofillElements.h: Removed.

2019-07-09  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: replace WTF::Vector with std::initializer_list in CallTracer to avoid dynamic allocations
        https://bugs.webkit.org/show_bug.cgi?id=199611

        Reviewed by Joseph Pecoraro.

        The number of arguments for each member function is known at build time, so there's no need
        to dynamically allocate a `WTF::Vector` when capturing the arguments. One downside to using
        a `std::initializer_list` is that we can no longer "flatten" `WTF::Variant` arguments into
        a `RecordCanvasActionVariant`, but this is acceptable because `WTF::Variant` supports having
        yet another `WTF::Variant` as one of it's types, which the `InspectorCanvas` can then figure
        out when it finally gets the data. The same applies to `nullptr`/`Optional` checks as well.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeSetterBodyDefinition):
        (GenerateImplementationFunctionCall):
        (GenerateCallTracer):
        (GenerateCallTracerParameter): Deleted.
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:

        * bindings/js/CallTracerTypes.h:
        * bindings/js/CallTracer.h:
        * bindings/js/CallTracer.cpp:
        (WebCore::CallTracer::recordCanvasAction):

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::recordCanvasAction):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::recordCanvasActionImpl):

        * inspector/agents/InspectorCanvasAgent.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::recordCanvasAction):

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::recordAction):
        (WebCore::InspectorCanvas::buildAction):
        Drive-by: handle the situation where a parameter is an array of deduplicated strings, which
                  would otherwise be treated as an array of numbers.

2019-07-09  Chris Dumez  <cdumez@apple.com>

        Fix non thread-safe use of WeakPtr in DisplayRefreshMonitorMac::displayLinkFired()
        https://bugs.webkit.org/show_bug.cgi?id=199626

        Reviewed by Ryosuke Niwa.

        Fix non thread-safe use of WeakPtr in DisplayRefreshMonitorMac::displayLinkFired().
        DisplayRefreshMonitorMac gets constructed / destroyed on the main thread, it is
        not thread-safe to call makeWeakPtr() on a DisplayRefreshMonitorMac object like it
        was done before.

        To address the issue, mark the object as ThreadSafeRefCounted and ref the object
        in the lambda instead.

        * platform/graphics/DisplayRefreshMonitor.h:
        (WebCore::DisplayRefreshMonitor::stop):
        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::unregisterClient):
        * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
        (WebCore::DisplayRefreshMonitorMac::~DisplayRefreshMonitorMac):
        (WebCore::DisplayRefreshMonitorMac::stop):
        (WebCore::DisplayRefreshMonitorMac::displayLinkFired):
        * platform/graphics/mac/DisplayRefreshMonitorMac.h:

2019-07-09  Sihui Liu  <sihui_liu@apple.com>

        Only allow fetching and removing session credentials from WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=199385
        <rdar://problem/52622080>

        Reviewed by Alex Christensen.

        Fetch and remove only session credentials from NSURLCredentialStorage.

        Modified existing API tests: WKWebsiteDataStore.FetchPersistentCredentials

        * platform/network/CredentialStorage.cpp:
        (WebCore::CredentialStorage::originsWithCredentials const):
        (WebCore::CredentialStorage::originsWithSessionCredentials):
        (WebCore::CredentialStorage::removeSessionCredentialsWithOrigins):
        (WebCore::CredentialStorage::clearSessionCredentials):
        (WebCore::CredentialStorage::clearPermanentCredentialsForProtectionSpace):
        * platform/network/CredentialStorage.h:
        * platform/network/mac/CredentialStorageMac.mm:
        (WebCore::CredentialStorage::originsWithSessionCredentials):
        (WebCore::CredentialStorage::removeSessionCredentialsWithOrigins):
        (WebCore::CredentialStorage::clearSessionCredentials):
        (WebCore::CredentialStorage::clearPermanentCredentialsForProtectionSpace):
        (WebCore::CredentialStorage::originsWithPersistentCredentials): Deleted.

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

        Null check HistoryItems given to loadDifferentDocumentItem
        https://bugs.webkit.org/show_bug.cgi?id=199596
        <rdar://problem/49884391>

        Reviewed by Ryosuke Niwa.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::retryAfterFailedCacheOnlyMainResourceLoad):
        Under some rare and mysterious conditions we can have a null provisionalItem when loading from the cache.

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

        Fix LOG_DISABLED and TREE_DEBUGGING enabled build.
        https://bugs.webkit.org/show_bug.cgi?id=199623
        <rdar://problem/52837648>

        Reviewed by Simon Fraser.

        * rendering/RenderLayerCompositor.cpp:

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

        [LFC][IFC] Remove InlineItem references from inline runs.
        https://bugs.webkit.org/show_bug.cgi?id=199608
        <rdar://problem/52812775>

        Reviewed by Antti Koivisto.

        Constructing the inline runs is where we stop using InlineItems in the process of processing the inline content.
        InlineItems are redundant in the context of Display::Runs.
        It also enables us to create temporary InlineItems to process split content.  

        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::LineLayout::createDisplayRuns const):
        * layout/inlineformatting/InlineFormattingContextQuirks.cpp:
        (WebCore::Layout::InlineFormattingContext::Quirks::lineDescentNeedsCollapsing):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::Content::Run::Run):
        (WebCore::Layout::Line::isVisuallyEmpty const):
        (WebCore::Layout::Line::close):
        (WebCore::Layout::Line::removeTrailingTrimmableContent):
        (WebCore::Layout::Line::trailingTrimmableWidth const):
        (WebCore::Layout::Line::appendNonBreakableSpace):
        (WebCore::Layout::Line::appendTextContent):
        (WebCore::Layout::Line::appendNonReplacedInlineBox):
        (WebCore::Layout::Line::appendHardLineBreak):
        * layout/inlineformatting/InlineLine.h:
        (WebCore::Layout::Line::Content::Run::layoutBox const):
        (WebCore::Layout::Line::Content::Run::logicalRect const):
        (WebCore::Layout::Line::Content::Run::textContext const):
        (WebCore::Layout::Line::Content::Run::type const):
        (WebCore::Layout::Line::Content::Run::isText const):
        (WebCore::Layout::Line::Content::Run::isBox const):
        (WebCore::Layout::Line::Content::Run::isLineBreak const):
        (WebCore::Layout::Line::Content::Run::isContainerStart const):
        (WebCore::Layout::Line::Content::Run::isContainerEnd const):
        (WebCore::Layout::Line::Content::Run::adjustLogicalTop):
        (WebCore::Layout::Line::Content::Run::moveVertically):
        (WebCore::Layout::Line::Content::Run::moveHorizontally):
        (WebCore::Layout::Line::Content::Run::setTextIsCollapsed):

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

        REGRESSION(r244906): Crash in WebCore::positionOffsetValue
        https://bugs.webkit.org/show_bug.cgi?id=199613
        <rdar://problem/51518172>

        Reviewed by Zalan Bujtas.

        Test: fast/css/getComputedStyle/sticky-scroll-container-crash.html

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

        The client trivally hits nullptr when this is called for element without overflow scroll parent.

        Fix by removing the whole function and using shared enclosingClippingBoxForStickyPosition instead.
        It does the same ancestor walk more efficiently via layer tree.

        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::enclosingClippingBoxForStickyPosition const):

        Factor into function.

        (WebCore::RenderBoxModelObject::computeStickyPositionConstraints const):
        * rendering/RenderBoxModelObject.h:

2019-07-09  Cathie Chen  <cathiechen@igalia.com>

        Support writing-mode and direction for scrollIntoViewOptions.
        https://bugs.webkit.org/show_bug.cgi?id=161611

        Reviewed by Frédéric Wang and Simon Fraser.

        To determine which physical side to align we need to transform ScrollIntoViewOptions to scrollAlignment.
        We'll translate the inline and block direction separately. The writing-mode will affect the block scrollAlignment.
        While both writing-mode and CSS direction will affect the inline scrollAlignment. The argument for scrollRectToVisible
        should be physical, so if !isHorizontalWritingMode(), we need to switch alignX and alignY.

        For direction: rtl and writing-mode: horizontal-tb box, WebKit puts the scrollbar on the left side. The visible rect
        starts from the right side of the scroll bar, so localExposeRect should also start from the right side of
        scroll bar.

        * dom/Element.cpp:
        (WebCore::toScrollAlignmentForInlineDirection):
        (WebCore::toScrollAlignmentForBlockDirection):
        (WebCore::Element::scrollIntoView):
        (WebCore::toScrollAlignment): Deleted.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):

2019-07-08  Saam Barati  <sbarati@apple.com>

        [WHLSL Import 23 new JS reference spec tests
        https://bugs.webkit.org/show_bug.cgi?id=199604

        Reviewed by Myles C. Maxfield.

        This patch imports a bunch of JS reference spec tests on our way to
        completing https://bugs.webkit.org/show_bug.cgi?id=199595
        
        It also fixes the recursion checker phase. That phase had two bugs:
        1. We'd assert after visiting the function declaration that it was
        still in the set. However, it will not be in the set when we actually
        detect recursion.
        2. We would not visit the arguments to a call, so if they contained other
        calls which were recursive, we would not detect such recursive calls.

        Tests: webgpu/whlsl-int-literal-compare.html
               webgpu/whlsl-simple-tests.html
               webgpu/whlsl-type-mismatch.html
               webgpu/whlsl-uint-bitwise.html

        * Modules/webgpu/WHLSL/WHLSLRecursionChecker.cpp:

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

        Make Document::postTask() safe to call from a background thread
        https://bugs.webkit.org/show_bug.cgi?id=199585

        Reviewed by Alex Christensen.

        Make Document::postTask() safe to call from a background thread by not calling makeWeakPtr() on the Document.
        Calling makeWeakPtr() on a document from a background thread is not safe since Document is a main thread
        object. Instead, capture Document::identifier() in the lambda and lookup the document from its identifier
        once we're on the main thread.

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

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

        Hop explicitly to the main thread after generating a frame in ScreenDisplayCaptureSourceMac
        https://bugs.webkit.org/show_bug.cgi?id=199581

        Reviewed by Eric Carlson.

        Instead of locking and setting the current frame from a background thread, hop to the main thread.
        This also makes sure the weakThis check is done in the main thread.
        Manually tested.

        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:
        (WebCore::ScreenDisplayCaptureSourceMac::DisplaySurface::DisplaySurface):
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
        (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream):
        (WebCore::ScreenDisplayCaptureSourceMac::generateFrame):
        (WebCore::ScreenDisplayCaptureSourceMac::newFrame):
        (WebCore::ScreenDisplayCaptureSourceMac::frameAvailable): Deleted.

2019-07-08  Daniel Bates  <dabates@apple.com>

        Command + . generates Escape with key identifier Period, should be Escape
        https://bugs.webkit.org/show_bug.cgi?id=199393
        <rdar://problem/52498001>

        Reviewed by Wenson Hsieh.

        Remap the key code for Command + . before we compute the Windows virtual key code.
        Otherwise, the Windows virtual key code reveals the pre-mapped key code.

        * platform/ios/WebEvent.mm:
        (-[WebEvent initWithKeyEventType:timeStamp:characters:charactersIgnoringModifiers:modifiers:isRepeating:withFlags:withInputManagerHint:keyCode:isTabKey:]):

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

        Prevent null dereferencing in SubresourceLoader::init's lambda
        https://bugs.webkit.org/show_bug.cgi?id=199580

        Reviewed by Ryosuke Niwa.

        Crash logs indicate that sometimes m_documentLoader is null.
        This is similar to https://bugs.webkit.org/show_bug.cgi?id=187360

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::init):

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

        Unable to paste from Notes into Excel 365 spreadsheet
        https://bugs.webkit.org/show_bug.cgi?id=199565
        <rdar://problem/43615497>

        Reviewed by Chris Dumez.

        When pasting into Microsoft Excel 365, the copied data is all inserted into a single cell, even when copying a
        table. To understand why this happens, we first need to understand how Excel's logic for handling paste works.
        When tapping on the "Paste" button, Excel performs and expects the following:

        1.  Before triggering programmatic paste, move focus into a hidden contenteditable area specifically intended to
            capture pasted content.
        2.  Run a promise that resolves immediately; the promise callback restores focus to the originally focused
            element prior to (1).
        3.  Invoke programmatic paste using `document.execCommand("Paste")`.
        4.  The callback scheduled in step (2) then runs, restoring focus to the main editable element representing a
            table cell.

        However, what ends up happening is this:

        Steps (1)-(3): same as before.
        4.  We (WebKit) create a temporary Page for the purposes of sanitizing copied web content before exposing it to
            the paste handler. This involves creating and loading a document; when this is finished, we call into
            Document::finishedParsing which flushes the microtask queue.
        5.  This causes us to immediately run the microtask enqueued in step (2), which restores focus to the previously
            focused element (importantly, this is not the element that was focused in step (1)).
        6.  The paste commences, and inserts the sanitized fragment into the originally focused element rather than the
            content editable area intended to capture pasted content.

        Excel's script then gets confused, and does not end up using their special paste logic to handle the paste. The
        pasted content is instead just inserted as plain text in a cell. To address this, we simply prevent document
        load in the Page for web content sanitization from triggering a microtask checkpoint; this allows any scheduled
        main thread microtasks to be deferred until the next turn of the runloop.

        Test: editing/pasteboard/paste-does-not-fire-promises-while-sanitizing-web-content.html

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

        Don't immediately dispatch microtasks when we finish document parsing, in the case where the page is intended
        only for web content sanitization, since this may end up executing script in the original document. As explained
        above, this causes compatibility issues when pasting in Excel.

        * editing/markup.cpp:
        (WebCore::createPageForSanitizingWebContent):

        When creating a page for sanitizing web content, mark it as such.

        * page/Page.h:

        Add a new flag to indicate that a Page is only intended for sanitizing web content.

        (WebCore::Page::setIsForSanitizingWebContent):
        (WebCore::Page::isForSanitizingWebContent const):

2019-07-08  Konstantin Tokarev  <annulen@yandex.ru>

        Remove unused #include "ImageBufferData.h"
        https://bugs.webkit.org/show_bug.cgi?id=199574

        Reviewed by Michael Catanzaro.

        * html/canvas/ImageBitmapRenderingContext.h:

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

        Fix thread safety issue in Database::scheduleTransactionCallback()
        https://bugs.webkit.org/show_bug.cgi?id=199557

        Reviewed by Alex Christensen.

        I am working on adding threading assertions to WeakPtr and found a potentially
        unsafe call to makeWeakPtr() on a Document from Database::scheduleTransactionCallback()
        via Document::postTask(), on a background database thread. Document is a main thread
        object and we should therefore not be interacting with it from a background thread.

        For clarity, this patch also switches the webdatabase code to use Document instead
        of ScriptExecution as type since it is only exposed to Window contexts, not workers.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::Database):
        (WebCore::Database::~Database):
        (WebCore::Database::runTransaction):
        (WebCore::Database::scheduleTransactionCallback):
        (WebCore::Database::logErrorMessage):
        (WebCore::Database::securityOrigin):
        (WebCore::Database::didExceedQuota):
        * Modules/webdatabase/Database.h:
        (WebCore::Database::document):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::DatabaseContext):
        * Modules/webdatabase/DatabaseContext.h:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::databaseContext):
        (WebCore::logOpenDatabaseError):
        (WebCore::DatabaseManager::openDatabaseBackend):
        (WebCore::DatabaseManager::tryToOpenDatabaseBackend):
        (WebCore::DatabaseManager::openDatabase):
        (WebCore::DatabaseManager::hasOpenDatabases):
        (WebCore::DatabaseManager::stopDatabases):
        (WebCore::DatabaseManager::logErrorMessage):
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/SQLStatement.cpp:
        (WebCore::SQLStatement::SQLStatement):
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::SQLTransaction):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didOpenDatabase):
        * inspector/agents/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::executeSQL):

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

        Add threading assertion to WTF::CompletionHandler
        https://bugs.webkit.org/show_bug.cgi?id=199516

        Reviewed by Alex Christensen.

        Update some MessagePort-related code to use WTF::Function instead of WTF::CompletionHandler
        since the callback is always called on the main thread, even when it was created on a
        worker thread. Ideally, this code would be refactored so that the callback gets called on
        the worker thread directly.

        * dom/messageports/MessagePortChannel.cpp:
        (WebCore::MessagePortChannel::checkRemotePortForActivity):
        * dom/messageports/MessagePortChannel.h:
        * dom/messageports/MessagePortChannelProvider.h:
        * dom/messageports/MessagePortChannelProviderImpl.cpp:
        (WebCore::MessagePortChannelProviderImpl::checkRemotePortForActivity):
        * dom/messageports/MessagePortChannelProviderImpl.h:
        * dom/messageports/MessagePortChannelRegistry.cpp:
        (WebCore::MessagePortChannelRegistry::checkRemotePortForActivity):
        * dom/messageports/MessagePortChannelRegistry.h:

2019-07-08  Charlie Turner  <cturner@igalia.com>

        REGRESSION(r243197): [GStreamer] Web process hangs when scrolling twitter timeline which contains HLS videos
        https://bugs.webkit.org/show_bug.cgi?id=197558

        Reviewed by Xabier Rodriguez-Calvar.

        Not covered, I have a test locally that would probably trigger the
        deadlock if the network requests took a realistic amount of time,
        but from a local webserver the window of time to hit this deadlock
        is too narrow.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_init): Make the websrc start asynchronously, this
        allows the main thread to be free to complete resource loader
        setup.
        (webKitWebSrcCreate): Calling start() from the create() vfunc is a
        recipe for deadlock, since BaseSrc holds the streaming lock during
        seeks, and then calls create(). In these cases, we do not want to
        notify async-completion, since we've already completed from the
        necessarily preceeding start() vfunc, and calling it again would
        require the stream-lock and deadlock us.
        (webKitWebSrcStart): Refactor to use webKitWebSrcMakeRequest, but
        ensuring that we do perform an async-complete notification.
        (webKitWebSrcMakeRequest): What Start() used to be, but now can be
        toggled when to notify of async-completion. Start() no longer
        blocks, since the return value of initiating a resource loader is
        of no interest to the callers.
        (webKitWebSrcCloseSession): Similarly to Start(), we do not need
        to wait for the completion of cancelled net requests.

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

        Unable to play videos on xfinity.com/stream on macOS Catalina
        https://bugs.webkit.org/show_bug.cgi?id=199576
        <rdar://problem/50101264>

        Reviewed by Alex Christensen.

        Enable invalidate Fetch signal quirk for all sites as the blacklist is getting too large and
        we are finding too much breakage too late in the release cycle.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::processInvalidSignal):
        * page/Quirks.cpp:
        (WebCore::Quirks::shouldIgnoreInvalidSignal const):

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

        MediaStreamTrackPrivate should always call readyStateChanged on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=199538
        <rdar://problem/52709106>

        Reviewed by Eric Carlson.

        MediaStreamTrackPrivate is sometimes calling readyStateChanged in a
        background thread inside its audioSamplesAvailable method.
        Instead of doing that, we hop to the main thread to call readyStateChanged.
        Once the call is made in the main thread, MediaStreamTrackPrivate will
        send the audio samples to its observers.

        To make mock audio source closer to real capture audio sources,
        audioSamplesAvailable is called on a background thread.
        RealtimeMediaSource is updated to always be destroyed in the main
        run loop since it is WebKit2 only.

        Covered by existing tests and making sure the mock audio source calls
        the audioSamplesAvailable method on a background thread.

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::videoSampleAvailable):
        (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable):
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::scheduleDeferredTask):
        scheduleDeferredTask may be called from a background thread.
        It is thus safer to ref the source instead of creating a weak pointer.
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSourceMac::MockRealtimeAudioSourceMac):
        (WebCore::MockRealtimeAudioSourceMac::emitSampleBuffers):
        (WebCore::MockRealtimeAudioSourceMac::reconfigure):
        (WebCore::MockRealtimeAudioSourceMac::render):
        (WebCore::MockRealtimeAudioSourceMac::settingsDidChange):
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::MockRealtimeAudioSource):
        (WebCore::MockRealtimeAudioSource::tick):
        * platform/mock/MockRealtimeAudioSource.h:

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

        Register a MediaStreamTrack as media producer only if it is a capture track
        https://bugs.webkit.org/show_bug.cgi?id=199566

        Reviewed by Eric Carlson.

        MediaStreamTrack registration as a media producer is only useful for capture tracks.
        Otherwise, the audio/video playing state is computed through HTMLMediaElement.
        Do not register MediaStreamTrack as a media producer if it is not a capture track.

        Set the muted state of the track before registering it as an audio
        producer. Otherwise, it might create unnecessary small change of playing state.
        Covered by existing tests.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        (WebCore::MediaStreamTrack::~MediaStreamTrack):
        * Modules/mediastream/MediaStreamTrack.h:

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

        YouTube embedding iframes in WebView sometimes go blank when the video starts playing
        https://bugs.webkit.org/show_bug.cgi?id=199600
        rdar://problem/47806012

        Reviewed by Tim Horton.

        With some combinations of nested iframes that are being resized from empty, and toggling into
        compositing mode, we'd fail to update compositing in the iframe's enclosing document, so never
        host the iframes's layers.

        Fix by moving some widget-resize-related code into RenderLayerCompositor::widgetDidChangeSize(),
        and adding code to schedule a compositing update.

        I was unable to come up with a layout test for this.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::widgetDidChangeSize):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry):

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

        [Pointer Events] Enable only on the most recent version of the supported iOS family
        https://bugs.webkit.org/show_bug.cgi?id=199562
        <rdar://problem/52766511>

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:

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

        [GStreamer] The CREATE_TRACK macro is messed up
        https://bugs.webkit.org/show_bug.cgi?id=199356

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::updateTracks): Fix the
        CREATE_TRACK macro for !VIDEO_TRACK builds.

2019-07-07  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Difficult to control videos on iqiyi.com as the actions are mouse hover
        https://bugs.webkit.org/show_bug.cgi?id=199542
        <rdar://problem/51886813>

        Reviewed by Simon Fraser.

        Decouple isVisuallyHidden and isConsideredVisible. Just because an element is not visually hidden (1px wide content)
        it is not necessarily qualified to be visible in the context of hover heuristic (e.g. iqiyi.com brings up a 1px wide
        clickable element when hovering over the scrubber. This element is clearly not designed to be actionable.)

        Tests: fast/events/touch/ios/content-observation/tap-on-1px-height-content.html
               fast/events/touch/ios/content-observation/tap-on-1px-width-content.html

        * dom/Node.cpp:
        (WebCore::Node::defaultEventHandler):
        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::isVisuallyHidden):
        (WebCore::ContentChangeObserver::isConsideredVisible):
        (WebCore::ContentChangeObserver::didAddTransition):
        (WebCore::ContentChangeObserver::didFinishTransition):
        (WebCore::ContentChangeObserver::willDestroyRenderer):
        (WebCore::ContentChangeObserver::StyleChangeScope::StyleChangeScope):
        (WebCore::ContentChangeObserver::StyleChangeScope::~StyleChangeScope):
        (WebCore::ContentChangeObserver::isConsideredHidden): Deleted.
        * page/ios/ContentChangeObserver.h:

2019-07-07  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Introduce splitPosition to LineLayout
        https://bugs.webkit.org/show_bug.cgi?id=199558
        <rdar://problem/52737649>

        Reviewed by Antti Koivisto.

        This is in preparation for breaking runs at line end.

        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::LineLayout::LineInput::LineInput):
        (WebCore::Layout::InlineFormattingContext::LineLayout::placeInlineItems const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::layout const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::computedIntrinsicWidth const):

2019-07-07  Zalan Bujtas  <zalan@apple.com>

        [LFC] Fix formatting context root for inflow positioned inline containers
        https://bugs.webkit.org/show_bug.cgi?id=199551
        <rdar://problem/52728868>

        Reviewed by Antti Koivisto.

        Relatively positioned (inflow) inline container lives in the formatting context where its parent lives unless
        the parent establishes a formatting context. This is slightly different from the usual behavior which is containing block driven.

        div id=outer style="position: absolute">><div id=inner><span style="position: relative">content</span></div></div>

        While the relatively positioned inline container (span) is placed relative to its containing block "outer", it lives in the inline formatting context established by "inner".

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::formattingContextRoot const):
        * layout/layouttree/LayoutBox.h:
        * layout/layouttree/LayoutInlineContainer.cpp:
        (WebCore::Layout::InlineContainer::formattingContextRoot const):
        * layout/layouttree/LayoutInlineContainer.h:

2019-07-06  Simon Fraser  <simon.fraser@apple.com>

        Long hang when loading a cnn.com page on iOS
        https://bugs.webkit.org/show_bug.cgi?id=199556

        Reviewed by Zalan Bujtas.
        
        Loading https://edition.cnn.com/travel/article/brussels-airlines-flight-to-nowhere/index.html in the iOS 13 sim
        results in a long hang under OverlapMapContainer::append(). We were creating pathological clipping scopes with
        thousands of entries, because OverlapMapContainer::mergeClippingScopesRecursive() had a logic error where
        it added 'sourceScope' to the child instead of 'sourceChildScope'. Add a new assertion to detect that case.
        
        I wasn't able to create a testcase that caused a hang, but a number of existing tests would have
        hit the assertion.

        * rendering/LayerOverlapMap.cpp:
        (WebCore::OverlapMapContainer::ClippingScope::addChild):
        (WebCore::OverlapMapContainer::mergeClippingScopesRecursive):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges): Drive-by fix: m_overflowControlsHostLayer is null on iOS, so use rootGraphicsLayer().

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

        Carvana.com needs the fetch AbortSignal quirk
        https://bugs.webkit.org/show_bug.cgi?id=199540

        Reviewed by Chris Dumez.

        Manually tested.

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

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

        [WHLSL] The checker does not need to keep a separate m_typeAnnotations map
        https://bugs.webkit.org/show_bug.cgi?id=199537

        Reviewed by Myles C. Maxfield.

        Nothing is ever deleted from it, and all of its contents are eventually copied into the expressions.
        We might as well put the type annotations directly into the expressions in the first place.
        It is about a 5% speedup of the checker.

        No new test as there is no inteded functional change.

        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::Checker::assignTypes):
        (WebCore::WHLSL::Checker::getInfo):
        (WebCore::WHLSL::Checker::assignType):
        (WebCore::WHLSL::Checker::forwardType):
        (WebCore::WHLSL::Checker::visit):

2019-07-05  Youenn Fablet  <youenn@apple.com> and Simon Fraser  <simon.fraser@apple.com>

        Trigger a compositing update when video element is changing
        https://bugs.webkit.org/show_bug.cgi?id=199522
        <rdar://problem/47297159>

        Reviewed by Simon Fraser.

        Test: compositing/video/video-update-rendering.html

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

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

        Unreviewed, fix -Wmisleading-indentation warning introduced in r246764
        https://bugs.webkit.org/show_bug.cgi?id=199173
        <rdar://problem/45968770>

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForLoad):

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

        Mail's use of punchOutWhiteBackgroundsInDarkMode not working on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=199534
        rdar://problem/52586836

        Reviewed by Simon Fraser.

        Tests: css3/color-filters/punch-out-white-backgrounds.html

        * dom/Document.cpp:
        (WebCore::Document::compositeOperatorForBackgroundColor const): Added.
        Use CompositeDestinationOut for transparent frames, otherwise CompositeDestinationIn.
        * dom/Document.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxDecorations): Use compositeOperatorForBackgroundColor.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxFillLayers): Ditto.
        (WebCore::RenderBox::paintBackground): Ditto.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell): Ditto.

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

        Revert change to block playback when process is ostensibly "suspended".
        https://bugs.webkit.org/show_bug.cgi?id=199530

        Reviewed by Eric Carlson.

        In r243958, a drive-by-fix was added that blocked playback when the WebProcess thought it
        was susposed to be suspended. The intent was to keep the AVAudioSession for the process
        from being activated just before the process was suspended, and thus avoid receiving an
        "interruption" and having the AVAudioSession deactivated out from under us upon resuming.

        Unfortunately, this caused problems when another process resumes the WebContent process
        in order to start playback; namely the Now Playing UI's play button. Because we may receive
        the play command long before whe notice that we've been resumed, the WebContent process
        may refuse to honor the play command because it thinks its supposed to be suspended.

        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::sessionWillBeginPlayback):

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

        [iOS] Crash in WebKit::WebPage::positionInformation via Range::startPosition
        https://bugs.webkit.org/show_bug.cgi?id=199503

        Reviewed by Wenson Hsieh.

        * editing/Editor.cpp:
        (WebCore::Editor::compositionRange const): Added a FIXME.

2019-07-02  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Standard library is too big to directly include in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=198186
        <rdar://problem/51288898>

        Reviewed by Saam Barati.

        This patch adds almost the entire remainder of the standard library. There are a few
        pieces missing:
        - step() because of https://bugs.webkit.org/show_bug.cgi?id=199289
        - sign() also because of https://bugs.webkit.org/show_bug.cgi?id=199289
        - faceforward() because it calls sign()
        - Some of the more rarely-used texturing functions (e.g. Gather()) https://bugs.webkit.org/show_bug.cgi?id=195813
        - RWTextures https://bugs.webkit.org/show_bug.cgi?id=198985

        There were two problems with adding so many standard library functions:
        - We didn't want to increase the WebCore binary size that much
        - Compiling all the functions at runtime took 7 seconds, which is much too long

        This patch addresses the first problem by gzipping the standard library before including it in the binary.
        At runtime, we use libcompression to unzip it.

        To address the second problem, we did some analysis and found that 14% of that 7 seconds was simply
        destroying all the AST nodes. Even if we eliminated all processing of the AST, simply having the AST
        of the entire standard library built and destroyed would still be too slow. Therefore, this patch limits
        which parts of the standard library get parsed in the first place. All the functions in the standard library
        file are sorted by name, and each group of functions with the same name are preceeded by a comment of the
        form /* Functions named xyz */. At build time, a Python script looks for all these comments, and builds a
        map from function name to character offset inside the file where those functions begin. At run time, we
        parse the user program first, look for all function calls within it, and look up those function call names
        in the map to see which part of the standard library holds those functions. We then parse just that part.
        Because the standard library can call other functions in the standard library, we do this in a loop until
        we have exhausted all the functions.

        Covered by existing tests.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make: gzip the standard library, and add a build step to generate the offset map.
        * Modules/webgpu/WHLSL/AST/WHLSLCallExpression.h:
        (WebCore::WHLSL::AST::CallExpression::setOverloads):
        (WebCore::WHLSL::AST::CallExpression::function): Every caller of this ASSERT()s the result. Might as well
        move the ASSERT() into the function.
        (WebCore::WHLSL::AST::CallExpression::setFunction):
        * Modules/webgpu/WHLSL/Cocoa/WHLSLStandardLibraryUtilities.cpp: Added.
        (WebCore::WHLSL::decompressStandardLibrary): Use libcompression. This is why this file is in a Cocoa/
        subfolder, and is listed in SourcesCocoa.txt instead of Sources.txt.
        (WebCore::WHLSL::decompressAndDecodeStandardLibrary):
        (WebCore::WHLSL::NameFinder::takeFunctionNames):
        (WebCore::WHLSL::includeStandardLibrary): Include only the bits of the standard library which are relevant,
        as described above.
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp: Only emit MSL code for functions which are actually
        reached. The MSL compiler is a significant amount of our compile time, so reducing the size of the emitted
        program can significantly improve compile times.
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        (WebCore::WHLSL::Metal::sharedMetalFunctions):
        (WebCore::WHLSL::Metal::metalFunctions):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::writeNativeFunction):
        - Change how load() and store() are written. We need explicit functions because we have explicit atomic
          types, which HLSL doesn't have. load() and store() aren't present in HLSL.
        - Delete f16tof32 because they're probably not important and are not obvious how to implement. We can re-add
          them again later if necessary.
        - Various fixes to make us generate the correct MSL code for each standard library function.
        * Modules/webgpu/WHLSL/WHLSLBuildStandardLibraryFunctionMap.py: Added. Build the function map as described
        above.
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::resolveByInstantiation): Previously, the standard library included an operator== for two
        pointers. However, that function should be generated by the compiler instead. This fixes the bug in the
        compiler which allows the compiler to correctly generate the right function. This also prompted me to file
        https://bugs.webkit.org/show_bug.cgi?id=199335
        (WebCore::WHLSL::checkOperatorOverload):
        (WebCore::WHLSL::Checker::visit):
        * Modules/webgpu/WHLSL/WHLSLFunctionStageChecker.cpp: Update to the new function() signature.
        * Modules/webgpu/WHLSL/WHLSLLexer.h: Add a new position() method to the lexer. This isn't actually used
        in this patch, but it's useful when doing some analysis during parsing. 
        (WebCore::WHLSL::Lexer::Lexer):
        (WebCore::WHLSL::Lexer::consumeToken):
        (WebCore::WHLSL::Lexer::peek const):
        (WebCore::WHLSL::Lexer::peekFurther const):
        (WebCore::WHLSL::Lexer::position const):
        (WebCore::WHLSL::Lexer::state const):
        (WebCore::WHLSL::Lexer::setState):
        (WebCore::WHLSL::Lexer::isFullyConsumed const): Fixes a bug where isFullyConsumed() might return true even
        when there is a token in the ring buffer.
        (WebCore::WHLSL::Lexer::peek): Deleted.
        (WebCore::WHLSL::Lexer::peekFurther): Deleted.
        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:
        (WebCore::WHLSL::NameResolver::visit): Drive-by partial fix of https://bugs.webkit.org/show_bug.cgi?id=199347
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp: Call includeStandardLibrary().
        (WebCore::WHLSL::prepareShared):
        * Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp:
        * Modules/webgpu/WHLSL/WHLSLRecursionChecker.cpp:
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:
        * Modules/webgpu/WHLSL/WHLSLStandardLibraryFunctionMap.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/WHLSLRecursionChecker.cpp.
        * Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/WHLSLRecursionChecker.cpp.
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:

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

        Add fetch quirk for www.bnz.co.nz
        https://bugs.webkit.org/show_bug.cgi?id=199518
        rdar://problem/52230914

        Reviewed by Chris Dumez.

        Use fetch quirk to make bnz main page load properly.
        Manually tested.

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

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

        [WHLSL] Optimize the lexer
        https://bugs.webkit.org/show_bug.cgi?id=199520

        Reviewed by Myles Maxfield.

        This patch includes a number of small optimizations to the lexer:
        - By creating two new types of Token (Invalid and EOF), we can avoid having to manipulate Optional<Token> everywhere
        - By combining the lexing of identifiers, keywords and operator names, we can avoid re-reading them several times
        - By storing mere offsets in the tokens instead of string views, we save space in the common case where the string view is unused (e.g. for keywords)
        - By storing mere offsets in the tokens instead of line numbers, we can simplify the whitespace and comment lexing; and we can easily recompute the line number on demand
        - By using templates we can avoid constructing and destructing vectors at runtime every time we call tryTypes, consumeTypes or peekTypes; as well as avoiding a call to find().
        - I also hoisted the length check out of the loop in Lexer::string()
        All of this combined brought the time spent in the parser when running LayoutTests/webgpu/whlsl-test-harness-test.html 5 times on my machine from 612ms to 462ms.

        I also removed the 'anyCharacter' method since it was dead code.
        I also removed Lexer::position(), but it is directly equivalent now to peek().startOffset.

        No new tests as there is no intended functional change.

        * Modules/webgpu/WHLSL/WHLSLLexer.cpp:
        (WebCore::WHLSL::Lexer::Token::typeName):
        (WebCore::WHLSL::Lexer::consumeTokenFromStream):
        (WebCore::WHLSL::Lexer::lineNumberFromOffset):
        (WebCore::WHLSL::isWhitespace):
        (WebCore::WHLSL::isNewline):
        (WebCore::WHLSL::Lexer::skipWhitespaceAndComments):
        (WebCore::WHLSL::Lexer::digitStar const):
        (WebCore::WHLSL::Lexer::completeOperatorName const):
        * Modules/webgpu/WHLSL/WHLSLLexer.h:
        (WebCore::WHLSL::Lexer::Lexer):
        (WebCore::WHLSL::Lexer::Token::stringView):
        (WebCore::WHLSL::Lexer::consumeToken):
        (WebCore::WHLSL::Lexer::peek const):
        (WebCore::WHLSL::Lexer::peekFurther const):
        (WebCore::WHLSL::Lexer::state const):
        (WebCore::WHLSL::Lexer::setState):
        (WebCore::WHLSL::Lexer::isFullyConsumed const):
        (WebCore::WHLSL::Lexer::errorString):
        (WebCore::WHLSL::Lexer::string const):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.h:
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parse):
        (WebCore::WHLSL::Parser::peek):
        (WebCore::WHLSL::Parser::peekFurther):
        (WebCore::WHLSL::Types::includes):
        (WebCore::WHLSL::Types::appendNameTo):
        (WebCore::WHLSL::Types<t>::includes):
        (WebCore::WHLSL::Types<t>::appendNameTo):
        (WebCore::WHLSL::Parser::peekTypes):
        (WebCore::WHLSL::Parser::tryType):
        (WebCore::WHLSL::Parser::tryTypes):
        (WebCore::WHLSL::Parser::consumeType):
        (WebCore::WHLSL::Parser::consumeTypes):
        (WebCore::WHLSL::Parser::consumeIntegralLiteral):
        (WebCore::WHLSL::Parser::parseConstantExpression):
        (WebCore::WHLSL::Parser::parseTypeArgument):
        (WebCore::WHLSL::Parser::parseTypeSuffixAbbreviated):
        (WebCore::WHLSL::Parser::parseTypeSuffixNonAbbreviated):
        (WebCore::WHLSL::Parser::parseType):
        (WebCore::WHLSL::Parser::parseTypeDefinition):
        (WebCore::WHLSL::Parser::parseBuiltInSemantic):
        (WebCore::WHLSL::Parser::parseResourceSemantic):
        (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::parseParameter):
        (WebCore::WHLSL::Parser::parseComputeFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseVertexOrFragmentFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseRegularFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseBlockBody):
        (WebCore::WHLSL::Parser::parseSwitchCase):
        (WebCore::WHLSL::Parser::parseVariableDeclaration):
        (WebCore::WHLSL::Parser::parseStatement):
        (WebCore::WHLSL::Parser::parseEffectfulAssignment):
        (WebCore::WHLSL::Parser::parseLimitedSuffixOperator):
        (WebCore::WHLSL::Parser::parseSuffixOperator):
        (WebCore::WHLSL::Parser::completeAssignment):
        (WebCore::WHLSL::Parser::parsePossibleTernaryConditional):
        (WebCore::WHLSL::Parser::completePossibleLogicalBinaryOperation):
        (WebCore::WHLSL::Parser::completePossibleRelationalBinaryOperation):
        (WebCore::WHLSL::Parser::completePossibleShift):
        (WebCore::WHLSL::Parser::completePossibleAdd):
        (WebCore::WHLSL::Parser::completePossibleMultiply):
        (WebCore::WHLSL::Parser::parsePossiblePrefix):
        (WebCore::WHLSL::Parser::parseCallExpression):
        (WebCore::WHLSL::Parser::parseTerm):
        * Modules/webgpu/WHLSL/WHLSLParser.h:
        * Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp:
        (WebCore::WHLSL::anonymousToken):

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

        [WHLSL] Remove the phase resolveCallsInFunctions
        https://bugs.webkit.org/show_bug.cgi?id=199474

        Reviewed by Myles Maxfield.

        This pass only stores into each property access and call expression vectors of all the functions it might be calling, for use by the Checker afterwards.
        But the checker is perfectly able to compute a pointer to these vectors by itself.
        So by removing this pass, we gain the following:
        - One less pass over the AST
        - No need to copy these vectors (which can be large for heavily overloaded functions, of which there are quite a few in the stdlib)
        - No need to have these vectors in the expressions, saving 24 bytes per CallExpression and 72 bytes per PropertyAccessExpression
        - No need to allocate and then destroy these vectors.

        No new tests as there is no intended functional change.

        * Modules/webgpu/WHLSL/AST/WHLSLCallExpression.h:
        (WebCore::WHLSL::AST::CallExpression::castReturnType):
        * Modules/webgpu/WHLSL/AST/WHLSLPropertyAccessExpression.h:
        * Modules/webgpu/WHLSL/WHLSLAutoInitializeVariables.cpp:
        (WebCore::WHLSL::AutoInitialize::visit):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::resolveFunction):
        (WebCore::WHLSL::Checker::finishVisiting):
        (WebCore::WHLSL::Checker::visit):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:
        (WebCore::WHLSL::NameResolver::NameResolver):
        (WebCore::WHLSL::NameResolver::visit):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.h:
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        (WebCore::WHLSL::prepareShared):

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

        [iOS] Local capture MediaStreamTrack does not render in portrait mode
        https://bugs.webkit.org/show_bug.cgi?id=199519
        <rdar://problem/52689720>

        Reviewed by Eric Carlson.

        RealtimeVideoSource was badly computing its size in case of rotation.
        Whenever its underlying source is notifying of settings change,
        compute the size and transpose it only in left/right case.

        Update mock video source to cover that case.
        Covered by updated test.

        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::sourceSettingsChanged):
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::updateSampleBuffer):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::settings):
        (WebCore::MockRealtimeVideoSource::orientationChanged):
        (WebCore::MockRealtimeVideoSource::monitorOrientation):
        * platform/mock/MockRealtimeVideoSource.h:

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

        Unreviewed, rolling out r247115.

        Breaks lldbWebKitTester (and by extension, test-webkitpy)

        Reverted changeset:

        "[WHLSL] Standard library is too big to directly include in
        WebCore"
        https://bugs.webkit.org/show_bug.cgi?id=198186
        https://trac.webkit.org/changeset/247115

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

        Unreviewed, rolling out r247159.

        IndexedDB layout tests are failing the new assert.

        Reverted changeset:

        "ASSERT that a sessionID is valid when encoding it"
        https://bugs.webkit.org/show_bug.cgi?id=199302
        https://trac.webkit.org/changeset/247159

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

        Unreviewed, rolling out r247123.

        Caused TestWebKitAPI.Challenge.BasicProposedCredential to
        fail.

        Reverted changeset:

        "Only allow fetching and removing session credentials from
        WebsiteDataStore"
        https://bugs.webkit.org/show_bug.cgi?id=199385
        https://trac.webkit.org/changeset/247123

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

        ASSERT that a sessionID is valid when encoding it
        https://bugs.webkit.org/show_bug.cgi?id=199302

        Reviewed by Darin Adler.

        For IDBValue, instead of encoding an invalid session ID, encode a boolean that tells there is no sessionID.
        For IDBRequestData, keep track of whether there is an IDBDatabaseIdentifier
        and encode/decode accordingly to not encode an invalid sessionID.
        No observable change of behavior.

        * Modules/indexeddb/IDBValue.h:
        (WebCore::IDBValue::sessionID const):
        (WebCore::IDBValue::encode const):
        (WebCore::IDBValue::decode):
        * Modules/indexeddb/shared/IDBRequestData.cpp:
        (WebCore::IDBRequestData::isolatedCopy):
        * Modules/indexeddb/shared/IDBRequestData.h:
        (WebCore::IDBRequestData::databaseIdentifier const):
        (WebCore::IDBRequestData::decode):

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

        [LFC][IFC] Inline runs should be relative to the line's top/left initially
        https://bugs.webkit.org/show_bug.cgi?id=199157
        <rdar://problem/52053415>

        Reviewed by Antti Koivisto.

        Let's construct the runs relative to the line's top/left and convert them relative to the formatting root's border box top/left
        when the line is being closed. When the line moves (floats etc) we don't have to move each runs individually.

        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::close):
        (WebCore::Layout::Line::moveLogicalLeft):
        (WebCore::Layout::Line::appendInlineContainerStart):
        (WebCore::Layout::Line::appendTextContent):
        (WebCore::Layout::Line::appendNonReplacedInlineBox):
        (WebCore::Layout::Line::appendHardLineBreak):

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

        REGRESSION(r244218): desmos.com: Cannot scroll formulas region when region is scrollable
        https://bugs.webkit.org/show_bug.cgi?id=199508
        <rdar://problem/50925173>

        Reviewed by Zalan Bujtas.

        The page invokes preventDefault on simulated mouse events which stops scrolling.
        To fix, add a quirk that turns simulated mouse events non-cancelable.

        * dom/MouseEvent.h:
        * dom/ios/MouseEventIOS.cpp:
        (WebCore::MouseEvent::create):
        * page/Quirks.cpp:
        (WebCore::Quirks::simulatedMouseEventTypeForTarget const):
        (WebCore::Quirks::shouldDispatchSimulatedMouseEventsOnTarget const): Deleted.

        To avoid adding more similar functions, and for future flexibility, make this one return the type too.

        * page/Quirks.h:

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

        [LFC][IFC] Empty text node should generate empty InlineTextItem
        https://bugs.webkit.org/show_bug.cgi?id=199495
        <rdar://problem/52643225>

        Reviewed by Antti Koivisto.

        Empty text nodes generate empty RenderText renderers but they don't generate inline boxes.
        This patch aligns LFC with the current rendering code.

        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::appendTextContent):
        * layout/inlineformatting/InlineTextItem.cpp:
        (WebCore::Layout::InlineTextItem::createAndAppendTextItems):

2019-07-05  Adrian Perez de Castro  <aperez@igalia.com>

        [ATK] Do not use C linkage for functions using C++ features
        https://bugs.webkit.org/show_bug.cgi?id=199510
        <rdar://problem/52674702>

        Reviewed by Carlos Garcia Campos.

        No new tests needed.

        * accessibility/atk/WebKitAccessible.h: Move function and type declarations involving
        C++ features outside of the block delimited by the G_BEGIN_DECLS and G_END_DECLS macros,
        which were setting the C linkage.

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

        [Pointer Events] Respect pointer capture when dispatching mouse boundary events and updating :hover
        https://bugs.webkit.org/show_bug.cgi?id=198999
        <rdar://problem/51979477>

        Reviewed by Dean Jackson.

        Up until now, we would not account for pointer capture (see ​https://w3c.github.io/pointerevents/#pointer-capture) when dispatching
        mouse boundary events (mouseover, mouseout, mouseenter, mouseleave) and their counterpart pointer events. We would also not account
        for it when updating :hover styles.

        Now, when pointer capture changes for an element, we call setCapturingMouseEventsElement() on the EventHandler such that the element
        that would naturally hit-test is overridden by the pointer capture element when identifying which target to use for the dispatch of
        boundary mouse events. Additionally, when calling Document::prepareMouseEvent(), we also use the pointer capture element to
        pass down to Document::updateHoverActiveState() such that :hover styles are applied to the correct element.

        * dom/Document.cpp:
        (WebCore::Document::prepareMouseEvent): When a new event is going to be dispatched, we must run the Process Pending Capture Element
        steps as mandated by the Pointer Events spec. Calling this will dispatch the appropriate pointer capture change events and also
        required boundary events since EventHandler::setCapturingMouseEventsElement() calls into EventHandler::updateMouseEventTargetNode().
        Since this may update the capturing mouse events element, we ensure that we call updateHoverActiveState() with a flag that indicates that.
        Finally, we use the capturing mouse events element instead of the hit-testing element to pass to updateHoverActiveState() to ensure
        that is has :hover styles applied.
        (WebCore::Document::updateHoverActiveState): Account for the new CaptureChange flag to force the invalidation of the :hover and :active
        elements chain at all times when the capturing mouse events element changed.
        * dom/Document.h:
        * dom/PointerEvent.h: Update PointerEvent::createForPointerCapture() to take specific parameters rather than a single PointerEvent to
        set the pointerId, isPrimary and pointerType properties of the generated event. This is required to call processPendingPointerCapture()
        outside of PointerEvent dispatch logic since we now call it from Document::prepareMouseEvent() where we haven't yet generated such an
        event.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::pointerCaptureElementDidChange): When a new pointer capture element is set, call updateMouseEventTargetNode()
        to ensure that boundary events are fired to indicate the pointer capture state change.
        (WebCore::EventHandler::prepareMouseEvent): Keep track of the last PlatformMouseEvent used to prepare a mouse event so that we can use
        it when setCapturingMouseEventsElement() is called.
        * page/EventHandler.h:
        * page/PointerCaptureController.cpp:
        (WebCore::PointerCaptureController::pointerCaptureElement): Since Document::prepareMouseEvent() needs to know the current pointer capture
        element, add a new public method that indicates the pointer capture element if that element is contained in the provided document. We need
        to provide the document since PointerCaptureController is owned by the Page and may manage several documents.
        (WebCore::PointerCaptureController::dispatchEvent): Only run the Process Pending Capture Element steps when dealing with a touch or pen
        event since those steps are already ran for mouse events in Document::prepareMouseEvent(). Additionally, since the element target is already
        set to be the pointer capture element with the changes made to processPendingPointerCapture(), and because on iOS pointer capture is always
        active, we can remove the code that would retarget the event to the pointer capture element.
        (WebCore::PointerCaptureController::pointerEventWasDispatched):
        (WebCore::PointerCaptureController::cancelPointer):
        (WebCore::PointerCaptureController::processPendingPointerCapture): We now call into EventHandler::setCapturingMouseEventsElement() when the
        capture target element changes. We must be careful to call this method prior to dispatching the "gotpointercapture" event and after dispatching
        the "lostpointercapture" event so that boundary events are fired at the right time.
        * page/PointerCaptureController.h:

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

        [ContentChangeObserver] didFinishTransition triggers a nested style recalc via isConsideredClickable
        https://bugs.webkit.org/show_bug.cgi?id=199506
        <rdar://problem/52656221>

        Reviewed by Ryosuke Niwa.

        isConsideredClickable() may trigger style update through Node::computeEditability. Let's adjust the observer state in the next runloop. 

        Test: fast/events/touch/ios/content-observation/animation-end-with-visiblity-change-and-recursive-update-style.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::didFinishTransition):
        * page/ios/ContentChangeObserver.h:

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

        [ContentChangeObserver] Limit mouseOut dispatching after synthetic click to YouTube.com
        https://bugs.webkit.org/show_bug.cgi?id=199497
        <rdar://problem/52361019>

        Reviewed by Wenson Hsieh.

        r242798 introduced synthetic mouseOut dispatching soon after sythentic click to dismiss certain type of content (e.g. video control bar on YouTube).
        However on many sites, it resulted in dismissing useful content, like menu panes and other, non-clickable but informative content.
        This patch limits the mouseOut dispatching to YouTube.com.

        Test: fast/events/touch/ios/content-observation/mouse-out-event-should-not-fire-on-click.html

        * page/Quirks.cpp:
        (WebCore::Quirks::needsYouTubeMouseOutQuirk const):
        * page/Quirks.h:
        * page/Settings.yaml:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setShouldDispatchSyntheticMouseOutAfterSyntheticClick):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

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

        Unreviewed, rolling out r247127.

        Broke the watchOS build.

        Reverted changeset:

        "[WHLSL] Remove the phase resolveCallsInFunctions"
        https://bugs.webkit.org/show_bug.cgi?id=199474
        https://trac.webkit.org/changeset/247127

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

        Some layers inside overflow:scroll don't move back to correct positions when the contents are shrunk
        https://bugs.webkit.org/show_bug.cgi?id=199464
        rdar://problem/52613285

        Reviewed by Sam Weinig.
        
        When an overflow scroller's content shrink and it becomes non-scrollable, the 'boundsOrigin' in
        the ancestor clipping stacks of related layers wouldn't get reset to zero, leaving layers in
        the wrong place, so always set boundsOrigin to zero on the clipping layers of non-overflow entries
        in the ancestor clipping stack.

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

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

2019-07-04  Konstantin Tokarev  <annulen@yandex.ru>

        HyphenationLibHyphen: Include GLib-related headers only for PLATFORM(GTK)
        https://bugs.webkit.org/show_bug.cgi?id=199469

        Reviewed by Michael Catanzaro.

        Also added compile guard for a couple of functions used only in GTK port.

        * platform/text/hyphen/HyphenationLibHyphen.cpp:

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

        [MSE] Add more debug and error logging
        https://bugs.webkit.org/show_bug.cgi?id=199473
        <rdar://problem/52615882>

        Reviewed by Jer Noble.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::provideMediaData): Log if we don't enqueue every buffer.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::playInternal): Log if we return
        without starting playback.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample): Log if 
        prerollDecodeWithCompletionHandler fails.

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

        RELEASE_ASSERT in WebCore: WebCore::ScrollingStateTree::insertNode()
        https://bugs.webkit.org/show_bug.cgi?id=199479
        rdar://problem/52392556

        Reviewed by Zalan Bujtas.
        
        Certain compositing tree updates could leave a layer with a ScrollingProxy role, but having an
        AncestorClippingStack with no overflow scrolling layers - for example, a related scroller could become
        scrollable, but we failed to mark the layer with the ancestor clippings stack as needing a geometry update.

        When this happened updateScrollingNodeForScrollingProxyRole() would return 0, causing the next child to be
        inserted with a parent of 0 (which should only happen for the root), and triggering a release assert in
        ScrollingStateTree::insertNode().

        Fix by ensuring that updateScrollingNodeForScrollingProxyRole() always returns the existing parentNodeID if we
        don't have a new node to insert.

        Test: scrollingcoordinator/scrolling-tree/scrolling-proxy-with-no-scrolling-layer.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAncestorClippingStack):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollingNodeForScrollingProxyRole):

2019-07-03  Konstantin Tokarev  <annulen@yandex.ru>

        RenderLayerCompositor.cpp should include RenderImage.h
        https://bugs.webkit.org/show_bug.cgi?id=199478

        Reviewed by Michael Catanzaro.

        * rendering/RenderLayerCompositor.cpp:

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

        [WHLSL] Remove the phase resolveCallsInFunctions
        https://bugs.webkit.org/show_bug.cgi?id=199474

        Reviewed by Myles C. Maxfield.

        This pass only stores into each property access and call expression vectors of all the functions it might be calling, for use by the Checker afterwards.
        But the checker is perfectly able to compute a pointer to these vectors by itself.
        So by removing this pass, we gain the following:
        - One less pass over the AST
        - No need to copy these vectors (which can be large for heavily overloaded functions, of which there are quite a few in the stdlib)
        - No need to have these vectors in the expressions, saving 24 bytes per CallExpression and 72 bytes per PropertyAccessExpression
        - No need to allocate and then destroy these vectors.

        No new tests as there is no intended functional change.

        * Modules/webgpu/WHLSL/AST/WHLSLCallExpression.h:
        (WebCore::WHLSL::AST::CallExpression::castReturnType):
        * Modules/webgpu/WHLSL/AST/WHLSLPropertyAccessExpression.h:
        * Modules/webgpu/WHLSL/WHLSLAutoInitializeVariables.cpp:
        (WebCore::WHLSL::AutoInitialize::visit):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::resolveFunction):
        (WebCore::WHLSL::Checker::finishVisiting):
        (WebCore::WHLSL::Checker::visit):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:
        (WebCore::WHLSL::NameResolver::NameResolver):
        (WebCore::WHLSL::NameResolver::visit):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.h:
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        (WebCore::WHLSL::prepareShared):

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

        [WHLSL] Make the destructor of VariableDeclaration non-virtual
        https://bugs.webkit.org/show_bug.cgi?id=199460

        Reviewed by Myles C. Maxfield.

        Three steps:
        - Remove WHLSL::AST::Value, inlining it into its children (it is trivial, it just has one field m_origin with a getter and nothing else)
        - Mark WHLSL::AST::VariableDeclaration final
        - Now that it inherits from nothing and nothing can inherit from it, there is no reason for it to have any virtual method, including its destructor.

        This not only saves 8 bytes from every variable declaration (for the virtual table pointer), it also should make destructing the AST at the end of compilation a bit faster by removing the virtual destructor call.

        No new tests as there is no intended functional change.

        * Modules/webgpu/WHLSL/AST/WHLSLAST.h:
        * Modules/webgpu/WHLSL/AST/WHLSLExpression.h:
        (WebCore::WHLSL::AST::Expression::Expression):
        (WebCore::WHLSL::AST::Expression::origin const):
        * Modules/webgpu/WHLSL/AST/WHLSLStatement.h:
        (WebCore::WHLSL::AST::Statement::Statement):
        (WebCore::WHLSL::AST::Statement::origin const):
        * Modules/webgpu/WHLSL/AST/WHLSLValue.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclaration.h:
        * Modules/webgpu/WHLSL/WHLSLParser.h:
        * WebCore.xcodeproj/project.pbxproj:

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

        Only allow fetching and removing session credentials from WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=199385

        Reviewed by Alex Christensen.

        Fetch and remove only session credentials from NSURLCredentialStorage.

        Modified existing API tests: WKWebsiteDataStore.FetchPersistentCredentials

        * platform/network/CredentialStorage.cpp:
        (WebCore::CredentialStorage::originsWithCredentials const):
        (WebCore::CredentialStorage::originsWithSessionCredentials):
        (WebCore::CredentialStorage::removeSessionCredentialsWithOrigins):
        (WebCore::CredentialStorage::clearSessionCredentials):
        * platform/network/CredentialStorage.h:
        * platform/network/mac/CredentialStorageMac.mm:
        (WebCore::CredentialStorage::originsWithSessionCredentials):
        (WebCore::CredentialStorage::removeSessionCredentialsWithOrigins):
        (WebCore::CredentialStorage::clearSessionCredentials):
        (WebCore::CredentialStorage::originsWithPersistentCredentials): Deleted.

2019-07-03  Said Abou-Hallawa  <sabouhallawa@apple.com>

        The destructor of CSSAnimationControllerPrivate must explicitly clear the composite animations
        https://bugs.webkit.org/show_bug.cgi?id=199415

        Reviewed by Simon Fraser.

        After the destructor of CSSAnimationControllerPrivate exists, the non
        static members are deleted. When the HashMap m_compositeAnimations is
        deleted, its entries are deleted. The destructor of CompositeAnimation
        calls the method CSSAnimationControllerPrivate::animationWillBeRemoved()
        back through its back reference m_animationController. The non static
        members of CSSAnimationControllerPrivate are being deleted and it is
        incorrect to try to use any of these members after exiting the destructor.

        We need to explicitly clear the composite animations before exiting the 
        destructor of CSSAnimationControllerPrivate.

        * page/animation/CSSAnimationController.cpp:
        (WebCore::CSSAnimationControllerPrivate::~CSSAnimationControllerPrivate):

2019-07-03  Jer Noble  <jer.noble@apple.com>

        HTMLMediaElement can hold onto display sleep assertion while process is suspended.
        https://bugs.webkit.org/show_bug.cgi?id=199471
        <rdar://problem/52124320>

        If the WebContent process is suspended before HTMLMediaElement gets a callback telling it
        that the MediaPlayer has stopped playing, the SleepDisabler may stay set (and hold a display
        or system sleep assertion) for the entire duration the process is suspended, causing excess
        power drain.

        Add a PlatformMediaSessionClient method (and an implementation in HTMLMediaElement) which will
        be called during the preperation for process suspension, and in this callback, clear the
        SleepDisabler token.

        Reviewed by Eric Carlson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::shouldDisableSleep const):
        (WebCore::HTMLMediaElement::processIsSuspendedChanged):
        * html/HTMLMediaElement.h:
        * platform/audio/PlatformMediaSession.h:
        (WebCore::PlatformMediaSessionClient::processIsSuspendedChanged):
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::processWillSuspend):
        (WebCore::PlatformMediaSessionManager::processDidResume):
        * platform/audio/PlatformMediaSessionManager.h:
        (WebCore::PlatformMediaSessionManager::processIsSuspended const):

2019-07-03  Jonathan Bedard  <jbedard@apple.com>

        [Catalina] Enable WebKit build
        https://bugs.webkit.org/show_bug.cgi?id=199209

        Reviewed by Darin Adler.

        No new tests, Catalina test expectations will be migrated in the near future.

        * WebCorePrefix.h: Exclude the header which declares SecTrustedApplicationCreateFromPath unavailable on Mac.
        * crypto/mac/SerializedCryptoKeyWrapMac.mm: Ensure that we define SecTrustedApplicationCreateFromPath
        before other headers declare it unavailable on Mac.

2019-07-02  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Standard library is too big to directly include in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=198186
        <rdar://problem/51288898>

        Reviewed by Saam Barati.

        This patch adds almost the entire remainder of the standard library. There are a few
        pieces missing:
        - step() because of https://bugs.webkit.org/show_bug.cgi?id=199289
        - sign() also because of https://bugs.webkit.org/show_bug.cgi?id=199289
        - faceforward() because it calls sign()
        - Some of the more rarely-used texturing functions (e.g. Gather()) https://bugs.webkit.org/show_bug.cgi?id=195813
        - RWTextures https://bugs.webkit.org/show_bug.cgi?id=198985

        There were two problems with adding so many standard library functions:
        - We didn't want to increase the WebCore binary size that much
        - Compiling all the functions at runtime took 7 seconds, which is much too long

        This patch addresses the first problem by gzipping the standard library before including it in the binary.
        At runtime, we use libcompression to unzip it.

        To address the second problem, we did some analysis and found that 14% of that 7 seconds was simply
        destroying all the AST nodes. Even if we eliminated all processing of the AST, simply having the AST
        of the entire standard library built and destroyed would still be too slow. Therefore, this patch limits
        which parts of the standard library get parsed in the first place. All the functions in the standard library
        file are sorted by name, and each group of functions with the same name are preceeded by a comment of the
        form /* Functions named xyz */. At build time, a Python script looks for all these comments, and builds a
        map from function name to character offset inside the file where those functions begin. At run time, we
        parse the user program first, look for all function calls within it, and look up those function call names
        in the map to see which part of the standard library holds those functions. We then parse just that part.
        Because the standard library can call other functions in the standard library, we do this in a loop until
        we have exhausted all the functions.

        Covered by existing tests.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make: gzip the standard library, and add a build step to generate the offset map.
        * Modules/webgpu/WHLSL/AST/WHLSLCallExpression.h:
        (WebCore::WHLSL::AST::CallExpression::setOverloads):
        (WebCore::WHLSL::AST::CallExpression::function): Every caller of this ASSERT()s the result. Might as well
        move the ASSERT() into the function.
        (WebCore::WHLSL::AST::CallExpression::setFunction):
        * Modules/webgpu/WHLSL/Cocoa/WHLSLStandardLibraryUtilities.cpp: Added.
        (WebCore::WHLSL::decompressStandardLibrary): Use libcompression. This is why this file is in a Cocoa/
        subfolder, and is listed in SourcesCocoa.txt instead of Sources.txt.
        (WebCore::WHLSL::decompressAndDecodeStandardLibrary):
        (WebCore::WHLSL::NameFinder::takeFunctionNames):
        (WebCore::WHLSL::includeStandardLibrary): Include only the bits of the standard library which are relevant,
        as described above.
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp: Only emit MSL code for functions which are actually
        reached. The MSL compiler is a significant amount of our compile time, so reducing the size of the emitted
        program can significantly improve compile times.
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        (WebCore::WHLSL::Metal::sharedMetalFunctions):
        (WebCore::WHLSL::Metal::metalFunctions):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::writeNativeFunction):
        - Change how load() and store() are written. We need explicit functions because we have explicit atomic
          types, which HLSL doesn't have. load() and store() aren't present in HLSL.
        - Delete f16tof32 because they're probably not important and are not obvious how to implement. We can re-add
          them again later if necessary.
        - Various fixes to make us generate the correct MSL code for each standard library function.
        * Modules/webgpu/WHLSL/WHLSLBuildStandardLibraryFunctionMap.py: Added. Build the function map as described
        above.
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::resolveByInstantiation): Previously, the standard library included an operator== for two
        pointers. However, that function should be generated by the compiler instead. This fixes the bug in the
        compiler which allows the compiler to correctly generate the right function. This also prompted me to file
        https://bugs.webkit.org/show_bug.cgi?id=199335
        (WebCore::WHLSL::checkOperatorOverload):
        (WebCore::WHLSL::Checker::visit):
        * Modules/webgpu/WHLSL/WHLSLFunctionStageChecker.cpp: Update to the new function() signature.
        * Modules/webgpu/WHLSL/WHLSLLexer.h: Add a new position() method to the lexer. This isn't actually used
        in this patch, but it's useful when doing some analysis during parsing. 
        (WebCore::WHLSL::Lexer::Lexer):
        (WebCore::WHLSL::Lexer::consumeToken):
        (WebCore::WHLSL::Lexer::peek const):
        (WebCore::WHLSL::Lexer::peekFurther const):
        (WebCore::WHLSL::Lexer::position const):
        (WebCore::WHLSL::Lexer::state const):
        (WebCore::WHLSL::Lexer::setState):
        (WebCore::WHLSL::Lexer::isFullyConsumed const): Fixes a bug where isFullyConsumed() might return true even
        when there is a token in the ring buffer.
        (WebCore::WHLSL::Lexer::peek): Deleted.
        (WebCore::WHLSL::Lexer::peekFurther): Deleted.
        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:
        (WebCore::WHLSL::NameResolver::visit): Drive-by partial fix of https://bugs.webkit.org/show_bug.cgi?id=199347
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp: Call includeStandardLibrary().
        (WebCore::WHLSL::prepareShared):
        * Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp:
        * Modules/webgpu/WHLSL/WHLSLRecursionChecker.cpp:
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:
        * Modules/webgpu/WHLSL/WHLSLStandardLibraryFunctionMap.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/WHLSLRecursionChecker.cpp.
        * Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/WHLSLRecursionChecker.cpp.
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-07-03  Jer Noble  <jer.noble@apple.com>

        Exception thrown from -[AVSampleBufferRenderSynchronizer addRenderer:], not a valid renderer.
        https://bugs.webkit.org/show_bug.cgi?id=199419
        <rdar://problem/52141139>

        Reviewed by Eric Carlson.

        Sometimes, -[AVSampleBufferDisplayLayer init] will return nil. When that happens, passing a nil
        pointer to -addRenderer: will throw an exception.

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

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

        [WHLSL] "Semantic" should be held by a unique_ptr, not an Optional
        https://bugs.webkit.org/show_bug.cgi?id=199462

        Reviewed by Myles C. Maxfield.

        Most StructureElement, FunctionDeclaration and (especially) VariableDeclaration don't have a 'Semantic' field.
        Using an Optional<Semantic> to represent this is a major memory waste, as Semantic is 56 bytes, so Optional<Semantic> is 64 bytes!
        Putting one level of indirection through a unique_ptr thus saves 56 bytes for each VariableDeclaration (and FunctionDeclaration and StructureElement) that does not have a Semantic,
        at the low cost of one pointer dereference when accessing the field for those that have one.

        This patch also reorders the fields of FunctionDefinition to save another 8 bytes.

        No new tests as there is no intended functional change.

        * Modules/webgpu/WHLSL/AST/WHLSLFunctionDeclaration.h:
        (WebCore::WHLSL::AST::FunctionDeclaration::FunctionDeclaration):
        (WebCore::WHLSL::AST::FunctionDeclaration::semantic):
        * Modules/webgpu/WHLSL/AST/WHLSLReadModifyWriteExpression.h:
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::ReadModifyWriteExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLStructureElement.h:
        (WebCore::WHLSL::AST::StructureElement::StructureElement):
        (WebCore::WHLSL::AST::StructureElement::semantic):
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclaration.h:
        (WebCore::WHLSL::AST::VariableDeclaration::VariableDeclaration):
        (WebCore::WHLSL::AST::VariableDeclaration::semantic):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::resolveWithOperatorAnderIndexer):
        (WebCore::WHLSL::resolveWithOperatorLength):
        (WebCore::WHLSL::resolveWithReferenceComparator):
        * Modules/webgpu/WHLSL/WHLSLGatherEntryPointItems.cpp:
        (WebCore::WHLSL::Gatherer::visit):
        (WebCore::WHLSL::gatherEntryPointItems):
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parseSemantic):
        * Modules/webgpu/WHLSL/WHLSLParser.h:
        * Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp:
        (WebCore::WHLSL::preserveVariableLifetimes):
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        (WebCore::WHLSL::wrapAnderCallArgument):
        (WebCore::WHLSL::modify):
        (WebCore::WHLSL::PropertyResolver::visit):
        * 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-07-03  Robin Morisset  <rmorisset@apple.com>

        [WHLSL] WHLSL::AST::Node is useless
        https://bugs.webkit.org/show_bug.cgi?id=199391

        Reviewed by Dean Jackson.

        It has no member, no non-trivial method, and we never access an AST node completely generically.
        So WHLSL::AST::Node can be removed, as a first step towards removing the virtual table pointer from most AST nodes (and avoiding a virtual destructor call at the end of the compiler).

        No new test because there is no functional change.

        * Modules/webgpu/WHLSL/AST/WHLSLAST.h:
        * Modules/webgpu/WHLSL/AST/WHLSLBaseFunctionAttribute.h:
        * Modules/webgpu/WHLSL/AST/WHLSLBaseSemantic.h:
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationMember.h:
        * Modules/webgpu/WHLSL/AST/WHLSLFunctionDeclaration.h:
        * Modules/webgpu/WHLSL/AST/WHLSLNamedType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLReplaceWith.h: Renamed from Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLNode.h.
        (WebCore::WHLSL::AST::replaceWith):
        * Modules/webgpu/WHLSL/AST/WHLSLStructureElement.h:
        * Modules/webgpu/WHLSL/AST/WHLSLType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLTypeDefinition.h:
        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLValue.h:
        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:
        * Modules/webgpu/WHLSL/WHLSLParser.h:
        * Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp:
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        * WebCore.xcodeproj/project.pbxproj:

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

        Strengthen updating/removing of registrations from the database
        https://bugs.webkit.org/show_bug.cgi?id=199450
        rdar://problem/51891395

        Reviewed by Chris Dumez.

        SWServerWorker is ref counted and has a ref to its SWServer.
        There is thus a possibility for SWServerWorker to live longer than its SWServer.
        To mitigate this, have SWServerWorker use a WeakPtr<SWServer> and
        check whether SWServer is null when receiving messages from WebProcess.
        Make also sure that RegistrationStore updated registration map does not get corrupted by checking
        the registration keys explicitly.

        Covered by existing tests.

        * workers/service/ServiceWorkerRegistrationKey.h:
        (WebCore::ServiceWorkerRegistrationKey::operator!= const):
        (WebCore::ServiceWorkerRegistrationKey::isEmpty const):
        * workers/service/server/RegistrationStore.cpp:
        (WebCore::RegistrationStore::updateRegistration):
        (WebCore::RegistrationStore::removeRegistration):
        (WebCore::RegistrationStore::addRegistrationFromDatabase):
        * workers/service/server/RegistrationStore.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::workerByID const):
        (WebCore::SWServer::removeRegistration):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::SWServerWorker):
        (WebCore::m_scriptResourceMap):
        (WebCore::SWServerWorker::contextData const):
        (WebCore::SWServerWorker::terminate):
        (WebCore::SWServerWorker::scriptContextFailedToStart):
        (WebCore::SWServerWorker::scriptContextStarted):
        (WebCore::SWServerWorker::didFinishInstall):
        (WebCore::SWServerWorker::didFinishActivation):
        (WebCore::SWServerWorker::contextTerminated):
        (WebCore::SWServerWorker::findClientByIdentifier const):
        (WebCore::SWServerWorker::matchAll):
        (WebCore::SWServerWorker::userAgent const):
        (WebCore::SWServerWorker::claim):
        (WebCore::SWServerWorker::skipWaiting):
        (WebCore::SWServerWorker::setHasPendingEvents):
        (WebCore::SWServerWorker::setState):
        * workers/service/server/SWServerWorker.h:
        (WebCore::SWServerWorker::server):

2019-07-03  Sam Weinig  <weinig@apple.com>

        Adopt simple structured bindings in more places
        https://bugs.webkit.org/show_bug.cgi?id=199247

        Reviewed by Alex Christensen.

        Replaces simple uses of std::tie() with structured bindings. Does not touch
        uses of std::tie() that are not initial declarations, use std::ignore or in
        case where the binding is captured by a lambda, as structured bindings don't
        work for those cases yet.

        * css/StyleResolver.cpp:
        (WebCore::checkForOrientationChange):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowInlineScript const):
        (WebCore::ContentSecurityPolicy::allowInlineStyle const):
        * platform/graphics/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/PathUtilities.cpp:
        (WebCore::PathUtilities::pathWithShrinkWrappedRectsForOutline):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::createFontPlatformData):
        (WebCore::FontCache::systemFallbackForCharacters):
        (WebCore::FontCache::lastResortFallbackFont):
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.cpp:
        (WebCore::FontFamilySpecificationCoreText::fontRanges const):
        * platform/network/SocketStreamHandleImpl.cpp:
        (WebCore::cookieDataForHandshake):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionState):
        (WebCore::createMarkedTextFromSelectionInBox):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintSelectionBackground):
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::constructAttributeName const):

2019-07-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (iOS 13): Tapping an element with a click event handler no longer clears the selection
        https://bugs.webkit.org/show_bug.cgi?id=199430

        Reviewed by Tim Horton.

        After <trac.webkit.org/r245067>, we no longer immediately clear the text selection when recognizing a single tap
        in WKContentView, and instead only clear it out in the case where the single tap didn't result in a click event
        in the web process. This fixed an issue wherein the text selection would be prematurely cleared when tapping,
        but also made it such that tapping on an element with a click event handler would not cause the selection to
        change, even if preventDefault() is not called on mousedown. On web pages that add a click event listener to
        `document.body`, it's nearly impossible to dismiss text selections by tapping elsewhere in the body.

        On macOS, this works because EventHandler::handleMousePressEventSingleClick contains logic to modify the
        selection when handling a mousedown, as a part of default behavior. However, there is platform-specific logic
        added in <trac.webkit.org/r233311> that avoids changing the selection when handling a synthetic mousedown on
        iOS; this is because we defer to the single tap text interaction gesture on iOS, which (among other things)
        provides additional support for moving the selection to word boundaries, instead of the editing position
        directly under the click.

        However, no such platform-specific text interaction single tap gesture exists for non-editable text, so there's
        no reason we need to bail in the case where the root editable element is null. We can fix this bug without
        breaking the fix in r233311 by matching macOS behavior and not bailing via early return in the case where the
        single tap would move selection into non-editable text.

        Tests: editing/selection/ios/clear-selection-after-tapping-on-element-with-click-handler.html
               editing/selection/ios/persist-selection-after-tapping-on-element-with-mousedown-handler.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick):

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

        Unreviewed, rolling out r246616.

        Caused http/tests/inspector/network/har/har-page.html to fail
        on Catalina.

        Reverted changeset:

        "Web Inspector: Network: replace CFNetwork SPI with new API
        where able"
        https://bugs.webkit.org/show_bug.cgi?id=198762
        https://trac.webkit.org/changeset/246616

2019-07-03  Andres Gonzalez  <andresg_22@apple.com>

        Safari hanging while loading pages - WebCore::AccessibilityRenderObject::visiblePositionRangeForLine.
        https://bugs.webkit.org/show_bug.cgi?id=199434
        <rdar://problem/52475140>

        Reviewed by Chris Fleizach.

        Tests were disabled until underlying bug is fixed.

        Rolling out a workaround for CharacterIterator::advance bug because it
        seems to be causing a hang in Safari.
        * editing/Editing.cpp:
        (WebCore::visiblePositionForIndexUsingCharacterIterator):

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

        REGRESSION (r246723): ScrollingTreeOverflowScrollProxyNode::m_overflowScrollingNodeID is uninitialized sometimes
        https://bugs.webkit.org/show_bug.cgi?id=199432

        Reviewed by Antti Koivisto.
        
        I noticed while debugging rdar://problem/52291642 that m_overflowScrollingNodeID was uninitialized in
        ScrollingTreeOverflowScrollProxyNode. This could lead to the wrong node being found by m_scrollingTree->nodeForID(),
        which could result in type confusion bugs.
        
        This can happen with negative z-order layers when we fail to find their related scrolling tree node
        on the first pass.

        * page/scrolling/cocoa/ScrollingTreeOverflowScrollProxyNode.h:

2019-07-02  Zan Dobersek  <zdobersek@igalia.com>

        FetchResponse::BodyLoader should not be movable
        https://bugs.webkit.org/show_bug.cgi?id=199380

        Reviewed by Youenn Fablet.

        The FetchResponse::BodyLoader class has a FetchLoader member that is
        initialized in the start() method with the reference of the owning
        FetchResponse::BodyLoader object. This reference doesn't change when
        the FetchResponse::BodyLoader object is moved into a different object
        and the FetchLoader unique_ptr along with it, leading to problems when
        that FetchLoader tries to invoke the FetchLoaderClient methods on the
        FetchResponse::BodyLoader object that's been moved from and is possibly
        already destroyed.

        To avoid this, the FetchResponse::BodyLoader has the move constructor
        removed and is now managed through std::unique_ptr instead of Optional,
        ensuring the FetchResponse::BodyLoader object itself isn't moved around.

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::fetch):
        (WebCore::FetchResponse::BodyLoader::didSucceed):
        (WebCore::FetchResponse::BodyLoader::didFail):
        * Modules/fetch/FetchResponse.h:

2019-07-02  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Assertion fires when animating the 'class' attribute of an SVG element
        https://bugs.webkit.org/show_bug.cgi?id=197372

        Reviewed by Ryosuke Niwa.

        All instances of SVG animated properties have to share a single animVal
        such that once its value is progressed, all the instances will see the
        change. This was not happening for SVGAnimatedPrimitiveProperty. To do
        that we need to:

        -- Introduce the new template class SVGSharedPrimitiveProperty which is
           derived from SVGProperty. This class manages a single primitive value.
        -- Change the type of SVGAnimatedPrimitiveProperty::m_animVal to
           RefPtr<SVGSharedPrimitiveProperty<PropertyType>>. The master property
           creates it and all the instances hold references to the same pointer.
        -- Change the type of SVGAnimatedPrimitiveProperty::m_baseVal to
           Ref<SVGSharedPrimitiveProperty<PropertyType>> for simplicity and get
           rid of SVGAnimatedPrimitiveProperty::m_state.
        -- Override the virtual methods instanceStartAnimation() and
           instanceStopAnimation() of SVGAnimatedPrimitiveProperty.
        -- SVGAnimatedStringAnimator should invalidate the style of the target
           element if attribute name is 'class' and when its animVal changes.

        * WebCore.xcodeproj/project.pbxproj:
        * svg/properties/SVGAnimatedPrimitiveProperty.h:
        (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):
        (WebCore::SVGAnimatedPrimitiveProperty::ensureAnimVal):
        * svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
        * svg/properties/SVGAttributeAnimator.cpp:
        (WebCore::SVGAttributeAnimator::invalidateStyle):
        (WebCore::SVGAttributeAnimator::applyAnimatedStylePropertyChange):
        (WebCore::SVGAttributeAnimator::removeAnimatedStyleProperty):
        * svg/properties/SVGAttributeAnimator.h:
        * svg/properties/SVGSharedPrimitiveProperty.h: Added.
        (WebCore::SVGSharedPrimitiveProperty::create):
        (WebCore::SVGSharedPrimitiveProperty::value const):
        (WebCore::SVGSharedPrimitiveProperty::value):
        (WebCore::SVGSharedPrimitiveProperty::setValue):
        (WebCore::SVGSharedPrimitiveProperty::SVGSharedPrimitiveProperty):

2019-07-02  Andres Gonzalez  <andresg_22@apple.com>

        Enhance support of aria-haspopup per ARIA 1.1 specification.
        https://bugs.webkit.org/show_bug.cgi?id=199216
        <rdar://problem/46221342>

        Reviewed by Chris Fleizach.

        Test button-with-aria-haspopup-role.html was expanded to cover testing
        of new functionality.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::popupValue const): replaces hasPopupValue.
        (WebCore::AccessibilityObject::hasPopupValue const): Deleted.
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::hasPopup const): method rename.
        * accessibility/atk/WebKitAccessible.cpp:
        (webkitAccessibleGetAttributes): method rename.
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityPopupValue]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2019-07-02  Saam Barati  <sbarati@apple.com>

        [WHLSL] Import bitwise bool tests
        https://bugs.webkit.org/show_bug.cgi?id=199093

        Reviewed by Myles C. Maxfield.

        Add standard library functions for:
        - bool bit ops
        - converting from bool to number
        - converting from number to bool

        Test: webgpu/whlsl-bitwise-bool-ops.html

        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:

2019-07-02  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Fix CookieJarCurl::getRawCookie.
        https://bugs.webkit.org/show_bug.cgi?id=199300

        Reviewed by Fujii Hironori.

        On wincairo some cookie information was not displayed in WebInspector's storage tab as
        CookieJarCurl::getRawCookies was calling CookieJarDB::searchCookies with wrong arguments.
        This patch fixes it.

        Test: http/tests/inspector/page/get-cookies.html

        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::CookieJarCurl::getRawCookies const):

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

        [WHLSL] the initializer in VariableDeclaration should be a std::unique_ptr, not Optional<UniqueRef<..>>
        https://bugs.webkit.org/show_bug.cgi?id=199389

        Reviewed by Sam Weinig.

        Optional<UniqueRef<..>> is not only semantically weird (UniqueRef is basically a unique_ptr that promises not to be null), but also inefficient, wasting 8 bytes for the boolean in Optional.
        It is a pattern that appears throughout the AST. In this patch I start by removing it in a fairly simple spot: the initializer for VariableDeclaration.

        No test because there is no intended functional change.

        * Modules/webgpu/WHLSL/AST/WHLSLReadModifyWriteExpression.h:
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::ReadModifyWriteExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclaration.h:
        (WebCore::WHLSL::AST::VariableDeclaration::VariableDeclaration):
        (WebCore::WHLSL::AST::VariableDeclaration::initializer):
        (WebCore::WHLSL::AST::VariableDeclaration::takeInitializer):
        (WebCore::WHLSL::AST::VariableDeclaration::setInitializer):
        * Modules/webgpu/WHLSL/WHLSLAutoInitializeVariables.cpp:
        (WebCore::WHLSL::AutoInitialize::visit):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::resolveWithOperatorAnderIndexer):
        (WebCore::WHLSL::resolveWithOperatorLength):
        (WebCore::WHLSL::resolveWithReferenceComparator):
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parseParameter):
        (WebCore::WHLSL::Parser::parseVariableDeclaration):
        * Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp:
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        (WebCore::WHLSL::wrapAnderCallArgument):
        (WebCore::WHLSL::modify):
        (WebCore::WHLSL::PropertyResolver::visit):
        * 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-07-02  Jer Noble  <jer.noble@apple.com>

        Pipe suport for 'cenc' init data type into CDMFairPlayStreaming
        https://bugs.webkit.org/show_bug.cgi?id=199381

        Reviewed by Eric Carlson.

        Expose the parsing of 'cenc' init data from InitDataRegistry, so it can be used in the
        evaluation steps inside CDMFairPlayStreaming.

        + Add a new method, extractPsshBoxesFromCenc() which returns an optional array of
          unique_ptrs to different types of ISOPSSHBoxes.
        + Add a peekScheme() method to ISOPSSHBox so that we can create the correct subclass
          of ISOPSSHBox from the above method.
        + Remove an extra definition of fairPlaySystemID() from CDMFairPlayStreaming.
        + Add 'cenc' to the list of supported types in CDMPrivateFairPlayStreaming::vaildInitDataTypes().
        + Add support for 'cenc' in CDMPrivateFairPlayStreaming::supportsInitData().
        + Format the 'cenc' init data as an encodec-JSON structure for AVContentKeySession.
        + Update the ISOFairPlayStreamingKeyRequestInfoBox to be a ISOFullBox.
        + Update the box name of ISOFairPlayStreamingInitDataBox.

        * Modules/encryptedmedia/InitDataRegistry.cpp:
        (WebCore::InitDataRegistry::extractPsshBoxesFromCenc):
        (WebCore::InitDataRegistry::extractKeyIDsCenc):
        (WebCore::InitDataRegistry::sanitizeCenc):
        (WebCore::InitDataRegistry::cencName):
        (WebCore::InitDataRegistry::keyidsName):
        (WebCore::InitDataRegistry::webmName):
        (WebCore::extractKeyIDsCenc): Deleted.
        (WebCore::sanitizeCenc): Deleted.
        * Modules/encryptedmedia/InitDataRegistry.h:
        (WebCore::SourceBuffer::changeType):
        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        (WebCore::validInitDataTypes):
        (WebCore::CDMPrivateFairPlayStreaming::supportsInitData const):
        (WebCore::CDMPrivateFairPlayStreaming::fairPlaySystemID): Deleted.
        * platform/graphics/avfoundation/CDMFairPlayStreaming.h:
        * platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:
        (isType):
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::requestLicense):
        * platform/graphics/iso/ISOProtectionSystemSpecificHeaderBox.cpp:
        (WebCore::ISOProtectionSystemSpecificHeaderBox::peekSystemID):
        * platform/graphics/iso/ISOProtectionSystemSpecificHeaderBox.h:

2019-07-02  Daniel Bates  <dabates@apple.com>

        [iOS] Cannot tab cycle through credit card fields on antonsvpatisserie.com checkout page
        https://bugs.webkit.org/show_bug.cgi?id=196053
        <rdar://problem/49093034>

        Reviewed by Wenson Hsieh.

        Remove the iOS override for isKeyboardFocusable() so that the focus controller allows
        iframes to be keyboard focusable.

        Tests: fast/events/ios/tab-cycle.html
               fast/events/ios/tab-into-text-field-inside-iframe.html

        * html/HTMLIFrameElement.h:

2019-07-02  Daniel Bates  <dabates@apple.com>

        Left and right option key has Unidentified key identifier
        https://bugs.webkit.org/show_bug.cgi?id=199392
        <rdar://problem/52497604>

        Reviewed by Wenson Hsieh.

        Fix up switch case for left Option key and add a case statement for the right Option key.

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

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

        Crash when adding inline stylesheet to shadow tree in document with null base URL
        https://bugs.webkit.org/show_bug.cgi?id=199400

        Reviewed by Zalan Bujtas.

        We compute CSSParserContextHash for the inline stylesheet cache but that hits a nullptr crash
        if the document happens to have null base URL (which is uncommon but possible).

        Test: fast/shadow-dom/stylesheet-in-shadow-without-base-url-crash.html

        * css/parser/CSSParserContext.h:
        (WebCore::CSSParserContextHash::hash):

        Null check the base URL (like other strings), it is a valid case.

2019-07-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debug: "Reset Web Inspector" should also clear the saved window size and attachment side
        https://bugs.webkit.org/show_bug.cgi?id=198956

        Reviewed by Matt Baker.

        * inspector/InspectorFrontendClient.h:

        * inspector/InspectorFrontendClientLocal.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::Settings::deleteProperty): Added.
        (WebCore::InspectorFrontendClientLocal::resetWindowState): Added.

        * inspector/InspectorFrontendHost.idl:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::reset): Added.

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

        [Text autosizing] [iPadOS] AutosizeStatus::idempotentTextSize returns the computed font size in certain cases.
        https://bugs.webkit.org/show_bug.cgi?id=199382
        <rdar://problem/52483097>

        Reviewed by Wenson Hsieh.

        Adjust the font size on the style only when the autosized value is different from the computed value. 

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

2019-07-01  Chris Dumez  <cdumez@apple.com>

        It should not be possible to trigger a load while in the middle of restoring a page in PageCache
        https://bugs.webkit.org/show_bug.cgi?id=199190
        <rdar://problem/52114552>

        Reviewed by Brady Eidson.

        Test: http/tests/security/navigate-when-restoring-cached-page.html

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::open):
        Stop attaching the cached document before calling FrameLoader::open() given that the previous document
        is still attached to the frame at this point. This avoids having 2 documents attached to the same frame
        during a short period of time.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::open):
        We now attach the cached document to the frame *after* calling FrameLoader::clear(), which means that
        the previous document now has been detached from this frame.

        (WebCore::FrameLoader::detachChildren):
        As per the HTML specification [1], an attempt to navigate should fail if the prompt to unload algorithm
        is being run for the active document of browsingContext. Note that the "prompt to unload" algorithm [2]
        includes firing the 'unload' event in the current document and in all the documents in the subframes.
        As a result, FrameLoader::detachChildren() is the right prevent such navigations. We were actually trying
        to do this via the SubframeLoadingDisabler stack variable inside detachChildren(). The issue is that this
        only prevents navigation in the subframes (i.e. <iframe> elements), not the main frame. As a result,
        script would be able to navigate the top-frame even though detachChildren() is being called on the top
        frame. To address the issue, I now create a NavigationDisabler variable in the scope of detachChildren()
        when detachChildren() is called on the top frame. NavigationDisabler prevents all navigations within the
        page, including navigations on the main/top frame.

        [1] https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigate
        [2] https://html.spec.whatwg.org/multipage/browsing-the-web.html#prompt-to-unload-a-document

2019-07-01  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r246844.

        Broke 12 tests in imported/w3c/web-platform-
        tests/pointerevents/

        Reverted changeset:

        "[Pointer Events] Respect pointer capture when dispatching
        mouse boundary events and updating :hover"
        https://bugs.webkit.org/show_bug.cgi?id=198999
        https://trac.webkit.org/changeset/246844

2019-07-01  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r246849.

        12 tests broken in r246844 require this to be rolled out.

        Reverted changeset:

        "[Pointer Events] Respect pointer capture when dispatching
        mouse boundary events and updating :hover"
        https://bugs.webkit.org/show_bug.cgi?id=198999
        https://trac.webkit.org/changeset/246849

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

        Null check provisionalItem in FrameLoader::continueLoadAfterNavigationPolicy
        https://bugs.webkit.org/show_bug.cgi?id=199327
        <rdar://problem/48262384>

        Reviewed by Darin Adler.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        Sometimes provisionalItem is null.  Let's not crash.

2019-07-01  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r246958.

        Broke inspector/dom/getAccessibilityPropertiesForNode.html

        Reverted changeset:

        "Enhance support of aria-haspopup per ARIA 1.1 specification."
        https://bugs.webkit.org/show_bug.cgi?id=199216
        https://trac.webkit.org/changeset/246958

2019-07-01  Brady Eidson  <beidson@apple.com>

        More judiciously handle clearing/creation of DOMWindows for new Documents.
        <rdar://problem/51665406> and https://bugs.webkit.org/show_bug.cgi?id=198786

        Reviewed by Chris Dumez.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):

        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::replaceDocumentWithResultOfExecutingJavascriptURL): Rename for clarity.
        (WebCore::DocumentWriter::begin): Handle DOMWindow taking/creation inside FrameLoader::clear via a lambda. 
        (WebCore::DocumentWriter::replaceDocument): Deleted.
        * loader/DocumentWriter.h:

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear): Take a "handleDOMWindowCreation" lambda to run after clearing the previous document.
        * loader/FrameLoader.h:

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

        [iPadOS] Tapping on the bottom part of youtube video behaves as if controls were visible
        https://bugs.webkit.org/show_bug.cgi?id=199349
        <rdar://problem/51955744>

        Reviewed by Simon Fraser.

        Synthetic click event should not be dispatched to a node that is initially hidden (by opacity: 0) and becomes visible by the touchStart event.
        While this behaves different from macOS where opacity: 0; content is "clickable", it impoves usability on certain sites like YouTube.com. 

        Test: fast/events/touch/ios/content-observation/opacity-change-happens-on-touchstart-with-transition2.html

        * dom/Node.cpp:
        (WebCore::Node::defaultEventHandler):
        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::isConsideredHidden):
        (WebCore::ContentChangeObserver::reset):
        (WebCore::isConsideredHidden): Deleted.
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::setHiddenTouchTarget):
        (WebCore::ContentChangeObserver::resetHiddenTouchTarget):
        (WebCore::ContentChangeObserver::hiddenTouchTarget const):

2019-06-28  Brent Fulgham  <bfulgham@apple.com>

        [FTW] Build WebCore
        https://bugs.webkit.org/show_bug.cgi?id=199199

        Reviewed by Don Olmstead.

        Make some minor corrections needed to get FTW WebCore to build and link.

        * PlatformFTW.cmake: Added.
        * platform/graphics/win/GlyphPageTreeNodeDirect2D.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::setURLForRect):
        * platform/graphics/win/PatternDirect2D.cpp:
        * platform/graphics/win/SimpleFontDataDirect2D.cpp:
        * platform/image-decoders/ScalableImageDecoder.cpp:
        (WebCore::ScalableImageDecoder::setTargetContext): Added stub.
        * platform/image-decoders/ScalableImageDecoder.h:
        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::hasCookies):
        (WebCore::CookieJarDB::canAcceptCookie):

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

        iOS: REGRESSION(async scroll): Caret doesn't scroll when scrolling textarea
        https://bugs.webkit.org/show_bug.cgi?id=198217
        <rdar://problem/51097296>

        Reviewed by Simon Fraser.

        Add a ScrollingLayerPositionAction argument to ScrollingTreeScrollingNode::wasScrolledByDelegatedScrolling, and
        avoid bailing early in the case where ScrollingLayerPositionAction::Set is used. See the WebKit ChangeLog for
        more detail.

        Test: editing/selection/ios/update-selection-after-overflow-scroll.html

        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::wasScrolledByDelegatedScrolling):
        * page/scrolling/ScrollingTreeScrollingNode.h:

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

        REGRESSION(r240047): Overflow scrollers on WK1 fail to update their content size when it changes
        https://bugs.webkit.org/show_bug.cgi?id=199360
        <rdar://problem/51643386>

        Reviewed by Simon Fraser.

        r240047 replaced didCommitChangesForLayer() mechanism by a more narrow didChangePlatformLayerForLayer.
        Unfortunately on WK1 we relied on scroll layers being invalidated after every size (and scrollbar) change.
        Without this invalidation we don't call WebChromeClientIOS::addOrUpdateScrollingLayer and the UIKit delegate
        that resizes the UIScrollView content.

        Fix by removing the scroll layer invalidation mechanism from LegacyWebKitScrollingLayerCoordinator completely and instead
        simply update all scroll layers after commit. The UIKit delegate doesn't do any significant work if nothing changes,
        this was not a very meaninful optimization.

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

        Update all scroll layers after flush (similar to viewport constrained layers).

        (WebCore::RenderLayerCompositor::didChangePlatformLayerForLayer):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::updateScrollingLayer):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::addScrollingLayer):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::removeScrollingLayer):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::registerScrollingLayersNeedingUpdate): Deleted.
        (WebCore::LegacyWebKitScrollingLayerCoordinator::didChangePlatformLayerForLayer): Deleted.
        * rendering/RenderLayerCompositor.h:

2019-07-01  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Cannot play Bert's Bytes radio stream from http://radio.dos.nl/
        https://bugs.webkit.org/show_bug.cgi?id=198376

        Reviewed by Xabier Rodriguez-Calvar.

        The delayed startup was due to a mix of buffering feedback
        messages not handled correctly by the player. We were handling
        download and streaming buffering metrics without distinction.
        Range requests (used for seeking) were also triggering on-disk
        buffering in some cases. The buffering percentage estimation based
        on network read position was not working either because uint64_t
        division doesn't return a floating point value.

        No new tests, existing media tests cover this patch.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::commitLoad):
        (WebCore::MediaPlayerPrivateGStreamer::play):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::processBufferingStats):
        (WebCore::MediaPlayerPrivateGStreamer::updateBufferingStatus):
        (WebCore::MediaPlayerPrivateGStreamer::fillTimerFired):
        (WebCore::MediaPlayerPrivateGStreamer::maxTimeLoaded const):
        (WebCore::MediaPlayerPrivateGStreamer::didLoadingProgress const):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        (WebCore::MediaPlayerPrivateGStreamer::updateDownloadBufferingFlag):
        (WebCore::MediaPlayerPrivateGStreamer::setPreload):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkitWebSrcReset):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:

2019-07-01  Miguel Gomez  <magomez@igalia.com>

        REGRESSION(r246963) GTK's debug build is broken
        https://bugs.webkit.org/show_bug.cgi?id=199358

        Reviewed by Michael Catanzaro.

        Add traits to be able to downcast AnimatedBackingStoreClient.

        * platform/graphics/nicosia/NicosiaAnimatedBackingStoreClient.h:
        (Nicosia::AnimatedBackingStoreClient::AnimatedBackingStoreClient):
        (Nicosia::AnimatedBackingStoreClient::type const):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):

2019-07-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK build with GSTREAMER_GL disabled after r246710

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2019-07-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebSockets: add support for sending blob messages when using web sockets platform APIs
        https://bugs.webkit.org/show_bug.cgi?id=199189

        Reviewed by Youenn Fablet.

        * Headers.cmake: Add missing headers.

2019-07-01  Miguel Gomez  <magomez@igalia.com>

        [WPE][GTK] Content disappearing when using CSS transforms
        https://bugs.webkit.org/show_bug.cgi?id=181757

        Reviewed by Žan Doberšek.

        During each layer flush, create an AnimatedBackingStoreClient instance for each layer that
        has a backingStore and is to be animated, and send that client to the appropriate
        TextureMapperLayer on the compositor thread. During each frame rendering, the client will
        use the future layer position (currently 50ms in the future) to check whether new tiles are
        required to keep the animation ongoing, and notify the appropriate CoordinatedGraphicsLayer so
        it can perform a layer flush and provide new tiles.

        * platform/TextureMapper.cmake:
        * platform/graphics/nicosia/NicosiaAnimatedBackingStoreClient.h: Added.
        * platform/graphics/nicosia/NicosiaPlatformLayer.h:
        (Nicosia::CompositionLayer::flushState):
        * platform/graphics/texmap/TextureMapperAnimation.cpp:
        (WebCore::TextureMapperAnimation::applyKeepingInternalState):
        (WebCore::TextureMapperAnimations::applyKeepingInternalState):
        * platform/graphics/texmap/TextureMapperAnimation.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::computeTransformsRecursive):
        (WebCore::TextureMapperLayer::setAnimatedBackingStoreClient):
        (WebCore::TextureMapperLayer::syncAnimations):
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::~CoordinatedGraphicsLayer):
        (WebCore::clampToContentsRectIfRectIsInfinite):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        (WebCore::CoordinatedGraphicsLayer::requestBackingStoreUpdate):
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

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

        Use separate variables for moving and stationary scrolling relationships in RemoteLayerTreeNode
        https://bugs.webkit.org/show_bug.cgi?id=199348

        Reviewed by Darin Adler.

        * page/scrolling/ScrollingStateStickyNode.cpp:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::activeOverflowScrollProxyNodes):
        (WebCore::ScrollingTree::activePositionedNodes):
        (WebCore::ScrollingTree::nodesWithRelatedOverflow): Deleted.

        Use separate sets for overflow proxies and positioned nodes.
        Use Refs to nodes instead of ids to simplify client code. This doesn't affect lifetimes, these sets are cleared
        at the beginning of each commit.

        * page/scrolling/cocoa/ScrollingTreeOverflowScrollProxyNode.mm:
        (WebCore::ScrollingTreeOverflowScrollProxyNode::commitStateBeforeChildren):
        * page/scrolling/cocoa/ScrollingTreePositionedNode.mm:
        (WebCore::ScrollingTreePositionedNode::commitStateBeforeChildren):

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

        Enhance support of aria-haspopup per ARIA 1.1 specification.
        https://bugs.webkit.org/show_bug.cgi?id=199216
        <rdar://problem/46221342>

        Reviewed by Chris Fleizach.

        Test button-with-aria-haspopup-role.html was expanded to cover testing
        of new functionality.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::popupValue const): replaces hasPopupValue.
        (WebCore::AccessibilityObject::hasPopupValue const): Deleted.
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::hasPopup const): method rename.
        * accessibility/atk/WebKitAccessible.cpp:
        (webkitAccessibleGetAttributes): method rename.
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityPopupValue]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

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

        [LFC] Implement Layout::printLayoutTreeForLiveDocuments
        https://bugs.webkit.org/show_bug.cgi?id=199343
        <rdar://problem/52393047>

        Reviewed by Antti Koivisto.

        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::printLayoutTreeForLiveDocuments):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

2019-06-22  Darin Adler  <darin@apple.com>

        Streamline some string code, focusing on functions that were using substringSharingImpl
        https://bugs.webkit.org/show_bug.cgi?id=198898

        Reviewed by Daniel Bates.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::CSSComputedStyleDeclaration): Take a StringView
        instead of a String argument for the pseudo-element name. This prevents us from having
        to use substringSharingImpl to strip off leading colons.
        (WebCore::CSSComputedStyleDeclaration::create): Moved this function in here since it's
        no longer being inlined.

        * css/CSSComputedStyleDeclaration.h: Moved the create function to no longer be inlined,
        since it's better to have the constructor be inlined in the create function instead.
        Changed the pseudo-element name argument to be a StringView rather than a String.
        Also initialize m_refCount in the class definition.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::parsePseudoElementType): Take a StringView instead of a String.
        * css/CSSSelector.h: Updated for the above change.

        * css/SelectorPseudoTypeMap.h: Change both parse functions to take StringView. Before
        one took a StringImpl and the other used const StringView&, which is not as good as
        StringView.

        * css/makeSelectorPseudoClassAndCompatibilityElementMap.py: Use StringView, not
        const StringView&.

        * css/makeSelectorPseudoElementsMap.py: Use StringView rather than StringImpl.

        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::parsePageSelector): Use a StringView for the pseudo-element
        name. It was already computed as a StringView, but the old code converted it to
        an AtomicString.

        * css/parser/CSSParserSelector.cpp:
        (WebCore::CSSParserSelector::parsePagePseudoSelector): Take a StringView, and
        return a std::unique_ptr.
        (WebCore::CSSParserSelector::parsePseudoElementSelector): Renamed to not mention
        StringView in function name. Take a StringView, not a StringView&. Do the lowercasing
        inside this function rather than having it be a caller responsibility. Don't convert
        from a StringView to an AtomicString before starting to parse; only do it in the
        "unknown/custom" case. Return a std::unique_ptr.
        (WebCore::CSSParserSelector::parsePseudoClassSelector): Ditto.
        * css/parser/CSSParserSelector.h: Make the three parse functions all take a StringView
        and all return a std::unique_ptr. They were already creating objects, but before
        callers just had to know to adopt.
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo): Updated to use improved parse
        functions above.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules const): Updated to use the new
        parsePseudoElementType above and use StringView::substring instead of
        String::substringSharingImpl.

        * platform/Length.cpp:
        (WebCore::newCoordsArray): Local string that is "spacified" can't have any non-Latin-1
        characters, so use LChar instead of UChar.

        * rendering/RenderText.cpp:
        (WebCore::convertNoBreakSpaceToSpace): Renamed for clarity. Also use constexpr
        instead of inline since this is a pure function.
        (WebCore::capitalize): Tighten up logic a bit.

2019-06-29  Simon Fraser  <simon.fraser@apple.com>

        Remove a PLATFORM(IOS_FAMILY) related to repaint offsets in composited scrolling layers
        https://bugs.webkit.org/show_bug.cgi?id=199342

        Reviewed by Zalan Bujtas.

        Code in RenderObject::shouldApplyCompositedContainerScrollsForRepaint() adds VisibleRectContextOption::ApplyCompositedContainerScrolls
        only for iOS, and RenderLayerBacking::setContentsNeedDisplayInRect() subtracts out scroll position for only iOS,
        so remove this iOS-specific code.

        Blame for this code mentions touch event regions, so I tested these but they use absoluteBoundingBoxRect()
        which doesn't hit this code. Still, I added a layout test for touch regions inside scrolled overflow.

        Existing tests exist for repaint inside scrolled overflow.

        Test: fast/events/touch/ios/touch-event-regions/scrolled-overflow.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shouldApplyCompositedContainerScrollsForRepaint): Deleted.
        (WebCore::RenderObject::visibleRectContextForRepaint): Deleted.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::visibleRectContextForRepaint):

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

        iOS WebKit2 find-in-page indicator doesn't move with 'overflow: scroll'
        https://bugs.webkit.org/show_bug.cgi?id=175032
        <rdar://problem/29346482>

        Reviewed by Wenson Hsieh.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::selectionBounds const):
        (WebCore::FrameSelection::revealSelection):
        * editing/FrameSelection.h:
        Make selectionBounds' clipToVisibleContent param an enum class.

        * page/TextIndicator.cpp:
        (WebCore::initializeIndicator):
        Save the un-clipped selection rect; otherwise we'll frequently save 0, 0
        here when finding a match that is off-screen.

2019-06-28  Zalan Bujtas  <zalan@apple.com>

        [Text autosizing][iPadOS] bing.com is hard to read even with boosted text because of the line height
        https://bugs.webkit.org/show_bug.cgi?id=199318
        <rdar://problem/51826096>

        Reviewed by Wenson Hsieh.

        Initial implementation of line height boosting on iPadOs. It enlarges line height in certain cases to improve readability when the text content feels too dense.
        It kicks in only for relatively small text (12px) where it slightly (1.25x) changes the line height to widen the gap between lines.

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

2019-06-28  Alex Christensen  <achristensen@webkit.org>

        Make getHostnamesWithCookies more robust
        https://bugs.webkit.org/show_bug.cgi?id=199334
        <rdar://problem/51860593>

        Reviewed by Brent Fulgham.

        Crash logs suggest either httpCookies is returning a nil cookie or a cookie without a domain.
        This should not happen, but if it does we shouldn't crash.

        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::getHostnamesWithCookies):

2019-06-28  chris fleizach  <cfleizach@apple.com>

        AX: Both convertToNSArray() functions in WebAccessibilityObjectWrapperBase.mm leak every NSMutableArray returned
        https://bugs.webkit.org/show_bug.cgi?id=199306

        Reviewed by David Kilzer.

        Stop leaking every instance of convertToNSArray and return an autoreleased version.
        Remove unneeded casts.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityFindMatchingObjects:]):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (convertToNSArray):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper childrenVectorArray]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2019-06-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Followup to r246931
        https://bugs.webkit.org/show_bug.cgi?id=199331

        Reviewed by Tim Horton.

        Extend the site-specific quirk added in r246931 to *.sharepoint.com, so that it fixes Word for enterprise
        customers as well.

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

2019-06-28  Timothy Hatcher  <timothy@apple.com>

        Rename effectiveAppearanceIsInactive and useInactiveAppearance to better match UIUserInterfaceLevel.
        https://bugs.webkit.org/show_bug.cgi?id=199336
        rdar://problem/52348938

        Reviewed by Tim Horton.

        * css/StyleColor.h:
        * dom/Document.cpp:
        (WebCore::Document::useElevatedUserInterfaceLevel const):
        (WebCore::Document::styleColorOptions const):
        (WebCore::Document::useInactiveAppearance const): Deleted.
        * dom/Document.h:
        * page/Page.cpp:
        (WebCore::Page::effectiveAppearanceDidChange):
        * page/Page.h:
        (WebCore::Page::useElevatedUserInterfaceLevel const):
        (WebCore::Page::useInactiveAppearance const): Deleted.
        * platform/ios/LocalCurrentTraitCollection.h:
        (WebCore::LocalCurrentTraitCollection::usingElevatedUserInterfaceLevel const):
        (WebCore::LocalCurrentTraitCollection::usingBaseLevelAppearance const): Deleted.
        * platform/ios/LocalCurrentTraitCollection.mm:
        (WebCore::LocalCurrentTraitCollection::LocalCurrentTraitCollection):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::systemColor const):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setUseDarkAppearanceInternal):

2019-06-28  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r239984): pages with custom scrollbars also show normal scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=199321
        <rdar://problem/52308095>

        Reviewed by Timothy Hatcher.

        Revert the part of r239984 that made isCustomScrollbar() virtual, since theme().registerScrollbar()
        calls it from the base class constructor.

        I wasn't able to make a test that tests rendering of overlay scrollbars (webkit.org/b/199323).

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::isCustomScrollbar const):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::RenderScrollbar):
        * rendering/RenderScrollbar.h:

2019-06-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Need a way for SPI clients to know when to avoid resizing to accommodate for the input view bounds
        https://bugs.webkit.org/show_bug.cgi?id=199331
        <rdar://problem/52116170>

        Reviewed by Tim Horton.

        Add a new quirk to avoid resizing the web view when input view bounds change.

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

2019-06-28  Konstantin Tokarev  <annulen@yandex.ru>

        Remove traces of ENABLE_ICONDATABASE remaining after its removal in 219733
        https://bugs.webkit.org/show_bug.cgi?id=199317

        Reviewed by Michael Catanzaro.

        While IconDatabase and all code using it was removed,
        ENABLE_ICONDATABASE still exists as build option and C++ macro.

        * Configurations/FeatureDefines.xcconfig:
        * Resources/urlIcon.png: Removed file which was only used in
        IconDatabase.cpp.

2019-06-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] unresolved external symbol "JSC::JSObject::didBecomePrototype(void)" referenced in function "JSC::Structure::create(...)"
        https://bugs.webkit.org/show_bug.cgi?id=199312

        Reviewed by Keith Miller.

        WinCairo port, clang-cl Release builds reported a following linkage error:

        > WebCore.lib(UnifiedSource-4babe430-10.cpp.obj) : error LNK2019: unresolved external symbol "public: void __cdecl JSC::JSObject::didBecomePrototype(void)" (?didBecomePrototype@JSObject@JSC@@QEAAXXZ) referenced in function "public: static class JSC::Structure * __cdecl JSC::Structure::create(class JSC::VM &,class JSC::JSGlobalObject *,class JSC::JSValue,class JSC::TypeInfo const &,struct JSC::ClassInfo const *,unsigned char,unsigned int)" (?create@Structure@JSC@@SAPEAV12@AEAVVM@2@PEAVJSGlobalObject@2@VJSValue@2@AEBVTypeInfo@2@PEBUClassInfo@2@EI@Z)

        No new tests because there is no behavior change.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp: Include <JavaScriptCore/JSCInlines.h>,
        and do not include headers which is included by it.

2019-06-27  Zalan Bujtas  <zalan@apple.com>

        REGRESSION(r244633): e-mail with "height: 100%" causes unstable layout.
        https://bugs.webkit.org/show_bug.cgi?id=199303
        <rdar://problem/51340927>

        Reviewed by Tim Horton.

        This patch restores the previous behavior (pre r244633) where we intentionally reported stale content size value to
        avoid unstable layout for content like height: 100px.

        * page/FrameView.cpp:
        (WebCore::FrameView::autoSizeIfEnabled):

2019-06-27  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][MediaFoundation] Stop using soft linking for Media Foundation
        https://bugs.webkit.org/show_bug.cgi?id=198783
        <rdar://problem/52301843>

        Unreviewed compilation warning fix. clang-cl reports:

        ..\..\Source\WebCore\platform\graphics\win\MediaPlayerPrivateMediaFoundation.cpp(526,10): warning: address of function 'MFCreateTopology' will always evaluate to 'true' [-Wpointer-bool-conversion]
            if (!MFCreateTopology)
                ~^~~~~~~~~~~~~~~~
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::createTopologyFromSource): Removed the pointer check of MFCreateTopology.

2019-06-27  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][MediaFoundation] Stop using soft linking for Media Foundation
        https://bugs.webkit.org/show_bug.cgi?id=198783

        Reviewed by Alex Christensen.

        WinCairo is supporting Windows 7 or newer. It doesn't need soft
        linking anymore.

        No new tests because there is no behavior change.

        * PlatformWinCairo.cmake: Added libraries to WebCore_LIBRARIES.
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::mimeTypeCache):
        (WebCore::MediaPlayerPrivateMediaFoundation::setRate):
        (WebCore::MediaPlayerPrivateMediaFoundation::setAllChannelVolumes):
        (WebCore::MediaPlayerPrivateMediaFoundation::createSession):
        (WebCore::MediaPlayerPrivateMediaFoundation::endSession):
        (WebCore::MediaPlayerPrivateMediaFoundation::startCreateMediaSource):
        (WebCore::MediaPlayerPrivateMediaFoundation::createTopologyFromSource):
        (WebCore::MediaPlayerPrivateMediaFoundation::createOutputNode):
        (WebCore::MediaPlayerPrivateMediaFoundation::createSourceStreamNode):
        (WebCore::MediaPlayerPrivateMediaFoundation::updateReadyState):
        (WebCore::MediaPlayerPrivateMediaFoundation::videoDisplay):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::createOptimalVideoType):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::setFrameRate):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::presentSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::initializeD3D):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::createD3DSample):

2019-06-27  Basuke Suzuki  <Basuke.Suzuki@sony.com>

         Fix build error on WebCore when disabling ENABLE_INDEXED_DATABASE.
        https://bugs.webkit.org/show_bug.cgi?id=199286

         Unreviewed build fix.

         * testing/Internals.cpp: Make method conditional.
         * testing/Internals.h: Ditto.
         * testing/Internals.idl: Ditto.

2019-06-27  Simon Fraser  <simon.fraser@apple.com>

        Fix crash in ScrollingStateNode::insertChild()
        https://bugs.webkit.org/show_bug.cgi?id=199297
        rdar://problem/49415136

        Reviewed by Tim Horton.

        Crash data suggest that 'parent' can be deleted in ScrollingStateTree::insertNode(). To avoid this,
        have ScrollingStateTree::m_stateNodeMap store RefPts, and do the same for ScrollingTree::m_nodeMap.

        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode): The relaxAdoptionRequirement() is required
        to avoid ASSERT(!m_adoptionIsRequired) when the node is added to the tree in its constructor.
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::unparentNode):
        (WebCore::ScrollingStateTree::unparentChildrenAndDestroyNode):
        (WebCore::ScrollingStateTree::detachAndDestroySubtree):
        (WebCore::ScrollingStateTree::stateNodeForID const):
        * page/scrolling/ScrollingStateTree.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):
        * page/scrolling/ScrollingTree.h:

2019-06-27  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r246869): ASSERTION FAILED: !renderer().hasRepaintLayoutRects() || renderer().repaintLayoutRects().m_repaintRect == renderer().clippedOverflowRectForRepaint(renderer().containerForRepaint())
        https://bugs.webkit.org/show_bug.cgi?id=199274

        Reviewed by Zalan Bujtas.

        When layer backing sharing changes, we need to clear cached repaint rects, since they
        painting root changes.

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

2019-06-27  Beth Dakin  <bdakin@apple.com>

        Upstream use of MACCATALYST
        https://bugs.webkit.org/show_bug.cgi?id=199245
        rdar://problem/51687723

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/SDKVariant.xcconfig:
        * Configurations/WebCore.xcconfig:
        * Modules/geolocation/ios/GeolocationPositionIOS.mm:
        (WebCore::GeolocationPosition::GeolocationPosition):
        * editing/cocoa/DictionaryLookup.mm:
        (-[WebRevealHighlight drawHighlightContentForItem:context:]):
        (WebCore::showPopupOrCreateAnimationController):
        * editing/cocoa/WebContentReaderCocoa.mm:
        * page/Navigator.h:
        * page/SettingsBase.cpp:
        (WebCore::SettingsBase::defaultContentChangeObserverEnabled):
        * page/cocoa/MemoryReleaseCocoa.mm:
        (WebCore::platformReleaseMemory):
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::setCategory):
        (WebCore::AudioSession::routingContextUID const):
        * platform/cocoa/ParentalControlsContentFilter.mm:
        (WebCore::canHandleResponse):
        * platform/graphics/avfoundation/objc/AVAssetMIMETypeCache.mm:
        (WebCore::AVAssetMIMETypeCache::isAvailable const):
        * platform/graphics/avfoundation/objc/AVStreamDataParserMIMETypeCache.mm:
        (WebCore::AVStreamDataParserMIMETypeCache::isAvailable const):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldDisableSleep):
        * platform/graphics/cv/ImageTransferSessionVT.h:
        * platform/graphics/cv/ImageTransferSessionVT.mm:
        (WebCore::cvPixelFormatOpenGLKey):
        (WebCore::ImageTransferSessionVT::ImageTransferSessionVT):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::readPasteboardWebContentDataForType):
        (WebCore::Pasteboard::supportedWebContentPasteboardTypes):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::registerItemToPasteboard):
        (WebCore::PlatformPasteboard::write):
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerLayer setVideoGravity:]):
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderRegistrationInfoList itemProvider]):
        (-[WebItemProviderLoadResult canBeRepresentedAsFileUpload]):
        (-[WebItemProviderPasteboard numberOfFiles]):
        * platform/network/cf/CertificateInfoCFNet.cpp:
        (WebCore::CertificateInfo::summaryInfo const):

2019-06-27  Brent Fulgham  <bfulgham@apple.com>

        Correct document lifecycle while processing commands
        https://bugs.webkit.org/show_bug.cgi?id=199146
        <rdar://problem/52047462>

        Reviewed by Darin Adler.

        Protect the document while commands are being processed since script may run
        during the style resolution. We should protect against this.

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

2019-06-27  Jon Davis  <jond@apple.com>

        Add status for Web Bluetooth Scanning standards specification.
        https://bugs.webkit.org/show_bug.cgi?id=199235

        Reviewed by Joseph Pecoraro.

        * features.json:

2019-06-27  Saam Barati  <sbarati@apple.com>

        Make WEBGPU enabled only on Mojave and later.

        Rubber-stamped by Myles C. Maxfield.

        We're going to look into re-enabling it on High Sierra in:
        https://bugs.webkit.org/show_bug.cgi?id=199275

        * Configurations/FeatureDefines.xcconfig:

2019-06-27  Antti Koivisto  <antti@apple.com>

        REGRESSION (touch-action): Can't scroll vertically when touching a horizontally-scrollable element on instagram.com
        https://bugs.webkit.org/show_bug.cgi?id=199268
        <rdar://problem/52246473>

        Reviewed by Antoine Quint.

        Test: pointerevents/ios/touch-action-region-manipulation.html

        Having a restrictive touch-action value like 'pan-y' on on element and then having a descendant with
        'touch-action: manipulation' computes to 'none'.

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

        For value 'manipulation' return the current effective value, similar to the reverse case above.
        Set intersection should only be computed out of restrictive values (pan-x/pan-y/pinch-zoom/none).

2019-06-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Use libsoup WebSockets API
        https://bugs.webkit.org/show_bug.cgi?id=199151

        Reviewed by Michael Catanzaro.

        Use createWebSocketChannel() from the provider also for libsoup when WEBKIT_USE_SOUP_WEBSOCKETS env var is set.

        * Modules/websockets/ThreadableWebSocketChannel.cpp:
        (WebCore::ThreadableWebSocketChannel::create):

2019-06-27  Devin Rousso  <drousso@apple.com>

        Web Inspector: throw an error if console.count/console.countReset is called with an object that throws an error from toString
        https://bugs.webkit.org/show_bug.cgi?id=199252

        Reviewed by Joseph Pecoraro.

        Parse the arguments passed to `console.count` and `console.countReset` before sending it to
        the `ConsoleClient` so that an error can be thrown if the first argument doesn't `toString`
        nicely (e.g. without throwing an error).

        Generate call stacks for `console.countReset` to match other `console` methods. Also do this
        for `console.time`, `console.timeLog`, and `console.timeEnd`. Limit the call stack to only
        have the top frame, so no unnecessary/extra data is sent to the frontend (right now, only
        the call location is displayed).

        Rename `title` to `label` for `console.time`, `console.timeLog`, and `console.timeEnd` to
        better match the spec.

        Updated existing LayoutTests:
         - inspector/console/console-count.html
         - inspector/console/console-api.html

        Also covered by existing WPT tests.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::consoleCount):
        (WebCore::InspectorInstrumentation::consoleCountReset):
        (WebCore::InspectorInstrumentation::startConsoleTiming):
        (WebCore::InspectorInstrumentation::logConsoleTiming):
        (WebCore::InspectorInstrumentation::stopConsoleTiming):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::consoleCountImpl):
        (WebCore::InspectorInstrumentation::consoleCountResetImpl):
        (WebCore::InspectorInstrumentation::startConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::logConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::stopConsoleTimingImpl):

        * page/PageConsoleClient.h:
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::count):
        (WebCore::PageConsoleClient::countReset):
        (WebCore::PageConsoleClient::time):
        (WebCore::PageConsoleClient::timeLog):
        (WebCore::PageConsoleClient::timeEnd):

        * workers/WorkerConsoleClient.h:
        * workers/WorkerConsoleClient.cpp:
        (WebCore::WorkerConsoleClient::count):
        (WebCore::WorkerConsoleClient::countReset):
        (WebCore::WorkerConsoleClient::time):
        (WebCore::WorkerConsoleClient::timeLog):
        (WebCore::WorkerConsoleClient::timeEnd):

        * worklets/WorkletConsoleClient.h:
        * worklets/WorkletConsoleClient.cpp:
        (WebCore::WorkletConsoleClient::count):
        (WebCore::WorkletConsoleClient::countReset):

2019-06-27  Saam Barati  <sbarati@apple.com>

        [WHLSL] Implement arrays and MakeArrayReference
        https://bugs.webkit.org/show_bug.cgi?id=198414

        Reviewed by Myles C. Maxfield.

        This patch implements WHLSL arrays. The main implementation detail is that
        arrays get compiled to use Metal's array type. To make everything work, this
        patch also fixes a few bugs:
        - The checker now allows "operator.length" to be called on arrays. Prior to
        this patch, it was just allowed on array references.
        
        - The preserve variable lifetimes pass now looks at MakeArrayReference nodes.
        Prior to this patch, it just looked at MakePointerExpression.
        
        - We were producing the wrong type for ander arguments for indexed accesses
        on array types. We were saying the argument that was produced was a reference
        to an array instead of an array reference to the element type.
        
        - The trie we compose for the reverse type hierarchy was inserting elements
        into the wrong "children" vector. We were always inserting things into the
        top level vector. This is wrong when we have a nesting of types > 1.
        
        I also found a bug with having arrays of pointers when writing this patch.
        Work on this will take place in a follow up: https://bugs.webkit.org/show_bug.cgi?id=199197

        Tests: webgpu/whlsl-huge-array.html
               webgpu/whlsl-make-array-reference.html
               webgpu/whlsl-simple-arrays.html
               webgpu/whlsl-two-dimensional-array.html

        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::writeNativeFunction):
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:
        (WebCore::WHLSL::Metal::TypeNamer::insert):
        (WebCore::WHLSL::Metal::TypeNamer::emitUnnamedTypeDefinition):
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.h:
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::resolveByInstantiation):
        (WebCore::WHLSL::Checker::visit):
        * Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp:
        (WebCore::WHLSL::EscapedVariableCollector::escapeVariableUse):
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        (WebCore::WHLSL::wrapAnderCallArgument):
        (WebCore::WHLSL::anderCallArgument):
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:

2019-06-27  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] Bump cmake_minimum_required version to 3.10
        https://bugs.webkit.org/show_bug.cgi?id=199181

        Reviewed by Don Olmstead.

        No new tests because there is no behavior change.

        * CMakeLists.txt:

2019-06-26  Simon Fraser  <simon.fraser@apple.com>

        [Async overflow scrolling] Fix missing or misplaced content inside overflow:scroll
        https://bugs.webkit.org/show_bug.cgi?id=199253
        rdar://problem/51855156, rdar://problem/51934514

        Reviewed by Zalan Bujtas.

        This patch fixes a couple of related issues triggered by failing to composite layers inside non-stacking-context
        overflow scroll.

        First, we relied on overlap testing to composite position:relative layers inside overflow:scroll, but this only
        worked when they came later in z-order, so didn't work for layers with negative z-index.
        RenderLayerCompositor::requiresCompositingForIndirectReason() was intended to trigger compositing in such cases,
        but it only did so for position:absolute inside stacking-context scroller, because
        isNonScrolledLayerInsideScrolledCompositedAncestor() tested ancestorMovedByScroller && !layerMovedByScroller.

        I fixed this by sharing code between the three places that ask whether compositing crosses a containing-block
        boundary to call a single function, RenderLayerCompositor::layerScrollBehahaviorRelativeToCompositedAncestor(),
        that returns a ScrollPositioningBehavior. We now do compositing for both "moves" and "stationary" behaviors (but
        not "none"), ensuring that position:relative inside non-stacking scroller is always composited.

        However, this would trigger compositing on layers that should be using backing sharing; if they were outside the
        visible part of the scroller, the overlap code would not trigger, but the
        "IndirectCompositingReason::OverflowScrollPositioning" code would. This is undesirable; any layer that can use
        backing sharing should, because that's fewer composited layers, so smaller layer trees and less backing store.
        To fix this, I moved the backing-sharing check before the overlap check in
        RenderLayerCompositor::computeCompositingRequirements().

        The "layer.setHasCompositingDescendant(currentState.subtreeIsCompositing)" line was in the wrong place,
        triggering assertions on some content; "subtreeIsCompositing" only refers to child layers, so this bit needs to
        be set right after we've traversed the z-order lists.

        Tests: compositing/scrolling/async-overflow-scrolling/hidden-relative-layer-content-in-scroller.html
               compositing/scrolling/async-overflow-scrolling/layer-for-negative-z-in-scroller.html
               compositing/scrolling/async-overflow-scrolling/negative-z-in-scroller.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::traverseUnchangedSubtree):
        (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason const):
        (WebCore::isScrolledByOverflowScrollLayer):
        (WebCore::enclosingCompositedScrollingLayer):
        (WebCore::RenderLayerCompositor::layerScrollBehahaviorRelativeToCompositedAncestor):
        (WebCore::RenderLayerCompositor::computeCoordinatedPositioningForLayer const):
        (WebCore::isNonScrolledLayerInsideScrolledCompositedAncestor): Deleted.
        (WebCore::RenderLayerCompositor::layerContainingBlockCrossesCoordinatedScrollingBoundary): Deleted.
        * rendering/RenderLayerCompositor.h:

2019-06-26  Ryosuke Niwa  <rniwa@webkit.org>

        ReplacementFragment should not have script observable side effects
        https://bugs.webkit.org/show_bug.cgi?id=199147

        Reviewed by Wenson Hsieh.

        Fixed the bug that ReplacementFragment has script observable side effects.

        Use a brand new document for sanitization where the script is disabled for test rendering,
        and remove style and script elements as well as event handlers before the test rendering
        and the actual pasting.

        Test: editing/pasteboard/paste-contents-with-side-effects.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::document): Deleted.
        (WebCore::ReplacementFragment::ReplacementFragment): Use createPageForSanitizingWebContent
        to create our own document for test rendering. We need to copy over the computed style
        from the root editable element (editing host) to respect whitespace treatment, etc...
        (WebCore::ReplacementFragment::removeContentsWithSideEffects): Moved from removeHeadContents.
        Now removes event handlers and JavaScript URLs.
        (WebCore::ReplacementFragment::insertFragmentForTestRendering): Renamed variable names.
        (WebCore::ReplaceSelectionCommand::willApplyCommand): Create the plain text and HTML markup
        for beforeinput and input events before ReplacementFragment removes contents with side effects.
        (WebCore::ReplaceSelectionCommand::ensureReplacementFragment): The removal of head elements
        is now done in ReplacementFragment's constructor.

2019-06-26  Andy Estes  <aestes@apple.com>

        [Payment Request] Set state to Closed when show() is called during an active session
        https://bugs.webkit.org/show_bug.cgi?id=199239

        Reviewed by Alex Christensen.

        According to step 7 of https://w3c.github.io/payment-request/#show-method (as of 26 June
        2019), when another payment request is showing, calling show() should set the [[state]]
        internal slot to Closed in addition to rejecting the show promise with an AbortError. WebKit
        was only doing the latter. Let's do both.

        Test: http/tests/paymentrequest/payment-is-showing.https.html

        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::show):

2019-06-26  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Implement console.countReset
        https://bugs.webkit.org/show_bug.cgi?id=199200

        Reviewed by Devin Rousso.

        Updated existing tests.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::consoleCountImpl):
        (WebCore::InspectorInstrumentation::consoleCountResetImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::consoleCountReset):
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::countReset):
        * page/PageConsoleClient.h:
        * workers/WorkerConsoleClient.cpp:
        (WebCore::WorkerConsoleClient::countReset):
        * workers/WorkerConsoleClient.h:
        * worklets/WorkletConsoleClient.cpp:
        (WebCore::WorkletConsoleClient::countReset):
        * worklets/WorkletConsoleClient.h:

2019-06-26  Antoine Quint  <graouts@apple.com>

        [Pointer Events] Respect pointer capture when dispatching mouse boundary events and updating :hover
        https://bugs.webkit.org/show_bug.cgi?id=198999
        <rdar://problem/51979477>

        Reviewed by Dean Jackson.

        Make sure we don't return early prior to setting the flag that prevents re-entrancy, or else we would never
        enter this function again. No new tests, this was caught because Pointer Events WPT tests on iOS tests regressed.

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

2019-06-26  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION: ( r246394 ) webgpu/whlsl-buffer-fragment.html and webgpu/whlsl-buffer-vertex.html are failing
        https://bugs.webkit.org/show_bug.cgi?id=199012

        Reviewed by Saam Barati.

        * platform/graphics/gpu/cocoa/GPUDeviceMetal.mm:
        (WebCore::isAcceptableDevice):
        (WebCore::GPUDevice::tryCreate):

2019-06-26  Simon Fraser  <simon.fraser@apple.com>

        Incorrect clippping with overflow:scroll inside oveflow:hidden with border-radius
        https://bugs.webkit.org/show_bug.cgi?id=199135
        rdar://problem/51882383

        Reviewed by Zalan Bujtas.
        
        In some cases the geometry of the shape mask layer added to m_childContainmentLayer, for
        border-radius, was incorrect. GraphicsLayerCA::updateClippingStrategy() treated
        the rounded rect as if it were in renderer coordinates, but to match the other geometry
        on GraphicsLayer, it should in GraphicsLayer coordinates, so we need to offset by
        clipLayer->offsetFromRenderer().
        
        In addition, RenderLayerBacking::updateChildClippingStrategy() is called from
        the updateConfiguration(), which is before we've set offsetFromRenderer() on the clipLayer.
        This first call is really to find out whether the platform supports this rounded rect
        as a shape mask.
        
        So we need to call setMasksToBoundsRect() a second time in RenderLayerBacking::updateGeometry()
        after clipLayers's offsetFromRenderer() has been computed.

        Test: compositing/scrolling/async-overflow-scrolling/border-radius-on-scroll-container.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateClippingStrategy):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::updateDescendantClippingLayer):
        (WebCore::RenderLayerBacking::updateChildClippingStrategy):

2019-06-26  Antoine Quint  <graouts@apple.com>

        [Pointer Events] Respect pointer capture when dispatching mouse boundary events and updating :hover
        https://bugs.webkit.org/show_bug.cgi?id=198999
        <rdar://problem/51979477>

        Reviewed by Dean Jackson.

        Up until now, we would not account for pointer capture (see ​https://w3c.github.io/pointerevents/#pointer-capture) when dispatching
        mouse boundary events (mouseover, mouseout, mouseenter, mouseleave) and their counterpart pointer events. We would also not account
        for it when updating :hover styles.

        Now, when pointer capture changes for an element, we call setCapturingMouseEventsElement() on the EventHandler such that the element
        that would naturally hit-test is overridden by the pointer capture element when identifying which target to use for the dispatch of
        boundary mouse events. Additionally, when calling Document::prepareMouseEvent(), we also use the pointer capture element to
        pass down to Document::updateHoverActiveState() such that :hover styles are applied to the correct element.

        * dom/Document.cpp:
        (WebCore::Document::prepareMouseEvent): When a new event is going to be dispatched, we must run the Process Pending Capture Element
        steps as mandated by the Pointer Events spec. Calling this will dispatch the appropriate pointer capture change events and also
        required boundary events since EventHandler::setCapturingMouseEventsElement() calls into EventHandler::updateMouseEventTargetNode().
        Since this may update the capturing mouse events element, we ensure that we call updateHoverActiveState() with a flag that indicates that.
        Finally, we use the capturing mouse events element instead of the hit-testing element to pass to updateHoverActiveState() to ensure
        that is has :hover styles applied.
        (WebCore::Document::updateHoverActiveState): Account for the new CaptureChange flag to force the invalidation of the :hover and :active
        elements chain at all times when the capturing mouse events element changed.
        * dom/Document.h:
        * dom/PointerEvent.h: Update PointerEvent::createForPointerCapture() to take specific parameters rather than a single PointerEvent to
        set the pointerId, isPrimary and pointerType properties of the generated event. This is required to call processPendingPointerCapture()
        outside of PointerEvent dispatch logic since we now call it from Document::prepareMouseEvent() where we haven't yet generated such an
        event.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::pointerCaptureElementDidChange): When a new pointer capture element is set, call updateMouseEventTargetNode()
        to ensure that boundary events are fired to indicate the pointer capture state change.
        (WebCore::EventHandler::prepareMouseEvent): Keep track of the last PlatformMouseEvent used to prepare a mouse event so that we can use
        it when setCapturingMouseEventsElement() is called.
        * page/EventHandler.h:
        * page/PointerCaptureController.cpp:
        (WebCore::PointerCaptureController::pointerCaptureElement): Since Document::prepareMouseEvent() needs to know the current pointer capture
        element, add a new public method that indicates the pointer capture element if that element is contained in the provided document. We need
        to provide the document since PointerCaptureController is owned by the Page and may manage several documents.
        (WebCore::PointerCaptureController::dispatchEvent): Only run the Process Pending Capture Element steps when dealing with a touch or pen
        event since those steps are already ran for mouse events in Document::prepareMouseEvent(). Additionally, since the element target is already
        set to be the pointer capture element with the changes made to processPendingPointerCapture(), and because on iOS pointer capture is always
        active, we can remove the code that would retarget the event to the pointer capture element.
        (WebCore::PointerCaptureController::pointerEventWasDispatched):
        (WebCore::PointerCaptureController::cancelPointer):
        (WebCore::PointerCaptureController::processPendingPointerCapture): We now call into EventHandler::setCapturingMouseEventsElement() when the
        capture target element changes. We must be careful to call this method prior to dispatching the "gotpointercapture" event and after dispatching
        the "lostpointercapture" event so that boundary events are fired at the right time.
        * page/PointerCaptureController.h:

2019-06-25  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] incorrect font height for 'Google Sans Display' font
        https://bugs.webkit.org/show_bug.cgi?id=198909

        Reviewed by Frédéric Wang.

        r191893 changed to use OS/2 typo metrics, but its calculation
        wasn't correct. And, there is no reliable way to get OS/2 table by
        using Windows API. Revert the part of r191893 change at the
        moment.

        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        (WebCore::Font::platformInit):
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::Font::initGDIFont):
        Reverted the part of r191893 change, and added FIXME comments.

2019-06-25  Timothy Hatcher  <timothy@apple.com>

        Clicking the up/down spin buttons for a number input increments/decrements by 2.
        https://bugs.webkit.org/show_bug.cgi?id=198809

        Reviewed by Tim Horton.

        AppKit no longer registers NSScrollerButtonDelay and NSScrollerButtonPeriod in the base
        NSUserDefaults for an app. This caused our use to always get 0s when setting the click
        and hold timer, causing the value to increment quickly for a single press.

        * platform/mac/ScrollbarThemeMac.h:
        (WebCore::ScrollbarThemeMac::initialAutoscrollTimerDelay): Added. Hardcode 500ms.
        (WebCore::ScrollbarThemeMac::autoscrollTimerDelay): Added. Hardcode 50ms.
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::preferencesChanged): Removed use of old user defaults.
        (WebCore::ScrollbarThemeMac::initialAutoscrollTimerDelay): Deleted.
        (WebCore::ScrollbarThemeMac::autoscrollTimerDelay): Deleted.

2019-06-25  Keith Miller  <keith_miller@apple.com>

        Unreviewed, windows build fix.

        * bindings/js/JSDOMGlobalObject.h:

2019-06-25  Keith Miller  <keith_miller@apple.com>

        Add didBecomePrototype() calls to global context prototypes
        https://bugs.webkit.org/show_bug.cgi?id=199202

        Reviewed by Mark Lam.

        This fixes some crashes related to asserting that all prototypes
        have been marked as such in JSC from
        https://trac.webkit.org/changeset/246801. It's ok to call
        didBecomePrototype here as we setting up the world state right now
        so we won't be having a bad time.

        We don't automatically call didBecomePrototype() for
        setPrototypeWithoutTransition because existing objects may already
        have this structure so it seems more reasonable to be explicit
        there.

        * bindings/js/JSWindowProxy.cpp:
        (WebCore::JSWindowProxy::setWindow):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript):
        * worklets/WorkletScriptController.cpp:
        (WebCore::WorkletScriptController::initScriptWithSubclass):

2019-06-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Implement console.timeLog
        https://bugs.webkit.org/show_bug.cgi?id=199184

        Reviewed by Devin Rousso.

        Updated existing tests.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::logConsoleTimingImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::logConsoleTiming):
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::timeLog):
        * page/PageConsoleClient.h:
        * workers/WorkerConsoleClient.cpp:
        (WebCore::WorkerConsoleClient::timeLog):
        * workers/WorkerConsoleClient.h:
        * worklets/WorkletConsoleClient.cpp:
        (WebCore::WorkletConsoleClient::timeLog):
        * worklets/WorkletConsoleClient.h:

2019-06-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        Add user agent quirk for bankofamerica.com
        https://bugs.webkit.org/show_bug.cgi?id=199154

        Reviewed by Carlos Garcia Campos.

        This suppresses an unsupported browser warning.

        * platform/UserAgentQuirks.cpp:
        (WebCore::urlRequiresMacintoshPlatform):

2019-06-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fully rename WebKitGTK+ -> WebKitGTK everywhere
        https://bugs.webkit.org/show_bug.cgi?id=199159

        Reviewed by Carlos Garcia Campos.

        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (webkitAccessibleTextGetStringAtOffset):
        * platform/UserAgentQuirks.cpp:
        (WebCore::urlRequiresMacintoshPlatform):
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::saveCredentialToPersistentStorage):
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::adjustTextFieldStyle const):

2019-06-25  Rob Buis  <rbuis@igalia.com>

        Introduce LinkLoadParameters
        https://bugs.webkit.org/show_bug.cgi?id=198960

        Reviewed by Frédéric Wang.

        Avoid the long parameters lists in LinkLoader by moving them
        to LinkLoadParameters.

        No new tests because there is no behavior change.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLinksFromHeader):
        (WebCore::LinkLoader::preconnectIfNeeded):
        (WebCore::LinkLoader::preloadIfNeeded):
        (WebCore::LinkLoader::prefetchIfNeeded):
        (WebCore::LinkLoader::loadLink):
        * loader/LinkLoader.h:

2019-06-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Text autosizing] [iPadOS] Revise our heuristics to determine idempotent text autosizing candidates
        https://bugs.webkit.org/show_bug.cgi?id=198763
        <rdar://problem/51826266>

        Reviewed by Simon Fraser.

        This patch adjusts existing text autosizing heuristics, based on a survey of text on websites in the Alexa top
        500 that shrink down to fit the viewport when requesting the desktop version of the site. The new heuristic is
        derived from training decision trees against the dataset obtained from this survey, and balances false positives
        (cases where layout is broken due to autosizing) against overall accuracy (measured using cross-validation).

        See below for more details. Additionally, please refer to the link in the radar for more details, as well as
        resources used to generate, validate, and analyze these decision trees.

        Test: fast/text-autosizing/ios/idempotentmode/idempotent-autosizing-candidates.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyleForTextAutosizing):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::isIdempotentTextAutosizingCandidate const):

        Rename AutosizeStatus::shouldSkipSubtree to RenderStyle::isIdempotentTextAutosizingCandidate. We relocate this
        logic to RenderStyle, such that we're able to ask the element's RenderStyle questions when determining whether
        the element should be autosized.

        Of course, this patch additionally revamps the heuristic used to determine whether it is safe to autosize an
        element. Our current heuristic in trunk simply checks for the presence of inline block display, out of flow
        positioning and a fixed height ancestor; if any of these conditions are satisfied, we opt the element out of
        text autosizing. This is an excellent strategy for boosting some runs of text while avoiding autosizing in the
        vast majority of cases where increasing font size may lead to layout breakage (e.g. overlapping or clipped text,
        content unexpectedly flowing to the next line, etc.). However, it also avoids boosting font sizes in many
        scenarios where boosting font sizes is desired; for concrete examples, see the (currently 24) radars about small
        font sizes that are duped to <rdar://problem/51826266>.

        To help analyze and identify trends in autosizable and non-autosizable text, we assembled a dataset of elements
        with text from the Alexa top 500 that either: (1) were too small and could be boosted safely, or (2) would break
        layout if boosted. With this labeled dataset, we then trained binary decision trees to classify the data. Each
        decision tree was trained with a number of hyperparameters: namely, maximum depth, minimum leaf size, and the
        amount of bias towards negative samples (i.e. the ratio of the weight of a non-autosizable sample relative to
        the weight of an autosizable sample).

        For each 3-tuple of these hyperparameters (800 in total: max depth between 3 and 10, min leaf size between 1 and
        10 and bias between 1 and 10), for 5000 iterations each, we split the full dataset into a training dataset and
        a cross-validation dataset, trained a decision tree using the training set, and tested against the cross-
        validation set to compute average precision, recall, and overall accuracy for each tuple of hyperparameters.

        The decision tree introduced in this patch was generated using a hand-picked set of hyperparameters (max depth
        10, min leaf size 4, and negative bias 2) to provide a balance between precision scores (limiting layout
        breakage) and recall score (ensuring that small text is mostly autosized), while optimizing for overall
        accuracy. Cross-validation scores predict that the overall accuracy of this classifier is approximately 70%, up
        from the current accuracy in trunk (~53%).

        * rendering/style/RenderStyle.h:

        Grow the width of `autosizeStatus` from 4 to 8 (notably, this does not increase the size of RenderStyle).

        * rendering/style/TextSizeAdjustment.cpp:
        (WebCore::AutosizeStatus::updateStatus):
        (WebCore::AutosizeStatus::shouldSkipSubtree const): Deleted.
        * rendering/style/TextSizeAdjustment.h:

        Introduce new text autosizing state flags, and remove some existing ones.

2019-06-24  Commit Queue  <commit-queue@webkit.org>

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

        revert to do patch in a different way. (Requested by keith_mi_
        on #webkit).

        Reverted changeset:

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

2019-06-24  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION (r244436): IndexedDB Uint8Array returned as ArrayBuffer
        https://bugs.webkit.org/show_bug.cgi?id=198738
        <rdar://problem/51614053>

        Reviewed by Brady Eidson.

        In InexedDB, two binary keys are the same as long as their data is the same.

        Modified tests: storage/indexeddb/key-type-binary.html
                        storage/indexeddb/key-type-binary-private.html

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::injectIDBKeyIntoScriptValue):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readArrayBufferView):

2019-06-24  Sihui Liu  <sihui_liu@apple.com>

        Remove WebSQL quirk for nytimes.com
        https://bugs.webkit.org/show_bug.cgi?id=199175

        Reviewed by Geoffrey Garen.

        Removed unused code.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateRuntimeEnableConditionalString):
        * bindings/scripts/IDLAttributes.json:
        * page/Quirks.cpp:
        (WebCore::Quirks::hasBrokenEncryptedMediaAPISupportQuirk const):
        (WebCore::Quirks::hasWebSQLSupportQuirk const): Deleted.
        * page/Quirks.h:

2019-06-24  Brady Eidson  <beidson@apple.com>

        Null deref in WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad.
        <rdar://problem/51535942> and https://bugs.webkit.org/show_bug.cgi?id=199123

        Reviewed by Andy Estes.

        * loader/FrameLoaderStateMachine.h:
        (WebCore::FrameLoaderStateMachine::stateForDebugging const):

2019-06-24  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r246725 ): Crashes on twitch.tv
        https://bugs.webkit.org/show_bug.cgi?id=199176
        rdar://problem/52071249

        Reviewed by Zalan Bujtas.
        
        With a composited negative z-index child inside a scroller, we can register the overflow scroll
        proxy node before we've traversed the overflow layer, so it that layer hasn't got its OverflowScrollingNode
        yet. Thus, AsyncScrollingCoordinator::setRelatedOverflowScrollingNodes() can be called with an empty vector.
        Avoid crashing when this happens.

        Test: scrollingcoordinator/scrolling-tree/scroller-with-negative-z-child.html

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::setRelatedOverflowScrollingNodes):
        * page/scrolling/cocoa/ScrollingTreeOverflowScrollProxyNode.mm:
        (WebCore::ScrollingTreeOverflowScrollProxyNode::commitStateBeforeChildren):

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

        Pages using Google's anti-flicker optimization may take ~5 seconds to do initial paint
        https://bugs.webkit.org/show_bug.cgi?id=199173
        <rdar://problem/45968770>

        Reviewed by Geoffrey Garen.

        Pages using Google's anti-flicker optimization [1] take ~5 seconds to do initial paint when
        analytics.js load is blocked by a content blocker.

        To address the issue, this patch introduces a quirk behind an experimental feature flag that
        calls window.dataLayer.hide.end() on the page when the load of https://www.google-analytics.com/analytics.js
        is blocked by a content blocker. Note that this is more robust than dropping the 'async-hide'
        class from document.documentElement since the class name is customizable by the caller.
        A message is logged in the console when the quirk causes window.dataLayer.hide.end() to get called
        early.

        [1] https://developers.google.com/optimize/

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForLoad):
        * page/Settings.yaml:

2019-06-24  John Wilander  <wilander@apple.com>

        Remove IsITPFirstPartyWebsiteDataRemovalEnabled as runtime check
        https://bugs.webkit.org/show_bug.cgi?id=199164
        <rdar://problem/52061147>

        Reviewed by Brent Fulgham.

        No new tests. Just a removal of a runtime feature check. The functionality
        already has a layout test.

        We've had this toggle as a safety thing since mid-March. No need for it any longer.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::isITPDatabaseEnabled const):
        (WebCore::RuntimeEnabledFeatures::setIsITPFirstPartyWebsiteDataRemovalEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::isITPFirstPartyWebsiteDataRemovalEnabled const): Deleted.

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

        iOS 12.2 Drawing portrait video to canvas is sideways
        https://bugs.webkit.org/show_bug.cgi?id=196772
        <rdar://problem/49781802>

        Reviewed by Eric Carlson.

        Test: media/video-orientation-canvas.html

        Move rotation code into its own ImageRotationSessionVT class for re-use across
        all existing classes with rotation operations. Should slightly increase performance
        for painting rotated media files, as the rotation only occurs once per frame, rather
        than once per drawing operation.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.h:
        (WebCore::ImageDecoderAVFObjC::RotationProperties::isIdentity const): Deleted.
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::readTrackMetadata):
        (WebCore::ImageDecoderAVFObjC::storeSampleBuffer):
        (WebCore::ImageDecoderAVFObjC::setTrack):
        (WebCore::transformToRotationProperties): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastPixelBuffer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        * platform/graphics/cv/ImageRotationSessionVT.h: Added.
        (WebCore::ImageRotationSessionVT::RotationProperties::isIdentity const):
        (WebCore::ImageRotationSessionVT::rotationProperties const):
        (WebCore::ImageRotationSessionVT::rotatedSize):
        * platform/graphics/cv/ImageRotationSessionVT.mm: Added.
        (WebCore::transformToRotationProperties):
        (WebCore::ImageRotationSessionVT::ImageRotationSessionVT):
        (WebCore::ImageRotationSessionVT::rotate):
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp:
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.h:
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.mm:
        (WebCore::rotationToAngle):
        (WebCore::RealtimeOutgoingVideoSourceCocoa::rotatePixelBuffer):
        (WebCore::computeRotatedWidthAndHeight): Deleted.

2019-06-24  Zalan Bujtas  <zalan@apple.com>

        [StyleResolver] Pass RenderStyle& instead of RenderStyle* to updateFont() related functions.
        https://bugs.webkit.org/show_bug.cgi?id=199167
        <rdar://problem/52062669>

        Reviewed by Antti Koivisto.

        It is expected to have a valid RenderStyle object here (and existing code relies on it).

        * css/StyleResolver.cpp:
        (WebCore::checkForOrientationChange):
        (WebCore::StyleResolver::updateFont):
        (WebCore::StyleResolver::checkForTextSizeAdjust):
        (WebCore::StyleResolver::checkForZoomChange):
        (WebCore::StyleResolver::checkForGenericFamilyChange):
        * css/StyleResolver.h:

2019-06-24  Antoine Quint  <graouts@apple.com>

        [Pointer Events WPT] Unskip imported/w3c/web-platform-tests/pointerevents/pointerevent_lostpointercapture_is_first.html
        https://bugs.webkit.org/show_bug.cgi?id=197005

        Reviewed by Dean Jackson.

        We were calling processPendingPointerCapture() at the wrong time, calling in after dispatching a PointerEvent rather than before.
        We now do this correctly in the consolidated PointerCaptureController::dispatchEvent() method, which we call for dispatching all
        PointerEvents, save for gotpointercapture and lostpointercapture since these should not yield the processing of the pending pointer
        capture per the spec.

        This uncovered a couple of new issues. First, since we would now call processPendingPointerCapture() and dispatch a lostpointercapture
        event earlier, the alternative lostpointercapture dispatch when an element is removed (which is dispatched asynchronously on the
        document) would be dispatched *after* dispatching the event in processPendingPointerCapture(). We now check in processPendingPointerCapture()
        whether the event target is connected to fix this. This makes sure pointerevent_lostpointercapture_for_disconnected_node.html doesn't regress.

        Finally, we must also call processPendingPointerCapture() when implicitly releasing pointer capture during handling of a "pointerup" event.
        This ensures that pointerevent_releasepointercapture_invalid_pointerid.html doesn't regress.

        As a result of all these changes, we now pass imported/w3c/web-platform-tests/pointerevents/pointerevent_lostpointercapture_is_first.html reliably.

        * page/PointerCaptureController.cpp:
        (WebCore::PointerCaptureController::dispatchEventForTouchAtIndex):
        (WebCore::PointerCaptureController::dispatchEvent): We now more closely adhere to the spec when determining what the pointer capture target is by
        only checking for the target override. We can now do this safely since we call processPendingPointerCapture() before and not after event dispatch.
        (WebCore::PointerCaptureController::pointerEventWasDispatched):
        (WebCore::PointerCaptureController::processPendingPointerCapture): Cache the pending target override to make sure that dispatching a "gotpointercapture"
        or "lostpointercapture" event during this function does not alter it until the next call is made when the next event is dispatched.

2019-06-24  Greg Doolittle  <gr3g@apple.com>

        Web Inspector: AXI: Audit: image label test is throwing spurious errors on elements with existing alt attr, but no value: <img alt>
        https://bugs.webkit.org/show_bug.cgi?id=194754

        Reviewed by Chris Fleizach.

        Test: accessibility/img-alt-attribute-unassigned-value.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::computedRoleString const):

2019-06-24  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Fixes for compilation with unified builds disabled
        https://bugs.webkit.org/show_bug.cgi?id=199155

        Reviewed by Michael Catanzaro.

        No new tests needed.

        * rendering/LayerAncestorClippingStack.h: Add missing inclusion of RenderLayer.h

2019-06-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        Add user agent quirk for Google Drive
        https://bugs.webkit.org/show_bug.cgi?id=199153

        Reviewed by Carlos Garcia Campos.

        This suppresses an unsupported browser warning.

        * platform/UserAgentQuirks.cpp:
        (WebCore::urlRequiresMacintoshPlatform):
        (WebCore::urlRequiresLinuxDesktopPlatform):

2019-06-24  Charlie Turner  <cturner@igalia.com>

        [GStreamer][MSE] Pausing video sometimes causes skip to finish
        https://bugs.webkit.org/show_bug.cgi?id=197355

        Reviewed by Philippe Normand.

        Covered by existing tests.

        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::currentMediaTime const):
        Assuming that when m_eosPending is on and we're paused() that the
        network resource is fully loaded and the end is reached is clearly
        wrong. Whether this is now correct is unclear...

2019-06-24  Charlie Turner  <cturner@igalia.com>

        [GStreamer] Volume level sometimes changes inappropriately
        https://bugs.webkit.org/show_bug.cgi?id=197358

        Reviewed by Xabier Rodriguez-Calvar.

        Be consistent with our application of volume scaling. We were
        setting volumes using cubic interpolation in setVolume() and using
        the inverse in volume(); however setting initial volumes was done
        linearly in setStreamVolumeElement, which was causing strange
        jumps in the volume level at non-deterministic times. The fix
        looks to be that we should use linear interpolation consistently,
        since PulseAudio already applies cubic scaling to software
        volumes.

        Covered by existing tests.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::paused const): Bump the
        logging here to LOG level, it's very spammy at DEBUG.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::setVolume): Switch to
        linear interpolation.
        (WebCore::MediaPlayerPrivateGStreamerBase::volume const): Ditto.
        (WebCore::MediaPlayerPrivateGStreamerBase::notifyPlayerOfVolumeChange):
        Ditto.
        (WebCore::MediaPlayerPrivateGStreamerBase::setStreamVolumeElement):
        Ditto, and be consistent here with the API, do not set the raw
        volume managed by MediaElement.

2019-06-24  Antoine Quint  <graouts@apple.com>

        [Pointer Events] Respect pointer capture when dispatching mouse boundary events and updating :hover
        https://bugs.webkit.org/show_bug.cgi?id=198999
        <rdar://problem/51979477>

        Unreviewed.

        Rolling back all changes made for this bug (r246728 + r246716 + r246674) as it regressed one test
        (imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_pointercapture_in_frame.html).

        * dom/Document.cpp:
        (WebCore::Document::prepareMouseEvent):
        (WebCore::Document::updateHoverActiveState):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::setCapturingMouseEventsElement):
        * page/EventHandler.h:
        * page/PointerCaptureController.cpp:
        (WebCore::PointerCaptureController::releasePointerCapture):
        (WebCore::PointerCaptureController::hasPointerCapture):
        (WebCore::PointerCaptureController::dispatchEventForTouchAtIndex):
        (WebCore::PointerCaptureController::dispatchEvent):
        (WebCore::PointerCaptureController::processPendingPointerCapture):
        (WebCore::PointerCaptureController::pointerCaptureElement): Deleted.
        * page/PointerCaptureController.h:
        * rendering/HitTestRequest.h:
        (WebCore::HitTestRequest::includesAllElementsUnderPoint const):
        (WebCore::HitTestRequest::pointerCaptureElementChanged const): Deleted.

2019-06-23  Antoine Quint  <graouts@apple.com>

        [Pointer Events] Respect pointer capture when dispatching mouse boundary events and updating :hover
        https://bugs.webkit.org/show_bug.cgi?id=198999
        <rdar://problem/52005663>

        Reviewed by Dean Jackson.

        We should only set the mouse events capturing element in EventHandler if we're dealing with mouse-originated Pointer Events (part 2).

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

2019-06-23  Simon Fraser  <simon.fraser@apple.com>

        [Async overflow scroll] Clipped composited layers inside overflow scroll jitter and get incorrectly clipped
        https://bugs.webkit.org/show_bug.cgi?id=199133
        rdar://problem/43614439

        Reviewed by Antti Koivisto.

        Currently a composited layer with an overflow:scroll ancestor (which is not a paint-order
        ancestor) gets a single "ancestor clip layer" that represents the intersection of all the
        clips provided by its containing-block ancestors with non-visible overflow (both scrolling
        and non-scrolling ones).

        To correctly update clips with async overflow scroll, this single clip layer needs to be
        broken up into multiple clipping ancestors. We need a separate layer, and scrolling tree
        node for each ancestor that is an overflow scroll, and layers that represent non-moving
        clips (i.e. overflow:hidden and 'clip') between them. This patch adds
        LayerAncestorClippingStack to represent this stack of clipping layers. For example with the
        following content:
        
        <div style="overflow:hidden"> <--- A
            <div style="overflow:scroll"> <--- B
                <div style="overflow:hidden"> <--- C
                    <div style="overflow:hidden"> <--- D
                        <div style="overflow:scroll">  <--- E
                            <div style="overflow:hidden"> <--- F
                                <div style="overflow:hidden"> <--- G
                                    <div></div> <--- H
                                <div>
                            <div>
                        <div>
                    <div>
                <div>
            <div>
        <div>
        
        the composited RenderLayer for H owns a LayerAncestorClippingStack with the following contents:
            [clip - A]
            [scroller - B]
            [clip - intersection of C and D]
            [scroller - E]
            [clip - intersection of F and G]

        Each stack entry has a 'masksToBounds' GraphicsLayer for clipping. Entries representing
        overflow:scroll clips have a ScrollingNodeID for their OverflowScrollProxy scrolling tree
        node (which references the actual OverflowScrollingNode). The non-scroller clips in this
        stack are computed unconstrained by the enclosing overflow:scroll.

        When the OverflowScrollingNode is scrolled, the boundsOrigin of related OverflowScrollProxy nodes
        is adjusted to move the descendant layers (other clipping layers, or composited layers).

        OverflowScrollProxy nodes thus take over the role that "Moves" ScrollingTreePositionedNode had.
        With this patch, ScrollingTreePositionedNode are purely for absolute position inside non-containing-block
        stacking context overflow scroll. LayoutConstraints is renamed to AbsolutePositionConstraints accordingly.

        Tests: compositing/scrolling/async-overflow-scrolling/clipped-layer-in-overflow-clipped-by-scroll.html
               compositing/scrolling/async-overflow-scrolling/clipped-layer-in-overflow-nested.html
               compositing/scrolling/async-overflow-scrolling/clipped-layer-in-overflow.html
               compositing/scrolling/async-overflow-scrolling/layer-in-overflow-clip-to-hidden.html
               compositing/scrolling/async-overflow-scrolling/layer-in-overflow-clip-to-visible.html
               compositing/scrolling/async-overflow-scrolling/layer-in-overflow-gain-clipping-layer.html
               compositing/scrolling/async-overflow-scrolling/layer-in-overflow-in-clipped.html
               compositing/scrolling/async-overflow-scrolling/layer-in-overflow-lose-clipping-layer.html
               compositing/scrolling/async-overflow-scrolling/layer-in-overflow.html
               scrollingcoordinator/scrolling-tree/clipped-layer-in-overflow-nested.html
               scrollingcoordinator/scrolling-tree/clipped-layer-in-overflow.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::setPositionedNodeConstraints):
        (WebCore::AsyncScrollingCoordinator::setPositionedNodeGeometry): Deleted.
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingConstraints.cpp:
        (WebCore::operator<<):
        * page/scrolling/ScrollingConstraints.h:
        (WebCore::AbsolutePositionConstraints::operator== const):
        (WebCore::AbsolutePositionConstraints::operator!= const):
        (WebCore::LayoutConstraints::operator== const): Deleted.
        (WebCore::LayoutConstraints::operator!= const): Deleted.
        (WebCore::LayoutConstraints::alignmentOffset const): Deleted.
        (WebCore::LayoutConstraints::setAlignmentOffset): Deleted.
        (WebCore::LayoutConstraints::layerPositionAtLastLayout const): Deleted.
        (WebCore::LayoutConstraints::setLayerPositionAtLastLayout): Deleted.
        (WebCore::LayoutConstraints::scrollPositioningBehavior const): Deleted.
        (WebCore::LayoutConstraints::setScrollPositioningBehavior): Deleted.
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::setPositionedNodeConstraints):
        (WebCore::ScrollingCoordinator::setPositionedNodeGeometry): Deleted.
        * page/scrolling/ScrollingStatePositionedNode.cpp:
        (WebCore::ScrollingStatePositionedNode::updateConstraints):
        * page/scrolling/ScrollingStatePositionedNode.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::nodesWithRelatedOverflow):
        (WebCore::ScrollingTree::positionedNodesWithRelatedOverflow): Deleted.
        * page/scrolling/cocoa/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::applyLayerPositions):
        * page/scrolling/cocoa/ScrollingTreeOverflowScrollProxyNode.mm:
        (WebCore::ScrollingTreeOverflowScrollProxyNode::commitStateBeforeChildren):
        * page/scrolling/cocoa/ScrollingTreePositionedNode.h:
        (WebCore::ScrollingTreePositionedNode::scrollPositioningBehavior const): Deleted.
        * page/scrolling/cocoa/ScrollingTreePositionedNode.mm:
        (WebCore::ScrollingTreePositionedNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreePositionedNode::scrollDeltaSinceLastCommit const):
        * page/scrolling/cocoa/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::computeLayerPosition const):
        * rendering/LayerAncestorClippingStack.cpp: Added.
        (WebCore::LayerAncestorClippingStack::LayerAncestorClippingStack):
        (WebCore::LayerAncestorClippingStack::equalToClipData const):
        (WebCore::LayerAncestorClippingStack::hasAnyScrollingLayers const):
        (WebCore::LayerAncestorClippingStack::clear):
        (WebCore::LayerAncestorClippingStack::detachFromScrollingCoordinator):
        (WebCore::LayerAncestorClippingStack::firstClippingLayer const):
        (WebCore::LayerAncestorClippingStack::lastClippingLayer const):
        (WebCore::LayerAncestorClippingStack::lastOverflowScrollProxyNodeID const):
        (WebCore::LayerAncestorClippingStack::updateScrollingNodeLayers):
        (WebCore::LayerAncestorClippingStack::updateWithClipData):
        (WebCore::operator<<):
        * rendering/LayerAncestorClippingStack.h: Added.
        (WebCore::CompositedClipData::CompositedClipData):
        (WebCore::CompositedClipData::operator== const):
        (WebCore::CompositedClipData::operator!= const):
        (WebCore::LayerAncestorClippingStack::stack):
        (WebCore::LayerAncestorClippingStack::stack const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::~RenderLayerBacking):
        (WebCore::RenderLayerBacking::updateDebugIndicators):
        (WebCore::RenderLayerBacking::destroyGraphicsLayers):
        (WebCore::RenderLayerBacking::updateTransform):
        (WebCore::RenderLayerBacking::updateBlendMode):
        (WebCore::RenderLayerBacking::updateAfterLayout):
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::computeOffsetFromAncestorGraphicsLayer):
        (WebCore::RenderLayerBacking::computePrimaryGraphicsLayerRect const):
        (WebCore::RenderLayerBacking::computeParentGraphicsLayerRect const):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::updateInternalHierarchy):
        (WebCore::RenderLayerBacking::updateAncestorClippingStack):
        (WebCore::RenderLayerBacking::updateAncestorClipping):
        (WebCore::RenderLayerBacking::detachFromScrollingCoordinator):
        (WebCore::RenderLayerBacking::scrollingNodeIDForChildren const):
        (WebCore::RenderLayerBacking::childForSuperlayers const):
        (WebCore::RenderLayerBacking::backingStoreMemoryEstimate const):
        (WebCore::operator<<):
        (WebCore::RenderLayerBacking::updateAncestorClippingLayer): Deleted.
        (WebCore::RenderLayerBacking::coordinatedScrollingRoles const): Deleted.
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::didChangePlatformLayerForLayer):
        (WebCore::RenderLayerCompositor::updateBackingAndHierarchy):
        (WebCore::RenderLayerCompositor::layerStyleChanged): We need to run the checks for changed
        clipping whether or not this layer has backing, because a non-composited layer with clipping can be
        represented in the clipping stack of some other layer.
        (WebCore::RenderLayerCompositor::clippedByAncestor const):
        (WebCore::RenderLayerCompositor::updateAncestorClippingStack const):
        (WebCore::RenderLayerCompositor::computeAncestorClippingStack const): The output of this function
        is a Vector<CompositedClipData> which represents the ancestor clipping stack, but without the proxy node
        and GraphicsLayer information. It's input to LayerAncestorClippingStack::updateWithClipData() which does
        the merging of old and new states.
        (WebCore::collectRelatedCoordinatedScrollingNodes):
        (WebCore::RenderLayerCompositor::removeFromScrollCoordinatedLayers):
        (WebCore::scrollCoordinationRoleForNodeType):
        (WebCore::RenderLayerCompositor::attachScrollingNode):
        (WebCore::RenderLayerCompositor::registerScrollingNodeID):
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayerWithRole):
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayer):
        (WebCore::RenderLayerCompositor::coordinatedScrollingRolesForLayer const): Code moved from RenderLayerBacking.
        (WebCore::RenderLayerCompositor::updateScrollCoordinationForLayer):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForScrollingProxyRole):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForPositioningRole):
        * rendering/RenderLayerCompositor.h:
        (WebCore::allScrollCoordinationRoles):

2019-06-23  Simon Fraser  <simon.fraser@apple.com>

        Add OverflowScrollProxyNodes to the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=199132

        Reviewed by Antti Koivisto.

        Add ScrollingStateOverflowScrollProxyNode and ScrollingTreeOverflowScrollProxyNode. These
        nodes represent clip and scroll position for an overflow:scroll in the containing block chain,
        but not the paint ancestor chain of a layer. They will be used to correctly manipulate clip
        rects for composited layers in non-stacking-context scrollers, and in a future patch will
        replace the functionality of "Moves" positioned nodes.

        An OverflowScrollProxyNode has the ScrollingNodeID of the scrolling node that it relates to,
        and we use the existing "related overflow nodes" to create the back references in the scrolling tree.

        These nodes are not instantiated yet; a future patch will hook them up.

        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::setRelatedOverflowScrollingNodes):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::operator<<):
        * page/scrolling/ScrollingCoordinatorTypes.h:
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::isOverflowScrollProxyNode const):
        * page/scrolling/ScrollingStateOverflowScrollProxyNode.cpp: Added.
        (WebCore::ScrollingStateOverflowScrollProxyNode::create):
        (WebCore::ScrollingStateOverflowScrollProxyNode::ScrollingStateOverflowScrollProxyNode):
        (WebCore::ScrollingStateOverflowScrollProxyNode::clone):
        (WebCore::ScrollingStateOverflowScrollProxyNode::setOverflowScrollingNode):
        (WebCore::ScrollingStateOverflowScrollProxyNode::dumpProperties const):
        * page/scrolling/ScrollingStateOverflowScrollProxyNode.h: Copied from Source/WebCore/page/scrolling/ScrollingStateOverflowScrollingNode.cpp.
        (WebCore::ScrollingStateOverflowScrollProxyNode::overflowScrollingNode const):
        * page/scrolling/ScrollingStateOverflowScrollingNode.cpp:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::createNode):
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::isOverflowScrollProxyNode const):
        * page/scrolling/ScrollingTreeOverflowScrollProxyNode.cpp: Added.
        (WebCore::ScrollingTreeOverflowScrollProxyNode::create):
        (WebCore::ScrollingTreeOverflowScrollProxyNode::ScrollingTreeOverflowScrollProxyNode):
        (WebCore::ScrollingTreeOverflowScrollProxyNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeOverflowScrollProxyNode::applyLayerPositions):
        (WebCore::ScrollingTreeOverflowScrollProxyNode::dumpProperties const):
        * page/scrolling/ScrollingTreeOverflowScrollProxyNode.h: Copied from Source/WebCore/page/scrolling/ScrollingStateOverflowScrollingNode.cpp.
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/cocoa/ScrollingTreeOverflowScrollProxyNode.h: Copied from Source/WebCore/page/scrolling/ScrollingStateOverflowScrollingNode.cpp.
        (WebCore::ScrollingTreeOverflowScrollProxyNode::overflowScrollingNodeID const):
        (WebCore::ScrollingTreeOverflowScrollProxyNode::layer const):
        * page/scrolling/cocoa/ScrollingTreeOverflowScrollProxyNode.mm: Added.
        (WebCore::ScrollingTreeOverflowScrollProxyNode::create):
        (WebCore::ScrollingTreeOverflowScrollProxyNode::ScrollingTreeOverflowScrollProxyNode):
        (WebCore::ScrollingTreeOverflowScrollProxyNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeOverflowScrollProxyNode::scrollDeltaSinceLastCommit const):
        (WebCore::ScrollingTreeOverflowScrollProxyNode::applyLayerPositions):
        (WebCore::ScrollingTreeOverflowScrollProxyNode::dumpProperties const):
        * page/scrolling/cocoa/ScrollingTreePositionedNode.mm:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        * page/scrolling/mac/ScrollingTreeMac.cpp:
        (ScrollingTreeMac::createScrollingTreeNode):
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::repositionScrollingLayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::scrollCoordinationRoleForNodeType):

2019-06-23  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Non-baseline aligned inline container should not mutate the baseline
        https://bugs.webkit.org/show_bug.cgi?id=199129
        <rdar://problem/52022533>

        Reviewed by Antti Koivisto.

        Only baseline aligned inline container (<span style="vertical-aligned: baseline">) should adjust line's baseline.
        This patch also fixes m_baselineTop's value when we apply the initial strut.

        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::isInlineContainerConsideredEmpty):
        (WebCore::Layout::Line::isVisuallyEmpty const):
        (WebCore::Layout::Line::adjustBaselineAndLineHeight):

2019-06-22  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] The anonymous InlineBox wrapper for the text node should take the parent style.
        https://bugs.webkit.org/show_bug.cgi?id=199127
        <rdar://problem/52017744>

        Reviewed by Antti Koivisto.

        <span style="vertical-align: bottom">bottom aligned text</span>
        The InlineBox wrapper for the "bottom aligned text" content should take the parent span's style.

        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createSubTree):

2019-06-22  Antoine Quint  <graouts@apple.com>

        [Pointer Events] Respect pointer capture when dispatching mouse boundary events and updating :hover
        https://bugs.webkit.org/show_bug.cgi?id=198999
        <rdar://problem/52005663>

        Reviewed by Dean Jackson.

        We should only set the mouse events capturing element in EventHandler if we're dealing with mouse-originated Pointer Events.

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

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

        Accessibility objects contained in links should honor the aria-haspopup attribute in the ancestor link.
        https://bugs.webkit.org/show_bug.cgi?id=199107
        <rdar://problem/43663611>

        Reviewed by Chris Fleizach.

        Tests: accessibility/ios-simulator/button-with-aria-haspopup-role.html
               accessibility/ios-simulator/element-haspopup.html

        If an accessibility object is contained within an <a>, we should check
        the aria-haspopup attribute on the ancestor <a> element. This was done
        before in the iOS WebKit accessibility bunddle override.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::hasPopup const):

2019-06-22  Robin Morisset  <rmorisset@apple.com> and Yusuke Suzuki  <ysuzuki@apple.com>

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

        Reviewed by Saam Barati.

        * bindings/js/JSDOMIterator.h:
        (WebCore::IteratorTraits>::finishCreation):
        * bindings/js/JSDOMWindowProperties.h:
        (WebCore::JSDOMWindowProperties::create): Deleted.
        (WebCore::JSDOMWindowProperties::createStructure): Deleted.
        (WebCore::JSDOMWindowProperties::JSDOMWindowProperties): Deleted.
        * 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/JSTestEnabledForContext.cpp:
        (WebCore::JSTestEnabledForContextPrototype::JSTestEnabledForContextPrototype):
        * 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-06-22  Mike Gorse  <mgorse@suse.com>

        webkitgtk 2.24.2 fails to build w/gstreamer 1.12.5
        https://bugs.webkit.org/show_bug.cgi?id=198080

        Reviewed by Philippe Normand.

        No new tests (build fix only).

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        Move includes of gst/gl/gl.h and epoxy/gl.h into
        MediaPlayerPrivateGStreamerBase.h.

2019-06-21  Sihui Liu  <sihui_liu@apple.com>

        openDatabase should return an empty object when WebSQL is disabled
        https://bugs.webkit.org/show_bug.cgi?id=198805

        Reviewed by Geoffrey Garen.

        Some websites rely on calling openDatabase with null parameters to check for private browsing. To not break 
        those sites, we now expose openDatabase interface even if Web SQL is disabled. When Web SQL is disabled, 
        window.openDatabase returns false, but it is callable and returns empty object.

        Test: WebSQL.OpenDatabaseAlwaysExists

        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowInstanceFunctionOpenDatabaseBody):
        (WebCore::IDLOperation<JSDOMWindow>::cast):
        (WebCore::jsDOMWindowInstanceFunctionOpenDatabase):
        (WebCore::JSDOMWindow::openDatabase const):

2019-06-21  Ryosuke Niwa  <rniwa@webkit.org>

        Nullptr crash in DeleteSelectionCommand::handleGeneralDelete
        https://bugs.webkit.org/show_bug.cgi?id=199126

        Reviewed by Wenson Hsieh.

        Added null checks to handleGeneralDelete as well as mergeParagraphs which runs after handleGeneralDelete to be defensive.

        Unfortunately no new tests since there is no reproducible test case.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        (WebCore::DeleteSelectionCommand::mergeParagraphs):

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

        ResourceLoadNotifier should check whether its frame document loader is null
        https://bugs.webkit.org/show_bug.cgi?id=199118

        Reviewed by Geoffrey Garen.

        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):

2019-06-21  Jiewen Tan  <jiewen_tan@apple.com>

        WebPageProxy::loadData should accept ShouldOpenExternalURLsPolicy
        https://bugs.webkit.org/show_bug.cgi?id=199114
        <rdar://problem/51671674>

        Reviewed by Youenn Fablet.

        Covered by new test content within existing tests.

        * loader/FrameLoaderTypes.h:
        Adds an EnumTraits for ShouldOpenExternalURLsPolicy.

2019-06-21  Saam Barati  <sbarati@apple.com>

        [WHLSL] Code that accesses an undefined variable crashes
        https://bugs.webkit.org/show_bug.cgi?id=198775

        Reviewed by Myles C. Maxfield.

        Myles mostly fixed this in r246631 when he made NameResolver propagate
        its error to its parent NameResolver. However, there was still one bug
        where we ended up calling setError twice for an if statement. This patch
        fixes that and adds tests.

        Tests: webgpu/whlsl-use-undefined-variable-2.html
               webgpu/whlsl-use-undefined-variable.html

        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:
        (WebCore::WHLSL::NameResolver::visit):

2019-06-21  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r246611.

        Introduced a flakey test.

        Reverted changeset:

        "iOS 12.2 Drawing portrait video to canvas is sideways"
        https://bugs.webkit.org/show_bug.cgi?id=196772
        https://trac.webkit.org/changeset/246611

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

        Preview of <picture> element doesn't match element bounds
        https://bugs.webkit.org/show_bug.cgi?id=199049
        <rdar://problem/51474402>

        Reviewed by Simon Fraser.

        Test: fast/text-indicator/text-indicator-uses-img-size-inside-picture.html

        * dom/DOMRectReadOnly.idl:
        * dom/Range.cpp:
        (WebCore::Range::absoluteRectsForRangeInText const):
        (WebCore::Range::absoluteTextRects const):
        (WebCore::Range::borderAndTextRects const):
        (WebCore::Range::boundingRect const):
        (WebCore::Range::absoluteBoundingRect const):
        * dom/Range.h:
        (WebCore::Range::absoluteTextRects):
        (WebCore::Range::absoluteBoundingRect):
        (WebCore::Range::borderAndTextRects):
        (WebCore::Range::boundingRect):
        * page/TextIndicator.cpp:
        (WebCore::absoluteBoundingRectForRange):
        (WebCore::estimatedBackgroundColorForRange):
        (WebCore::initializeIndicator):
        * rendering/RenderBlock.h:
        * testing/Internals.cpp:
        (WebCore::Internals::TextIndicatorData::TextIndicatorData):
        (WebCore::Internals::TextIndicatorData::~TextIndicatorData):
        (WebCore::Internals::textIndicatorForRange):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        Safari crashes after ~2028 OfflineAudioContext objects are created (they never get garbage collected, consuming a thread each)
        https://bugs.webkit.org/show_bug.cgi?id=198964
        <rdar://problem/51891520>

        Reviewed by Jer Noble.

        Move from setPendingActivity/unsetPendingActivity to an
        m_pendingActivity member which is easier to manage.

        Keep setting a pending activity for AudioContext at construction time
        but do not do that for Offline contexts.
        Instead, set the pending activity when startRendering is called.
        Unset the pending activity when the rendering activity is finished.

        Make m_audioDecoder a unique pointer so that it can lazily be initialized.
        This removes the burden of creating an audio decoder thread for each context.

        Test: webaudio/offlineaudiocontext-gc.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::constructCommon):
        (WebCore::AudioContext::clear):
        (WebCore::AudioContext::decodeAudioData):
        (WebCore::AudioContext::startRendering):
        (WebCore::AudioContext::finishedRendering):
        (WebCore::AudioContext::dispatchEvent):
        (WebCore::AudioContext::clearPendingActivity):
        (WebCore::AudioContext::makePendingActivity):
        To keep it consistent with setPendingActivity/unsetPendingActivity, we
        explicitly ref/unref the AudioContext. We should try to remove this ref/unref.
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::startRendering):

2019-06-21  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r246655.

        Introduced a failing test

        Reverted changeset:

        "Web Inspector: AXI: Audit: image label test is throwing
        spurious errors on elements with existing alt attr, but no
        value: <img alt>"
        https://bugs.webkit.org/show_bug.cgi?id=194754
        https://trac.webkit.org/changeset/246655

2019-06-21  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] read modify write expressions do no work as expected
        https://bugs.webkit.org/show_bug.cgi?id=195864

        Reviewed by Saam Barati.

        Turns out https://bugs.webkit.org/show_bug.cgi?id=199037 already fixed everything.
        This patch just adds a test.

        Test: webgpu/whlsl-read-modify-write.html

        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:

2019-06-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Adjust baseline top when the baseline moves.
        https://bugs.webkit.org/show_bug.cgi?id=199091
        <rdar://problem/51966257>

        Reviewed by Antti Koivisto.

        Currently only "text-align: bottom" adjusts the baseline top. This patch fixes the "text-align: baseline" case when
        the growing ascent pushes the baseline top closer to the line top.

        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::adjustBaselineAndLineHeight):

2019-06-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Rename Line::m_contentLogicalHeight to m_lineLogicalHeight
        https://bugs.webkit.org/show_bug.cgi?id=199100
        <rdar://problem/51973614>

        Reviewed by Antti Koivisto.

        m_logicalLineHeight name seems more appropriate at this point (though the line heigh is driven by the content height).

        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::close):
        (WebCore::Layout::Line::adjustBaselineAndLineHeight):
        * layout/inlineformatting/InlineLine.h:
        (WebCore::Layout::Line::logicalHeight const):

2019-06-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] LineBox::Baseline should have a height getter.
        https://bugs.webkit.org/show_bug.cgi?id=199092
        <rdar://problem/51966958>

        Reviewed by Antti Koivisto.

        The baseline height does not need to be a getter on the Line (no one calls it).

        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::adjustBaselineAndLineHeight):
        * layout/inlineformatting/InlineLine.h:
        (WebCore::Layout::Line::contentLogicalWidth const):
        (WebCore::Layout::Line::baselineAlignedContentHeight const): Deleted.
        * layout/inlineformatting/InlineLineBox.h:
        (WebCore::Layout::LineBox::Baseline::height const):

2019-06-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Bump minimum versions of GLib, GTK, libsoup, ATK, GStreamer, and Cairo
        https://bugs.webkit.org/show_bug.cgi?id=199094

        Reviewed by Carlos Garcia Campos.

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/atk/WebKitAccessible.cpp:
        (atkRole):
        (setAtkStateSetFromCoreObject):
        (interfaceMaskFromObject):
        * accessibility/atk/WebKitAccessibleInterfaceTableCell.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceTableCell.h:
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (webkitAccessibleTextGetStringAtOffset):
        (webkitAccessibleTextInterfaceInit):
        * accessibility/atk/WebKitAccessibleInterfaceValue.cpp:
        (webkitAccessibleValueInterfaceInit):
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:
        (WebCore::AudioTrackPrivateGStreamer::kind const):
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::derefGPtr<GstStreamCollection>):
        * platform/graphics/gstreamer/GRefPtrGStreamer.h:
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::initializeGStreamerAndRegisterWebKitElements):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::InbandTextTrackPrivateGStreamer):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        (WebCore::InbandTextTrackPrivateGStreamer::create):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load):
        (WebCore::MediaPlayerPrivateGStreamer::updateTracks):
        (WebCore::MediaPlayerPrivateGStreamer::enableTrack):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::sourceSetup):
        (WebCore::MediaPlayerPrivateGStreamer::handleSyncMessage):
        (WebCore::MediaPlayerPrivateGStreamer::supportsType):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::requestGLContext):
        (WebCore::MediaPlayerPrivateGStreamerBase::createGLAppSink):
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSinkGL):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer):
        (WebCore::TrackPrivateBaseGStreamer::disconnect):
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        (WebCore::TrackPrivateBaseGStreamer::stream):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:
        (WebCore::VideoTrackPrivateGStreamer::kind const):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:
        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::eventTypeForGdkKeyEvent):
        * platform/gtk/PlatformMouseEventGtk.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        (WebCore::screenHasTouchDevice):
        (WebCore::screenIsTouchPrimaryInputDevice):
        (): Deleted.
        (WebCore::isTouchDevice): Deleted.
        (WebCore::deviceAddedCallback): Deleted.
        (WebCore::deviceRemovedCallback): Deleted.
        * platform/gtk/PlatformWheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/gtk/RenderThemeGadget.cpp:
        * platform/gtk/RenderThemeGadget.h:
        * platform/gtk/RenderThemeWidget.cpp:
        * platform/gtk/RenderThemeWidget.h:
        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::ScrollbarThemeGtk::ScrollbarThemeGtk):
        (WebCore::ScrollbarThemeGtk::themeChanged):
        (WebCore::ScrollbarThemeGtk::updateThemeProperties):
        (WebCore::ScrollbarThemeGtk::trackRect):
        (WebCore::ScrollbarThemeGtk::forwardButtonRect):
        (WebCore::ScrollbarThemeGtk::paint):
        (WebCore::ScrollbarThemeGtk::scrollbarThickness):
        (WebCore::createStyleContext): Deleted.
        (WebCore::createChildStyleContext): Deleted.
        (WebCore::paintStepper): Deleted.
        (WebCore::adjustRectAccordingToMargin): Deleted.
        * platform/mediastream/gstreamer/GStreamerCapturer.cpp:
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        * platform/network/soup/ResourceRequest.h:
        (WebCore::toSoupMessagePriority):
        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::SoupNetworkSession):
        * rendering/RenderThemeGtk.cpp:
        (WebCore::themePartStateFlags):
        (WebCore::paintToggle):
        (WebCore::RenderThemeGtk::paintButton):
        (WebCore::menuListColor):
        (WebCore::RenderThemeGtk::paintMenuList):
        (WebCore::RenderThemeGtk::paintTextField):
        (WebCore::adjustSearchFieldIconStyle):
        (WebCore::RenderThemeGtk::paintSearchFieldCancelButton):
        (WebCore::RenderThemeGtk::paintSliderThumb):
        (WebCore::RenderThemeGtk::paintProgressBar):
        (WebCore::RenderThemeGtk::paintInnerSpinButton):
        (WebCore::styleColor):
        (WebCore::RenderThemeGtk::systemColor const):
        (WebCore::RenderThemeGtk::paintMediaButton):
        (WebCore::createStyleContext): Deleted.
        (WebCore::loadThemedIcon): Deleted.
        (WebCore::gtkTextDirection): Deleted.
        (WebCore::gtkIconStateFlags): Deleted.
        (WebCore::adjustRectForFocus): Deleted.
        (WebCore::renderButton): Deleted.
        (WebCore::getIconSizeForPixelSize): Deleted.
        (WebCore::paintIcon): Deleted.
        (WebCore::paintEntryIcon): Deleted.
        (WebCore::centerRectVerticallyInParentInputElement): Deleted.
        (WebCore::spinButtonArrowSize): Deleted.
        (WebCore::paintSpinArrowButton): Deleted.

2019-06-20  Antoine Quint  <graouts@apple.com>

        [Pointer Events] Respect pointer capture when dispatching mouse boundary events and updating :hover
        https://bugs.webkit.org/show_bug.cgi?id=198999

        Reviewed by Dean Jackson.

        Up until now, we would not account for pointer capture (see https://w3c.github.io/pointerevents/#pointer-capture) when dispatching
        mouse boundary events (mouseover, mouseout, mouseenter, mouseleave) and their counterpart pointer events. We would also not account
        for it when updating :hover styles.

        Now, when pointer capture changes for an element, we call setCapturingMouseEventsElement() on the EventHandler such that the element
        that would naturally hit-test is overridden by the pointer capture element when identifying which target to use for the dispatch of
        boundary mouse events. Additionally, when calling EventHandler::prepareMouseEvent(), we also use the pointer capture element to
        eventually pass down to Document::updateHoverActiveState() such that :hover styles are applied to the correct element.

        This also means that we need to re-run EventHandler::prepareMouseEvent() during mouse state changes to ensure that the :hover styles
        are applied correctly should the pointer capture element change during dispatch of boundary mouse events.

        * dom/Document.cpp:
        (WebCore::Document::prepareMouseEvent): If there is one, use the pointer capture element instead of the hit-test target.
        (WebCore::Document::updateHoverActiveState): Relax the mustBeInActiveChain condition in case the pointer capture element changed when
        updating the :hover/:active chains.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent): Re-process the mouse event if the pointer capture element changed during event dispatch.
        (WebCore::EventHandler::handleMouseMoveEvent): Re-process the mouse event if the pointer capture element changed during event dispatch.
        (WebCore::EventHandler::handleMouseReleaseEvent): As we know the pointer capture element will be reset as part of the mouse being
        released, we reset the pointer capture element and EventHandler's capture element prior to invalidating hover styles and boundary events.
        (WebCore::EventHandler::setCapturingMouseEventsElement): Dispatch boundary events when a new element is set.
        (WebCore::EventHandler::dispatchMouseEvent): New dispatchMouseEvent() variant that re-processes the provided MouseEventWithHitTestResults
        in case the pointer capture element changes during event dispatch, as called by handleMousePressEvent() and handleMouseMoveEvent().
        * page/EventHandler.h:
        * page/PointerCaptureController.cpp:
        (WebCore::PointerCaptureController::pointerCaptureElement): We now need to query whay the pointer capture element might be from EventHandler,
        so expose a new method to access it.
        (WebCore::PointerCaptureController::releasePointerCapture): Since we may not call processPendingPointerCapture() until the dispatch of the
        next event, we must reset EventHandler's capturing mouse element right now so that the next event processed does not use it as an overriding target.
        (WebCore::PointerCaptureController::hasPointerCapture): We would mistakenly return true if the provided element was null, which could be the
        case of EventHandler's capturing element. Rather than changing call sites to check that the provided value exists, we change the method to
        return false when the provided element is null. Note that this does not affect the API since it's exposed on Element itself.
        (WebCore::PointerCaptureController::dispatchEventForTouchAtIndex): Call dispatchEvent() instead of calling pointerEventWillBeDispatched() and
        pointerEventWasDispatched().
        (WebCore::PointerCaptureController::dispatchEvent): Remove all code specific to pointer capture since now the events will be dispatched on the
        pointer capture element by EventHandler.
        (WebCore::PointerCaptureController::processPendingPointerCapture): Make sure this method is not re-entrant since it dispatches events.
        * page/PointerCaptureController.h:
        * rendering/HitTestRequest.h:
        (WebCore::HitTestRequest::pointerCaptureElementChanged const): Add a new HitTestRequestType bit such that we can indicate to Document::updateHoverActiveState()
        that it must be update the :hover/:active chains when the pointer capture element has just changed.

2019-06-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Stop pretending WebCore::Widget can have a platform widget
        https://bugs.webkit.org/show_bug.cgi?id=199066

        Reviewed by Michael Catanzaro.

        That was only possible in legacy WebKit that we no longer support. The code can be simplified a bit.

        * platform/Widget.cpp:
        (WebCore::Widget::init):
        * platform/Widget.h:
        (WebCore::Widget::setPlatformWidget):
        (WebCore::Widget::releasePlatformWidget): Deleted.
        (WebCore::Widget::retainPlatformWidget): Deleted.
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::systemVisual):
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        (WebCore::getToplevel): Deleted.
        (WebCore::getVisual): Deleted.
        (WebCore::getScreen): Deleted.
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::~Widget):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::setIsSelected):
        (WebCore::Widget::setFrameRect):
        (WebCore::Widget::releasePlatformWidget): Deleted.
        (WebCore::Widget::retainPlatformWidget): Deleted.
        * platform/ios/WidgetIOS.mm:
        (WebCore::Widget::~Widget):

2019-06-20  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to include clipping in GraphicsLayer tree dumps
        https://bugs.webkit.org/show_bug.cgi?id=199096

        Reviewed by Zalan Bujtas.

        Add LAYER_TREE_INCLUDES_CLIPPING and plumb it down to GraphicsLayers, turning
        it on for a couple of tests.

        * page/Frame.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties const):
        * platform/graphics/GraphicsLayerClient.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        * testing/Internals.cpp:
        (WebCore::toLayerTreeFlags):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        [iOS] Evernote crashes when creating a note
        https://bugs.webkit.org/show_bug.cgi?id=199083
        <rdar://problem/51759247>

        Reviewed by Brent Fulgham.

        Add runtime check whether WebKit is being used in Evernote. Evernote's bundle ID
        references iPhone, but they use the same ID for their iPad app as well.

        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isEvernote): Added.

2019-06-20  Greg Doolittle  <gr3g@apple.com>

        Web Inspector: AXI: Audit: image label test is throwing spurious errors on elements with existing alt attr, but no value: <img alt>
        https://bugs.webkit.org/show_bug.cgi?id=194754

        Reviewed by Chris Fleizach.

        Test: accessibility/img-alt-attribute-unassigned-value.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::computedRoleString const):

2019-06-20  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r245912): Crash in TextIterator::range via visiblePositionForIndexUsingCharacterIterator
        https://bugs.webkit.org/show_bug.cgi?id=199061

        Reviewed by Wenson Hsieh.

        Avoid calling CharacterIterator::range when it's at the end. Otherwise, we'd crash with null pointer dereferencing.

        Unfortunately no new tests since we don't have any reproducible test case.

        * editing/Editing.cpp:
        (WebCore::visiblePositionForIndexUsingCharacterIterator):

2019-06-20  Brent Fulgham  <bfulgham@apple.com>

        Resolve frequent crashes in topPrivatelyControlledDomain
        https://bugs.webkit.org/show_bug.cgi?id=199072
        <rdar://problem/51428162>

        Reviewed by Youenn Fablet.

        Crash data indicates that we are frequently crashing when multiple threads call
        WebCore::topPrivatelyControlledDomain. 

        Code review showed the potential for a thread contention issue, since WebKit builds
        with '--fno-threadsafe-statics'.

        This patch corrects the thread safety issue in WebCore::topPrivatelyControlledDomain.

        * platform/mac/PublicSuffixMac.mm:
        (WebCore::topPrivatelyControlledDomain): Only instantiate the static cache after the
        current thread has achieved its lock.

2019-06-20  Saam Barati  <sbarati@apple.com>

        [WHLSL] Property resolver needs to recurse on newValueExpression for RMW operations
        https://bugs.webkit.org/show_bug.cgi?id=199037

        Reviewed by Myles C. Maxfield.

        When we had an expression like `<e1> += <e2>`, we weren't running the property
        resolver on <e2>. If <e2> was something like `mat[1][2]`, we wouldn't end up
        simplifying that into the needed getter calls. This patch fixes this by having
        the property resolver recurse on <e2>.
        
        This patch also fixes a bug in the property resolver where we weren't marking some
        dereference expressions as LValues. This was causing bugs in the metal code generator.
        
        This patch also adds a way to dump the AST between passes that are
        guaranteed to not fail.

        Test: webgpu/whlsl-read-modify-write-high-zombies.html

        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        (WebCore::WHLSL::prepareShared):
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        (WebCore::WHLSL::PropertyResolver::visit):
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:

2019-06-20  John Wilander  <wilander@apple.com>

        Storage Access API: Cap the number of times an iframe document can request access
        https://bugs.webkit.org/show_bug.cgi?id=199074
        <rdar://problem/51857195>

        Reviewed by Brent Fulgham.

        Tested manually.

        This change just adds a counter to the number of times the user explicitly
        denies storage access and returns early if the counter has reached the limit
        of 2.

        We hoped that iframes that request storage access would count the number
        of times the user has been asked and not repeat the request over and over.
        However, we're seeing pretty aggressive use of the API and users are
        complaining. Therefore, we need a cap on how many times an iframed
        document can ask if it is explicitly denied access by the user.

        This is a first measure. If we see continued aggressive use of the API,
        we'll have to consider more drastic measures.

        * dom/DocumentStorageAccess.cpp:
        (WebCore::DocumentStorageAccess::requestStorageAccess):
        * dom/DocumentStorageAccess.h:

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

        Changing settings of a MediaStreamTrack clone should not alter the settings of the original track
        https://bugs.webkit.org/show_bug.cgi?id=198840

        Reviewed by Eric Carlson.

        Rename RealtimeVideoSource in RealtimeVideoCaptureSource.
        Introduce RealtimeVideoSource as a class wrapping RealtimeVideoCaptureSource.
        Its goal is to be able to have independent settings from its underlying RealtimeVideoCaptureSource.
        It can also adapt size based on its settings if different than its RealtimeVideoCaptureSource.
        Apply this wrapping for AV video sources as well as mock video sources.
        Test: fast/mediastream/mediastreamtrack-video-clone.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::clone):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeVideoCaptureSource.cpp: Added.
        (WebCore::RealtimeVideoCaptureSource::RealtimeVideoCaptureSource):
        (WebCore::RealtimeVideoCaptureSource::~RealtimeVideoCaptureSource):
        (WebCore::RealtimeVideoCaptureSource::prepareToProduceData):
        (WebCore::RealtimeVideoCaptureSource::presets):
        (WebCore::RealtimeVideoCaptureSource::setSupportedPresets):
        (WebCore::RealtimeVideoCaptureSource::standardVideoSizes):
        (WebCore::updateMinMax):
        (WebCore::RealtimeVideoCaptureSource::updateCapabilities):
        (WebCore::RealtimeVideoCaptureSource::supportsSizeAndFrameRate):
        (WebCore::RealtimeVideoCaptureSource::frameRateRangeIncludesRate):
        (WebCore::RealtimeVideoCaptureSource::presetSupportsFrameRate):
        (WebCore::RealtimeVideoCaptureSource::supportsCaptureSize):
        (WebCore::RealtimeVideoCaptureSource::shouldUsePreset):
        (WebCore::RealtimeVideoCaptureSource::bestSupportedSizeAndFrameRate):
        (WebCore::RealtimeVideoCaptureSource::setSizeAndFrameRate):
        (WebCore::RealtimeVideoCaptureSource::adaptVideoSample):
        (WebCore::RealtimeVideoCaptureSource::dispatchMediaSampleToObservers):
        (WebCore::RealtimeVideoCaptureSource::clientUpdatedSizeAndFrameRate):
        (WebCore::SizeAndFrameRate::toJSONObject const):
        (WebCore::SizeAndFrameRate::toJSONString const):
        * platform/mediastream/RealtimeVideoCaptureSource.h: Added.
        (WebCore::RealtimeVideoCaptureSource::sampleRotation const):
        (WebCore::RealtimeVideoCaptureSource::prefersPreset):
        (WebCore::RealtimeVideoCaptureSource::setFrameRateWithPreset):
        (WebCore::RealtimeVideoCaptureSource::canResizeVideoFrames const):
        (WebCore::RealtimeVideoCaptureSource::setDefaultSize):
        (WebCore::RealtimeVideoCaptureSource::observedFrameRate const):
        (WTF::LogArgument<WebCore::SizeAndFrameRate>::toString):
        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::RealtimeVideoSource):
        (WebCore::m_source):
        (WebCore::RealtimeVideoSource::~RealtimeVideoSource):
        (WebCore::RealtimeVideoSource::startProducingData):
        (WebCore::RealtimeVideoSource::stopProducingData):
        (WebCore::RealtimeVideoSource::supportsSizeAndFrameRate):
        (WebCore::RealtimeVideoSource::setSizeAndFrameRate):
        (WebCore::RealtimeVideoSource::sourceMutedChanged):
        (WebCore::RealtimeVideoSource::sourceSettingsChanged):
        (WebCore::RealtimeVideoSource::preventSourceFromStopping):
        (WebCore::RealtimeVideoSource::sourceStopped):
        (WebCore::RealtimeVideoSource::videoSampleAvailable):
        (WebCore::RealtimeVideoSource::clone):
        * platform/mediastream/RealtimeVideoSource.h:
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        (WebCore::GStreamerVideoCaptureSource::GStreamerVideoCaptureSource):
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::create):
        (WebCore::AVVideoCaptureSource::AVVideoCaptureSource):
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSource::create):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::create):
        (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource):
        (WebCore::MockRealtimeVideoSource::supportsSizeAndFrameRate):
        (WebCore::MockRealtimeVideoSource::setSizeAndFrameRate):
        * platform/mock/MockRealtimeVideoSource.h:

2019-06-20  Saam Barati  <sbarati@apple.com>

        Unreviewed. More speculative build fixing for watchOS after r246631.

        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:

2019-06-20  Saam Barati  <sbarati@apple.com>

        Unreviewed. Speculative build fix for watchOS after r246631.

        * Modules/webgpu/WHLSL/WHLSLVisitor.cpp:

2019-06-18  Darin Adler  <darin@apple.com>

        Tidy up the remaining bits of the AtomicString to AtomString rename
        https://bugs.webkit.org/show_bug.cgi?id=198990

        Reviewed by Michael Catanzaro.

        * bindings/scripts/test/JS/JSTestObj.cpp: Updated names.
        * bindings/scripts/test/TestObj.idl: Ditto.

        * css/makeprop.pl: Updated comment.
        * css/makevalues.pl: Ditto.
        * html/FormController.cpp:
        (WebCore::FormKeyGenerator::formKey): Ditto.

2019-06-20  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Make the initial strut explicit
        https://bugs.webkit.org/show_bug.cgi?id=199057
        <rdar://problem/51927864>

        Reviewed by Antti Koivisto.

        The strut always sets the initial vertical constraints on the new line in strict mode. However in quirks mode
        we can ignore it as long as there's no baseline type content on the line.  

        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::LineLayout::placeInlineItems const):
        * layout/inlineformatting/InlineFormattingContextQuirks.cpp:
        (WebCore::Layout::InlineFormattingContext::Quirks::lineHeightConstraints):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::appendTextContent):
        (WebCore::Layout::Line::appendHardLineBreak):
        (WebCore::Layout::Line::adjustBaselineAndLineHeight):
        * layout/inlineformatting/InlineLine.h:

2019-06-20  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Introduce Line::InitialConstraints
        https://bugs.webkit.org/show_bug.cgi?id=199056
        <rdar://problem/51927597>

        Reviewed by Antti Koivisto.

        Line::InitialConstraints, as the name suggests, holds the initial constraint values for the new line. 

        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::LineLayout::LineInput::LineInput):
        (WebCore::Layout::InlineFormattingContext::LineLayout::placeInlineItems const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::layout const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::computedIntrinsicWidth const):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::Line):
        (WebCore::Layout::m_skipVerticalAligment):
        (WebCore::Layout::m_lineLogicalWidth): Deleted.
        * layout/inlineformatting/InlineLine.h:

2019-06-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove support for GTK2 plugins
        https://bugs.webkit.org/show_bug.cgi?id=199065

        Reviewed by Sergio Villar Senin.

        * PlatformGTK.cmake:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * platform/FreeType.cmake:
        * platform/SourcesGLib.txt:
        * platform/graphics/Color.h:
        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::createPlatformDisplay):
        * platform/graphics/gtk/ColorGtk.cpp:
        (WebCore::Color::operator GdkRGBA const):
        * platform/graphics/gtk/DisplayRefreshMonitorGtk.cpp:
        (WebCore::onFrameClockUpdate):
        (WebCore::DisplayRefreshMonitorGtk::requestRefreshCallback):
        * platform/graphics/gtk/DisplayRefreshMonitorGtk.h:
        (WebCore::DisplayRefreshMonitorGtk::create):
        * platform/graphics/gtk/GdkCairoUtilities.cpp:
        * platform/gtk/GRefPtrGtk.cpp:
        * platform/gtk/GRefPtrGtk.h:
        * platform/gtk/GtkVersioning.c: Removed.
        * platform/gtk/GtkVersioning.h: Removed.
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::getClipboardContents):
        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::modifiersForGdkKeyEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/gtk/PlatformMouseEventGtk.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenIsTouchPrimaryInputDevice):
        * platform/gtk/PlatformWheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/gtk/ScrollbarThemeGtk.cpp:
        * platform/gtk/ScrollbarThemeGtk.h:
        * platform/gtk/WidgetGtk.cpp:
        * rendering/RenderThemeGtk.cpp:
        * rendering/RenderThemeGtk.h:

2019-06-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Hook up common texture functions
        https://bugs.webkit.org/show_bug.cgi?id=198704
        <rdar://problem/51668841>

        Reviewed by Saam Barati.

        This patch adds the Metal implementation of the Sample(), Load(), and GetDimensions()
        texture functions. The implementation simply performs string concatenation to produce the 
        correct results, and adds many new native functions to the standard library.

        We can't zero-fill texture types or sampler types, so this patch forbids default
        constructors for those types. It also forbids those types to exist within arrays, array
        references, or pointers, becuase an out-of-bounds access may cause us to try to zero-fill
        them.

        Tests: webgpu/whlsl-textures-getdimensions.html
               webgpu/whlsl-textures-load.html
               webgpu/whlsl-textures-sample.html

        * Modules/webgpu/WHLSL/AST/WHLSLNativeTypeDeclaration.h: Add some more introspection functions
        so we can generate the necessary Metal functions for the appropriate texture types.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isAtomic const):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isTextureArray const):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isDepthTexture const):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isWritableTexture const):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::textureDimension const):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsTextureArray):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsDepthTexture):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsWritableTexture):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setTextureDimension):
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isAtom const): Deleted.
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp: Native types can be passed into 
        entry points, too.
        (WebCore::WHLSL::Metal::EntryPointScaffolding::resourceHelperTypes):
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp: Entry points that return void don't need a
        semantic.
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp: Implement the functions.
        (WebCore::WHLSL::Metal::vectorLength):
        (WebCore::WHLSL::Metal::vectorInnerType):
        (WebCore::WHLSL::Metal::vectorSuffix):
        (WebCore::WHLSL::Metal::writeNativeFunction):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeTypeWriter.cpp: Textures come in two flavors: sample-able
        and read/write-able. Make sure we produce the correct Metal types for them.
        (WebCore::WHLSL::Metal::writeNativeType):
        * Modules/webgpu/WHLSL/WHLSLAutoInitializeVariables.cpp: We can't auto-initialize textures and 
        samplers. Therefore, this function needs to be able to fail.
        (WebCore::WHLSL::AutoInitialize::visit):
        (WebCore::WHLSL::autoInitializeVariables):
        * Modules/webgpu/WHLSL/WHLSLAutoInitializeVariables.h:
        * Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp: We can't auto-initialize textures, so users
        shouldn't be able to either.
        (WebCore::WHLSL::checkDuplicateFunctions):
        * Modules/webgpu/WHLSL/WHLSLCheckTextureReferences.cpp: Added. Make sure textures and samplers can't
        exist inside arrays, array references, or pointers. This is because out-of-bounds accesses may cause
        us to attempt to zero-fill the inner type, but we can't zero-fill textures and samplers.
        (WebCore::WHLSL::TextureReferencesChecker::TextureReferencesChecker):
        (WebCore::WHLSL::Searcher::Searcher):
        (WebCore::WHLSL::Searcher::found const):
        (WebCore::WHLSL::Searcher::visit):
        (WebCore::WHLSL::TextureReferencesChecker::containsTextureOrSampler):
        (WebCore::WHLSL::TextureReferencesChecker::visit):
        (WebCore::WHLSL::checkTextureReferences):
        * Modules/webgpu/WHLSL/WHLSLCheckTextureReferences.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/WHLSLAutoInitializeVariables.h.
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.cpp: Record more detailed information about texture types,
        so we can emit correct Metal code.
        (WebCore::WHLSL::Intrinsics::addFullTexture):
        (WebCore::WHLSL::Intrinsics::addDepthTexture):
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.h:
        (WebCore::WHLSL::Intrinsics::WTF_ARRAY_LENGTH):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp: Nested NameResolvers need to propagate their error. Also,
        native functions with named arguments shouldn't be adding their arguments to the global scope.
        (WebCore::WHLSL::NameResolver::visit):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.h:
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        (WebCore::WHLSL::prepareShared):
        * Modules/webgpu/WHLSL/WHLSLProgram.h:
        (WebCore::WHLSL::Program::intrinsics const):
        * Modules/webgpu/WHLSL/WHLSLRecursiveTypeChecker.cpp:
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt: Metal doesn't have writable depth textures.
        * Modules/webgpu/WHLSL/WHLSLSynthesizeArrayOperatorLength.cpp:
        * Modules/webgpu/WHLSL/WHLSLSynthesizeConstructors.cpp: Don't generate default constructors for textures
        or samplers.
        (WebCore::WHLSL::synthesizeConstructors):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/GPUTexture.h: Make texture usages more clear.
        (WebCore::GPUTexture::isSampled const):
        (WebCore::GPUTexture::isStorage const):
        * platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm: Ditto.
        (WebCore::GPUBindGroup::tryCreate):
        * platform/graphics/gpu/cocoa/GPUProgrammablePassEncoderMetal.mm: Ditto.
        (WebCore::GPUProgrammablePassEncoder::setBindGroup):
        * platform/graphics/gpu/cocoa/GPUTextureMetal.mm: Ditto.
        (WebCore::mtlTextureUsageForGPUTextureUsageFlags):

2019-06-19  Justin Fan  <justin_fan@apple.com>

        [WHLSL] Create a shading language test harness
        https://bugs.webkit.org/show_bug.cgi?id=198978

        Reviewed by Myles C. Maxfield.

        When creating MTLArgumentEncoders for argument buffers, the user's arguments
        must match the order that they are declared in the shader. Move back-end information
        such as buffer lengths to the end of the argument arrays.

        Test: webgpu/whlsl-harness-test.html

        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:
        (WebCore::WHLSL::Metal::EntryPointScaffolding::resourceHelperTypes):
        * platform/graphics/gpu/cocoa/GPUBindGroupLayoutMetal.mm:
        (WebCore::GPUBindGroupLayout::tryCreate):

2019-06-19  Saam Barati  <sbarati@apple.com>

        [WHLSL] The checker needs to resolve types for the anonymous variables in ReadModifyWrite expressions
        https://bugs.webkit.org/show_bug.cgi?id=198988

        Reviewed by Dean Jackson and Myles C. Maxfield.

        This patch makes it so that the Checker assigns types to the internal variables
        in a read modify write expression. These were the only variables that didn't have
        types ascribed to them.

        This patch also does a fly by fix where we kept pointers to value types
        in a HashMap in the checker. This is wrong precisely when the HashMap gets
        resized. Instead, we now just store the value itself since we're just
        dealing with a simple Variant that wraps either an empty struct or an
        enum.

        Test: webgpu/whlsl-checker-should-set-type-of-read-modify-write-variables.html

        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclaration.h:
        (WebCore::WHLSL::AST::VariableDeclaration::setType):
        (WebCore::WHLSL::AST::VariableDeclaration::type const):
        * Modules/webgpu/WHLSL/WHLSLASTDumper.cpp: Make it obvious that read
        modify write expressions are such by prefixing them with "RMW".
        (WebCore::WHLSL::ASTDumper::visit):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::Checker::visit):

2019-06-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: replace CFNetwork SPI with new API where able
        https://bugs.webkit.org/show_bug.cgi?id=198762

        Reviewed by Timothy Hatcher.

        * platform/network/NetworkLoadMetrics.h:

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

        iOS 12.2 Drawing portrait video to canvas is sideways
        https://bugs.webkit.org/show_bug.cgi?id=196772
        <rdar://problem/49781802>

        Reviewed by Eric Carlson.

        Test: media/video-orientation-canvas.html

        Move rotation code into its own ImageRotationSessionVT class for re-use across
        all existing classes with rotation operations. Should slightly increase performance
        for painting rotated media files, as the rotation only occurs once per frame, rather
        than once per drawing operation.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.h:
        (WebCore::ImageDecoderAVFObjC::RotationProperties::isIdentity const): Deleted.
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::readTrackMetadata):
        (WebCore::ImageDecoderAVFObjC::storeSampleBuffer):
        (WebCore::ImageDecoderAVFObjC::setTrack):
        (WebCore::transformToRotationProperties): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastPixelBuffer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        * platform/graphics/cv/ImageRotationSessionVT.h: Added.
        (WebCore::ImageRotationSessionVT::RotationProperties::isIdentity const):
        (WebCore::ImageRotationSessionVT::rotationProperties const):
        (WebCore::ImageRotationSessionVT::rotatedSize):
        * platform/graphics/cv/ImageRotationSessionVT.mm: Added.
        (WebCore::transformToRotationProperties):
        (WebCore::ImageRotationSessionVT::ImageRotationSessionVT):
        (WebCore::ImageRotationSessionVT::rotate):
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp:
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.h:
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.mm:
        (WebCore::rotationToAngle):
        (WebCore::RealtimeOutgoingVideoSourceCocoa::rotatePixelBuffer):
        (WebCore::computeRotatedWidthAndHeight): Deleted.

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

        REGRESSION (246538): Newyorker.com header scrolls on page
        
        Revert parts of r246538 so that frame scrolling is reverted to using layer positions.
        Overflow scroll will still scroll by changing boundsOrigin.
        
        The bug was caused by confusion about insetClipLayer and scrollContainerLayer; macOS
        positions the clip layer using FrameView::yPositionForInsetClipLayer(), so it's not just
        a simple scroll container, and this change broke positioning for fixed position layers.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::reconcileScrollPosition):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::insetClipLayerForFrameView):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::repositionScrollingLayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::~RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):
        (WebCore::RenderLayerCompositor::updateScrollLayerPosition):
        (WebCore::RenderLayerCompositor::updateScrollLayerClipping):
        (WebCore::RenderLayerCompositor::frameViewDidScroll):
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::ensureRootLayer):
        (WebCore::RenderLayerCompositor::destroyRootLayer):
        (WebCore::RenderLayerCompositor::updateScrollingNodeLayers):
        (WebCore::RenderLayerCompositor::updateLayersForScrollPosition): Deleted.
        (WebCore::RenderLayerCompositor::updateScrollContainerGeometry): Deleted.
        * rendering/RenderLayerCompositor.h:

2019-06-19  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Fix build with unified sources disabled
        https://bugs.webkit.org/show_bug.cgi?id=198752

        Reviewed by Michael Catanzaro.

        No new tests needed.

        * Modules/indexeddb/server/UniqueIDBDatabase.h: Add missing forward declaration for IDBGetRecordData,
        replace inclusion of UniqueIDBDatabaseConnection.h with a forward declaration.
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h: Remove unneeded inclusion of
        UniqueIDBDatabaseTransaction.h, add missing inclusion of UniqueIDBDatabase.h
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h: Remove unneeded inclusion of
        UniqueIDBDatabaseConnection.h inclusion.
        * bridge/c/c_class.cpp: Add inclusion of JSCJSValueInlines.h to avoid linker errors due
        to missing JSValue inline functions.
        * dom/DocumentParser.h: Replace forward declaration of Document with inclusion of Document.h,
        to avoid error due to usage of incomplete type in template expansion.
        * dom/Microtasks.h: Add missing forward declaration of JSC::VM
        * editing/markup.cpp: Add missing inclusion of PasteboardItemInfo.h
        * page/Quirks.h: Add missing forward declaration of WebCore::EventTarget
        * page/RuntimeEnabledFeatures.h: Add missing inclusion of wtf/Optional.h to avoid error due to
        expansion of undefined template.
        * page/SocketProvider.h: Add missing forward declaration for Document.
        * platform/graphics/GraphicsLayerClient.h: Add missing inclusion of wtf/OptionSet.h to avoid
        error due to expansion of undefined template.
        * rendering/RenderMultiColumnSpannerPlaceholder.h: Replace forward declaration of RenderMultiColumnFlow
        with inclusion of RenderMultiColumnFlow.h to avoid error due to usage of undefined class.

2019-06-19  Antti Koivisto  <antti@apple.com>

        RequestedScrollPosition shouldn't be applied after node reattach
        https://bugs.webkit.org/show_bug.cgi?id=198994
        <rdar://problem/51439685>

        Reviewed by Simon Fraser.

        Test: scrollingcoordinator/ios/scroll-position-after-reattach.html

        If a scrolling node gets reattached, its scroll position resets to (0,0) or whatever the previous
        requestedScrollPosition was, and the current position is lost.

        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::setPropertyChangedBitsAfterReattach):
        (WebCore::ScrollingStateFixedNode::setAllPropertiesChanged): Deleted.

        Rename to better reflect what this is for.

        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateFrameHostingNode.cpp:
        (WebCore::ScrollingStateFrameHostingNode::setPropertyChangedBitsAfterReattach):
        (WebCore::ScrollingStateFrameHostingNode::setAllPropertiesChanged): Deleted.
        * page/scrolling/ScrollingStateFrameHostingNode.h:
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::setPropertyChangedBitsAfterReattach):
        (WebCore::ScrollingStateFrameScrollingNode::setAllPropertiesChanged): Deleted.
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::setPropertyChangedBitsAfterReattach):
        (WebCore::ScrollingStateNode::setAllPropertiesChanged): Deleted.
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStatePositionedNode.cpp:
        (WebCore::ScrollingStatePositionedNode::setPropertyChangedBitsAfterReattach):
        (WebCore::ScrollingStatePositionedNode::setAllPropertiesChanged): Deleted.
        * page/scrolling/ScrollingStatePositionedNode.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::setPropertyChangedBitsAfterReattach):

        Don't set RequestedScrollPosition. It is a special property that is applied only once on request
        and shouldn't get reapplied. Nodes should keep their existing scroll position on reattach.

        (WebCore::ScrollingStateScrollingNode::setAllPropertiesChanged): Deleted.
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::setPropertyChangedBitsAfterReattach):
        (WebCore::ScrollingStateStickyNode::setAllPropertiesChanged): Deleted.
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::nodeWasReattachedRecursive):

2019-06-18  Saam Barati  <sbarati@apple.com>

        [WHLSL] Support matrices
        https://bugs.webkit.org/show_bug.cgi?id=198876
        <rdar://problem/51768882>

        Reviewed by Dean Jackson and Myles Maxfield.

        This patch adds in support for matrices to WHLSL. Most matrix related code
        is defined by the standard library. This patch just needed to add support
        for the native functions operator[] and operator[]= on matrix types. The only
        native functions that are named operator[] and operator[]= are for matrix
        operations, so we strongly assume when generating code for native operator[] and
        operator[]= that we're dealing with matrix types.
        
        operator[]= ignores the write if the index is out of bounds. operator[]
        returns a zeroed vector if the index is out of bounds.  
        
        This patch also incorporates two bug fixes:
        1. This patch takes Robin's patch in https://bugs.webkit.org/show_bug.cgi?id=198313 to ensure
        we don't have pointers to values in a hash map. This was needed in this patch
        otherwise we'd crash parsing the standard library.
        
        2. This patch fixes how we handle "break" in metal codegen. When I first
        implemented break, I strongly assumed we were in a loop. However, break
        can be either from a loop or from switch. This patch teaches the metal code
        generator to track which context we're in and to emit code accordingly.

        Tests: webgpu/whlsl-matrix-2.html
               webgpu/whlsl-matrix.html

        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::emitLoop):
        * Modules/webgpu/WHLSL/Metal/WHLSLMetalCodeGenerator.cpp:
        (WebCore::WHLSL::Metal::generateMetalCodeShared):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::writeNativeFunction):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::Checker::assignTypes):
        (WebCore::WHLSL::Checker::getInfo):
        (WebCore::WHLSL::Checker::assignType):
        (WebCore::WHLSL::Checker::forwardType):
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:

2019-06-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JSLock should be WebThread aware
        https://bugs.webkit.org/show_bug.cgi?id=198911

        Reviewed by Geoffrey Garen.

        * bindings/js/CommonVM.cpp:
        (WebCore::commonVMSlow):

2019-06-18  Joseph Pecoraro  <pecoraro@apple.com>

        WebSocketDeflater uses an unnecessarily constrained compression memory level
        https://bugs.webkit.org/show_bug.cgi?id=198973

        Reviewed by Alex Christensen.

        * Modules/websockets/WebSocketDeflater.cpp:
        Set the memLevel to the deflateInit2 default value, not a minimum value.

2019-06-18  Keith Miller  <keith_miller@apple.com>

        Add support for WeakRef
        https://bugs.webkit.org/show_bug.cgi?id=198710

        Reviewed by Yusuke Suzuki.

        We need to make sure the Web MicrotaskQueue notifies the JSC VM
        that it has finished performing a microtask checkpoint. This lets
        the JSC VM know it is safe to collect referenced WeakRefs. Since
        there was no way to get the VM from the MicrotaskQueue I have
        added a RefPtr to the queue's VM. For the main thread the VM lives
        forever so is fine. For workers the queue and the VM share an
        owner so this shouldn't matter either.

        Tests: js/weakref-async-is-collected.html
               js/weakref-eventually-collects-values.html
               js/weakref-microtasks-dont-collect.html
               js/weakref-weakset-consistency.html

        * dom/Microtasks.cpp:
        (WebCore::MicrotaskQueue::MicrotaskQueue):
        (WebCore::MicrotaskQueue::mainThreadQueue):
        (WebCore::MicrotaskQueue::performMicrotaskCheckpoint):
        * dom/Microtasks.h:
        (WebCore::MicrotaskQueue::vm const):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):

2019-06-18  Kenneth Russell  <kbr@chromium.org>

        Add preliminary ANGLE backend to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=197755

        Reviewed by Dean Jackson.

        Add new files supplying an ANGLE version of GraphicsContext3D and
        Extensions3D, conditionalized under USE_ANGLE. Update Xcode project to
        build these files. This option compiles and links successfully.

        FIXMEs remain in several common files which will be addressed in
        subsequent patches.

        This work will be tested with the preexisting WebGL conformance
        suite.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsContext3DManager.cpp:
        (WebCore::GraphicsContext3DManager::updateAllContexts):
        (WebCore::GraphicsContext3DManager::updateHighPerformanceState):
        (WebCore::GraphicsContext3DManager::disableHighPerformanceGPUTimerFired):
        * platform/graphics/angle/Extensions3DANGLE.cpp: Copied from Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp.
        (WebCore::Extensions3DANGLE::Extensions3DANGLE):
        (WebCore::Extensions3DANGLE::supports):
        (WebCore::Extensions3DANGLE::ensureEnabled):
        (WebCore::Extensions3DANGLE::isEnabled):
        (WebCore::Extensions3DANGLE::getGraphicsResetStatusARB):
        (WebCore::Extensions3DANGLE::getTranslatedShaderSourceANGLE):
        (WebCore::Extensions3DANGLE::initializeAvailableExtensions):
        (WebCore::Extensions3DANGLE::readnPixelsEXT):
        (WebCore::Extensions3DANGLE::getnUniformfvEXT):
        (WebCore::Extensions3DANGLE::getnUniformivEXT):
        (WebCore::Extensions3DANGLE::blitFramebuffer):
        (WebCore::Extensions3DANGLE::renderbufferStorageMultisample):
        (WebCore::Extensions3DANGLE::createVertexArrayOES):
        (WebCore::Extensions3DANGLE::deleteVertexArrayOES):
        (WebCore::Extensions3DANGLE::isVertexArrayOES):
        (WebCore::Extensions3DANGLE::bindVertexArrayOES):
        (WebCore::Extensions3DANGLE::insertEventMarkerEXT):
        (WebCore::Extensions3DANGLE::pushGroupMarkerEXT):
        (WebCore::Extensions3DANGLE::popGroupMarkerEXT):
        (WebCore::Extensions3DANGLE::supportsExtension):
        (WebCore::Extensions3DANGLE::drawBuffersEXT):
        (WebCore::Extensions3DANGLE::drawArraysInstanced):
        (WebCore::Extensions3DANGLE::drawElementsInstanced):
        (WebCore::Extensions3DANGLE::vertexAttribDivisor):
        (WebCore::Extensions3DANGLE::getExtensions):
        * platform/graphics/angle/Extensions3DANGLE.h: Added.
        * platform/graphics/angle/GraphicsContext3DANGLE.cpp: Copied from Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp.
        (WebCore::GraphicsContext3D::releaseShaderCompiler):
        (WebCore::wipeAlphaChannelFromPixels):
        (WebCore::GraphicsContext3D::readPixelsAndConvertToBGRAIfNecessary):
        (WebCore::GraphicsContext3D::validateAttributes):
        (WebCore::GraphicsContext3D::reshapeFBOs):
        (WebCore::GraphicsContext3D::attachDepthAndStencilBufferIfNeeded):
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary):
        (WebCore::GraphicsContext3D::renderbufferStorage):
        (WebCore::GraphicsContext3D::getIntegerv):
        (WebCore::GraphicsContext3D::getShaderPrecisionFormat):
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::depthRange):
        (WebCore::GraphicsContext3D::clearDepth):
        (WebCore::GraphicsContext3D::getExtensions):
        (WebCore::GraphicsContext3D::readPixels):
        (WebCore::setCurrentNameHashMapForShader):
        (WebCore::nameHashForShader):
        (WebCore::GraphicsContext3D::validateDepthStencil):
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::paintCompositedResultsToCanvas):
        (WebCore::GraphicsContext3D::paintRenderingResultsToImageData):
        (WebCore::GraphicsContext3D::prepareTexture):
        (WebCore::GraphicsContext3D::readRenderingResults):
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::GraphicsContext3D::checkVaryingsPacking const):
        (WebCore::GraphicsContext3D::precisionsMatch const):
        (WebCore::GraphicsContext3D::getInternalFramebufferSize const):
        (WebCore::GraphicsContext3D::activeTexture):
        (WebCore::GraphicsContext3D::attachShader):
        (WebCore::GraphicsContext3D::bindAttribLocation):
        (WebCore::GraphicsContext3D::bindBuffer):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::bindRenderbuffer):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::blendColor):
        (WebCore::GraphicsContext3D::blendEquation):
        (WebCore::GraphicsContext3D::blendEquationSeparate):
        (WebCore::GraphicsContext3D::blendFunc):
        (WebCore::GraphicsContext3D::blendFuncSeparate):
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):
        (WebCore::GraphicsContext3D::mapBufferRange):
        (WebCore::GraphicsContext3D::unmapBuffer):
        (WebCore::GraphicsContext3D::copyBufferSubData):
        (WebCore::GraphicsContext3D::getInternalformativ):
        (WebCore::GraphicsContext3D::renderbufferStorageMultisample):
        (WebCore::GraphicsContext3D::texStorage2D):
        (WebCore::GraphicsContext3D::texStorage3D):
        (WebCore::GraphicsContext3D::getActiveUniforms):
        (WebCore::GraphicsContext3D::checkFramebufferStatus):
        (WebCore::GraphicsContext3D::clearColor):
        (WebCore::GraphicsContext3D::clear):
        (WebCore::GraphicsContext3D::clearStencil):
        (WebCore::GraphicsContext3D::colorMask):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::compileShaderDirect):
        (WebCore::GraphicsContext3D::copyTexImage2D):
        (WebCore::GraphicsContext3D::copyTexSubImage2D):
        (WebCore::GraphicsContext3D::cullFace):
        (WebCore::GraphicsContext3D::depthFunc):
        (WebCore::GraphicsContext3D::depthMask):
        (WebCore::GraphicsContext3D::detachShader):
        (WebCore::GraphicsContext3D::disable):
        (WebCore::GraphicsContext3D::disableVertexAttribArray):
        (WebCore::GraphicsContext3D::drawArrays):
        (WebCore::GraphicsContext3D::drawElements):
        (WebCore::GraphicsContext3D::enable):
        (WebCore::GraphicsContext3D::enableVertexAttribArray):
        (WebCore::GraphicsContext3D::finish):
        (WebCore::GraphicsContext3D::flush):
        (WebCore::GraphicsContext3D::framebufferRenderbuffer):
        (WebCore::GraphicsContext3D::framebufferTexture2D):
        (WebCore::GraphicsContext3D::frontFace):
        (WebCore::GraphicsContext3D::generateMipmap):
        (WebCore::GraphicsContext3D::getActiveAttribImpl):
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getActiveUniformImpl):
        (WebCore::GraphicsContext3D::getActiveUniform):
        (WebCore::GraphicsContext3D::getAttachedShaders):
        (WebCore::generateHashedName):
        (WebCore::GraphicsContext3D::mappedSymbolInShaderSourceMap):
        (WebCore::GraphicsContext3D::mappedSymbolName):
        (WebCore::GraphicsContext3D::originalSymbolInShaderSourceMap):
        (WebCore::GraphicsContext3D::originalSymbolName):
        (WebCore::GraphicsContext3D::getAttribLocation):
        (WebCore::GraphicsContext3D::getAttribLocationDirect):
        (WebCore::GraphicsContext3D::getContextAttributes):
        (WebCore::GraphicsContext3D::moveErrorsToSyntheticErrorList):
        (WebCore::GraphicsContext3D::getError):
        (WebCore::GraphicsContext3D::getString):
        (WebCore::GraphicsContext3D::hint):
        (WebCore::GraphicsContext3D::isBuffer):
        (WebCore::GraphicsContext3D::isEnabled):
        (WebCore::GraphicsContext3D::isFramebuffer):
        (WebCore::GraphicsContext3D::isProgram):
        (WebCore::GraphicsContext3D::isRenderbuffer):
        (WebCore::GraphicsContext3D::isShader):
        (WebCore::GraphicsContext3D::isTexture):
        (WebCore::GraphicsContext3D::lineWidth):
        (WebCore::GraphicsContext3D::linkProgram):
        (WebCore::GraphicsContext3D::pixelStorei):
        (WebCore::GraphicsContext3D::polygonOffset):
        (WebCore::GraphicsContext3D::sampleCoverage):
        (WebCore::GraphicsContext3D::scissor):
        (WebCore::GraphicsContext3D::shaderSource):
        (WebCore::GraphicsContext3D::stencilFunc):
        (WebCore::GraphicsContext3D::stencilFuncSeparate):
        (WebCore::GraphicsContext3D::stencilMask):
        (WebCore::GraphicsContext3D::stencilMaskSeparate):
        (WebCore::GraphicsContext3D::stencilOp):
        (WebCore::GraphicsContext3D::stencilOpSeparate):
        (WebCore::GraphicsContext3D::texParameterf):
        (WebCore::GraphicsContext3D::texParameteri):
        (WebCore::GraphicsContext3D::uniform1f):
        (WebCore::GraphicsContext3D::uniform1fv):
        (WebCore::GraphicsContext3D::uniform2f):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform3f):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform4f):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform1i):
        (WebCore::GraphicsContext3D::uniform1iv):
        (WebCore::GraphicsContext3D::uniform2i):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3i):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4i):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):
        (WebCore::GraphicsContext3D::useProgram):
        (WebCore::GraphicsContext3D::validateProgram):
        (WebCore::GraphicsContext3D::vertexAttrib1f):
        (WebCore::GraphicsContext3D::vertexAttrib1fv):
        (WebCore::GraphicsContext3D::vertexAttrib2f):
        (WebCore::GraphicsContext3D::vertexAttrib2fv):
        (WebCore::GraphicsContext3D::vertexAttrib3f):
        (WebCore::GraphicsContext3D::vertexAttrib3fv):
        (WebCore::GraphicsContext3D::vertexAttrib4f):
        (WebCore::GraphicsContext3D::vertexAttrib4fv):
        (WebCore::GraphicsContext3D::vertexAttribPointer):
        (WebCore::GraphicsContext3D::viewport):
        (WebCore::GraphicsContext3D::createVertexArray):
        (WebCore::GraphicsContext3D::deleteVertexArray):
        (WebCore::GraphicsContext3D::isVertexArray):
        (WebCore::GraphicsContext3D::bindVertexArray):
        (WebCore::GraphicsContext3D::getBooleanv):
        (WebCore::GraphicsContext3D::getBufferParameteriv):
        (WebCore::GraphicsContext3D::getFloatv):
        (WebCore::GraphicsContext3D::getInteger64v):
        (WebCore::GraphicsContext3D::getFramebufferAttachmentParameteriv):
        (WebCore::GraphicsContext3D::getProgramiv):
        (WebCore::GraphicsContext3D::getNonBuiltInActiveSymbolCount):
        (WebCore::GraphicsContext3D::getUnmangledInfoLog):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getRenderbufferParameteriv):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):
        (WebCore::GraphicsContext3D::getTexParameterfv):
        (WebCore::GraphicsContext3D::getTexParameteriv):
        (WebCore::GraphicsContext3D::getUniformfv):
        (WebCore::GraphicsContext3D::getUniformiv):
        (WebCore::GraphicsContext3D::getUniformLocation):
        (WebCore::GraphicsContext3D::getVertexAttribfv):
        (WebCore::GraphicsContext3D::getVertexAttribiv):
        (WebCore::GraphicsContext3D::getVertexAttribOffset):
        (WebCore::GraphicsContext3D::texSubImage2D):
        (WebCore::GraphicsContext3D::compressedTexImage2D):
        (WebCore::GraphicsContext3D::compressedTexSubImage2D):
        (WebCore::GraphicsContext3D::createBuffer):
        (WebCore::GraphicsContext3D::createFramebuffer):
        (WebCore::GraphicsContext3D::createProgram):
        (WebCore::GraphicsContext3D::createRenderbuffer):
        (WebCore::GraphicsContext3D::createShader):
        (WebCore::GraphicsContext3D::createTexture):
        (WebCore::GraphicsContext3D::deleteBuffer):
        (WebCore::GraphicsContext3D::deleteFramebuffer):
        (WebCore::GraphicsContext3D::deleteProgram):
        (WebCore::GraphicsContext3D::deleteRenderbuffer):
        (WebCore::GraphicsContext3D::deleteShader):
        (WebCore::GraphicsContext3D::deleteTexture):
        (WebCore::GraphicsContext3D::synthesizeGLError):
        (WebCore::GraphicsContext3D::markContextChanged):
        (WebCore::GraphicsContext3D::markLayerComposited):
        (WebCore::GraphicsContext3D::layerComposited const):
        (WebCore::GraphicsContext3D::forceContextLost):
        (WebCore::GraphicsContext3D::recycleContext):
        (WebCore::GraphicsContext3D::dispatchContextChangedNotification):
        (WebCore::GraphicsContext3D::texImage2DDirect):
        (WebCore::GraphicsContext3D::drawArraysInstanced):
        (WebCore::GraphicsContext3D::drawElementsInstanced):
        (WebCore::GraphicsContext3D::vertexAttribDivisor):
        * platform/graphics/angle/TemporaryANGLESetting.cpp: Added.
        (WebCore::TemporaryANGLESetting::TemporaryANGLESetting):
        (WebCore::TemporaryANGLESetting::~TemporaryANGLESetting):
        * platform/graphics/angle/TemporaryANGLESetting.h: Added.
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::checkGPUStatus):
        (WebCore::GraphicsContext3D::screenDidChange):
        * platform/graphics/cocoa/WebGLLayer.h:
        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer display]):
        * platform/graphics/cv/TextureCacheCV.mm:
        (WebCore::TextureCacheCV::create):
        (WebCore::TextureCacheCV::textureFromImage):
        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::enumToStringMap):
        (WebCore::VideoTextureCopierCV::initializeContextObjects):
        (WebCore::VideoTextureCopierCV::initializeUVContextObjects):
        (WebCore::VideoTextureCopierCV::copyImageToPlatformTexture):
        (WebCore::VideoTextureCopierCV::copyVideoTextureToPlatformTexture):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:

2019-06-18  Saam Barati  <sbarati@apple.com>

        [WHLSL] Do not generate duplicate constructors/copy constructors in synthesizeConstructors
        https://bugs.webkit.org/show_bug.cgi?id=198580

        Reviewed by Robin Morisset.

        Prior to this patch, we were generating duplicate constructors 
        for unnamed types. This is bad for two reasons:
        1. It's inefficient, since we'd generate a constructor for every place in
        the AST where we'd visit this unnamed type.
        2. It made it impossible to resolve function overloads to call
        the default constructor. This made it so that the autoInitializeVariables
        pass would crash if we ever generated more than one of these functions
        for the same type.
        
        To make this work, this patch splits up what used to be the resolveNamesInFunctions
        pass. Previously, this pass would both resolve calls and resolve type names.
        Synthesize constructors would run before this, since resolving calls meant we
        may resolve a call to one of these synthesized constructors. However, synthesize
        constructors now needs to test for the equality unnamed types, so it now requires
        running the type resolution part of resolveNamesInFunctions before it runs.
        
        This patch splits resolveNamesInFunctions into two parts:
        resolveTypeNamesInFunctions and resolveCallsInFunctions.
        
        So we used to run:
        synthesizeConstructors
        resolveNamesInFunctions
        
        And now we run:
        resolveTypeNamesInFunctions 
        synthesizeConstructors
        resolveCallsInFunctions

        Test: webgpu/whlsl-duplicate-types-should-not-produce-duplicate-ctors.html

        * Modules/webgpu/WHLSL/AST/WHLSLArrayReferenceType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLArrayType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLBooleanLiteral.h:
        (WebCore::WHLSL::AST::BooleanLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationMemberLiteral.h:
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLExpression.h:
        (WebCore::WHLSL::AST::Expression::copyTypeTo const):
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteral.h:
        (WebCore::WHLSL::AST::FloatLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.cpp:
        (WebCore::WHLSL::AST::FloatLiteralType::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteral.h:
        (WebCore::WHLSL::AST::IntegerLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.cpp:
        (WebCore::WHLSL::AST::IntegerLiteralType::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLNullLiteral.h:
        (WebCore::WHLSL::AST::NullLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLPointerType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLTypeReference.h:
        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteral.h:
        (WebCore::WHLSL::AST::UnsignedIntegerLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.cpp:
        (WebCore::WHLSL::AST::UnsignedIntegerLiteralType::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.h:
        * Modules/webgpu/WHLSL/WHLSLASTDumper.h:
        * Modules/webgpu/WHLSL/WHLSLInferTypes.cpp:
        (WebCore::WHLSL::matches):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:
        (WebCore::WHLSL::NameResolver::NameResolver):
        (WebCore::WHLSL::NameResolver::visit):
        (WebCore::WHLSL::resolveTypeNamesInFunctions):
        (WebCore::WHLSL::resolveCallsInFunctions):
        (WebCore::WHLSL::resolveNamesInFunctions): Deleted.
        * Modules/webgpu/WHLSL/WHLSLNameResolver.h:
        (WebCore::WHLSL::NameResolver::setIsResolvingCalls):
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        (WebCore::WHLSL::prepareShared):
        * Modules/webgpu/WHLSL/WHLSLSynthesizeConstructors.cpp:
        (WebCore::WHLSL::UnnamedTypeKey::UnnamedTypeKey):
        (WebCore::WHLSL::UnnamedTypeKey::isEmptyValue const):
        (WebCore::WHLSL::UnnamedTypeKey::isHashTableDeletedValue const):
        (WebCore::WHLSL::UnnamedTypeKey::hash const):
        (WebCore::WHLSL::UnnamedTypeKey::operator== const):
        (WebCore::WHLSL::UnnamedTypeKey::unnamedType const):
        (WebCore::WHLSL::UnnamedTypeKey::Hash::hash):
        (WebCore::WHLSL::UnnamedTypeKey::Hash::equal):
        (WebCore::WHLSL::UnnamedTypeKey::Traits::isEmptyValue):
        (WebCore::WHLSL::FindAllTypes::takeUnnamedTypes):
        (WebCore::WHLSL::FindAllTypes::appendNamedType):
        (WebCore::WHLSL::synthesizeConstructors):

2019-06-18  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r246524.

        Caused 45 webgpu/ crashes.

        Reverted changeset:

        "[WHLSL] The name resolver does not deal with
        nativeFunctionDeclaration"
        https://bugs.webkit.org/show_bug.cgi?id=198306
        https://trac.webkit.org/changeset/246524

2019-06-18  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Inline quirks should have their dedicated class.
        https://bugs.webkit.org/show_bug.cgi?id=198962
        <rdar://problem/51848170>

        Reviewed by Antti Koivisto.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/LayoutState.h:
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::LineLayout::createDisplayRuns const):
        * layout/inlineformatting/InlineFormattingContextQuirks.cpp: Added.
        (WebCore::Layout::InlineFormattingContext::Quirks::collapseLineDescent):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::close):
        * layout/inlineformatting/InlineLineBreaker.cpp:
        * layout/inlineformatting/InlineLineBreaker.h:

2019-06-18  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Line::append() should take care of all the inline types.
        https://bugs.webkit.org/show_bug.cgi?id=198961
        <rdar://problem/51847712>

        Reviewed by Antti Koivisto.

        Make all the existing Line::append* functions private.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::staticHorizontalPositionForOutOfFlowPositioned): fix a typo.
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::LineLayout::placeInlineItems const):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::append):
        * layout/inlineformatting/InlineLine.h:

2019-06-18  Simon Fraser  <simon.fraser@apple.com>

        Convert macOS to scroll by changing layer boundsOrigin
        https://bugs.webkit.org/show_bug.cgi?id=198917

        Reviewed by Antti Koivisto.

        macOS did frame and overflow scrolling by changing the position of the scrolled
        contents layer. iOS scrolls by changing the boundsOrigin of the scrollContainer layer
        (which it has to, to match how UIScrollView works).

        The iOS approach removes the need for an extra layer whose only role is for
        scroll positioning, so migrate macOS to the same approach. A later patch can remove
        m_scrolledContentsLayer.
        
        We can remove RenderLayerCompositor::m_clipLayer since m_scrollContainerLayer has exactly
        the same role now.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::reconcileScrollPosition):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::insetClipLayerForFrameView):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::repositionScrollingLayers):
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::repositionScrollingLayers):
        * platform/graphics/cocoa/WebCoreCALayerExtras.h:
        * platform/graphics/cocoa/WebCoreCALayerExtras.mm:
        (-[CALayer _web_setLayerBoundsOrigin:]):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::setLocationOfScrolledContents):
        (WebCore::RenderLayerBacking::updateScrollOffset):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::~RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):
        (WebCore::RenderLayerCompositor::updateLayersForScrollPosition):
        (WebCore::RenderLayerCompositor::updateScrollContainerGeometry):
        (WebCore::RenderLayerCompositor::frameViewDidScroll):
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::ensureRootLayer):
        (WebCore::RenderLayerCompositor::destroyRootLayer):
        (WebCore::RenderLayerCompositor::updateScrollingNodeLayers):
        (WebCore::RenderLayerCompositor::updateScrollLayerPosition): Deleted.
        (WebCore::RenderLayerCompositor::updateScrollLayerClipping): Deleted.
        * rendering/RenderLayerCompositor.h:

2019-06-18  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Identify elements with monotonically increasing counters
        https://bugs.webkit.org/show_bug.cgi?id=198916

        Reviewed by Xabier Rodriguez-Calvar.

        Those ids tend to be shorter, easier to read for humans and for
        diff tools :) Underscores were also replaced by dashes, for
        consistency with the usual GStreamer element naming untold
        conventions.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::makeElement):
        (WebCore::GStreamerVideoEncoder::InitEncode):

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

        [WebGL] Extensions3DOpenGLES::bindVertexArrayOES() should allow zero array object
        https://bugs.webkit.org/show_bug.cgi?id=198929

        Reviewed by Carlos Garcia Campos.

        A 0 object parameter for the glBindVertexArrayOES() call is a valid
        value since it binds the default vertex array object for any updates and
        draws. As such the Extensions3DOpenGLES implementation shouldn't return
        early if the object value is 0.

        No new tests -- covered by existing tests.

        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        (WebCore::Extensions3DOpenGLES::bindVertexArrayOES):

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

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

        Reviewed by Geoffrey Garen.

        Add option NSURLCredentialStorageRemoveSynchronizableCredentials when removing persistent credential so 
        credentials from same account will be removed from all devices.

        Test: WKWebsiteDataStore.RemoveAllPersistentCredentials

        * platform/network/CredentialStorage.cpp:
        (WebCore::CredentialStorage::originsWithPersistentCredentials):
        (WebCore::CredentialStorage::removePersistentCredentialsWithOrigins):
        (WebCore::CredentialStorage::clearPersistentCredentials):
        * platform/network/CredentialStorage.h:
        * platform/network/mac/CredentialStorageMac.mm:
        (WebCore::CredentialStorage::originsWithPersistentCredentials):
        (WebCore::CredentialStorage::removePersistentCredentialsWithOrigins):
        (WebCore::CredentialStorage::clearPersistentCredentials):

2019-06-17  Ryosuke Niwa  <rniwa@webkit.org>

        m_disconnectedFrame can be null in DOMWindowExtension::willDestroyGlobalObjectInCachedFrame()
        https://bugs.webkit.org/show_bug.cgi?id=198943

        Reviewed by Brady Eidson.

        Apparently it's possible for m_disconnectedFrame to be null in this function even though this should never happen.

        We've been trying to diagnose a class of issues in this area (e.g. r246187, r244971, r242797, r242677, r242676, r241848)
        but at some point, we need to stop crashing for the sake of user.

        Worked around the bug by adding a null pointer check here.

        * page/DOMWindowExtension.cpp:
        (WebCore::DOMWindowExtension::willDestroyGlobalObjectInCachedFrame):

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

        Fix iOS crash when starting loads with no active DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=187360
        <rdar://problem/29389084>

        Reviewed by Geoff Garen.

        When FrameLoader::activeDocumentLoader returns null in the ResourceLoader constructor,
        on iOS we will dereference it to ask if it has a frame in an early return in init.
        Let's not.  If we don't have a DocumentLoader, we don't have a frame and should fail.

        Crash reports indicate this crash is related to Beacon and other uses of LoaderStrategy::startPingLoad,
        but attempts to make a unit test to reproduce the crash were unsuccessful.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init):

2019-06-17  Robin Morisset  <rmorisset@apple.com>

        [WHLSL] The name resolver does not deal with nativeFunctionDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=198306

        Reviewed by Saam Barati.

        We currently have a crash in the nameResolver when trying to use the full standard library.
        What is happening is that because we don't specify anything to do to nativeFunctionDeclarations, names in their parameters
        are added to the global environment. And so as soon as we have two such parameters with the same name, the name resolver fails.

        Tested by adding two native functions that share a parameter name to the standard library.

        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:
        (WebCore::WHLSL::NameResolver::visit):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.h:

2019-06-17  Robin Morisset  <rmorisset@apple.com>

        [WHLSL] Remove backtracking from parseAttributeBlock
        https://bugs.webkit.org/show_bug.cgi?id=198934

        Reviewed by Myles C. Maxfield.

        No functional change intended.

        Tested by running LayoutTests/webgpu/whlsl-compute.html

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

2019-06-17  Saam Barati  <sbarati@apple.com>

        [WHLSL] Make .length work
        https://bugs.webkit.org/show_bug.cgi?id=198890

        Reviewed by Myles Maxfield.

        This patch makes accessing .length on buffers work. To make this work as
        expected, I've fixed a handful of small bugs:
        
        - The checker was not calling resolveByInstantiation for getters. This patch
          modifies the checker to do that, so we can now resolve a getter to
          "operator.length". I also refactored the checker to have a helper method
          that both does overload resolution and resolveByInstantiation to make it
          difficult to forget to call resolveByInstantiation.
        - The property resolver had a bug where it would return a non-null value
          in anderCallArgument for array references even when there was no ander and
          no thread ander function. This patch makes it now return null if there is
          neither an ander nor a thread ander.
        - The metal codegen incorrectly unpacked the length of buffers. It swapped the
          bottom four bytes and the top four bytes of the size_t value. This patch
          corrects that. This was also a cause of flakiness in various tests since
          we ended up with a length much larger than expected, leading to bounds
          checks always passing in our tests.
        - This patch also fixes our tests to specify the output buffer length
          properly for various programs.

        Test: webgpu/whlsl-buffer-length.html

        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:
        (WebCore::WHLSL::Metal::EntryPointScaffolding::unpackResourcesAndNamedBuiltIns):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::resolveFunction):
        (WebCore::WHLSL::Checker::finishVisiting):
        (WebCore::WHLSL::Checker::visit):
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        (WebCore::WHLSL::anderCallArgument):

2019-06-17  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r246501.

        Breaks Apple internal builds.

        Reverted changeset:

        "Support using ANGLE as the backend for the WebGL
        implementation"
        https://bugs.webkit.org/show_bug.cgi?id=197755
        https://trac.webkit.org/changeset/246501

2019-06-17  Kenneth Russell  <kbr@chromium.org>

        Support using ANGLE as the backend for the WebGL implementation
        https://bugs.webkit.org/show_bug.cgi?id=197755

        Reviewed by Dean Jackson.

        Add new files supplying an ANGLE version of GraphicsContext3D and
        Extensions3D, conditionalized under USE_ANGLE. Update Xcode project to
        build these files. This option compiles and links successfully.

        FIXMEs remain in several common files which will be addressed in
        subsequent patches.

        This work will be tested with the preexisting WebGL conformance
        suite.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsContext3DManager.cpp:
        (WebCore::GraphicsContext3DManager::updateAllContexts):
        (WebCore::GraphicsContext3DManager::updateHighPerformanceState):
        (WebCore::GraphicsContext3DManager::disableHighPerformanceGPUTimerFired):
        * platform/graphics/angle/Extensions3DANGLE.cpp: Copied from Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp.
        (WebCore::Extensions3DANGLE::Extensions3DANGLE):
        (WebCore::Extensions3DANGLE::supports):
        (WebCore::Extensions3DANGLE::ensureEnabled):
        (WebCore::Extensions3DANGLE::isEnabled):
        (WebCore::Extensions3DANGLE::getGraphicsResetStatusARB):
        (WebCore::Extensions3DANGLE::getTranslatedShaderSourceANGLE):
        (WebCore::Extensions3DANGLE::initializeAvailableExtensions):
        (WebCore::Extensions3DANGLE::readnPixelsEXT):
        (WebCore::Extensions3DANGLE::getnUniformfvEXT):
        (WebCore::Extensions3DANGLE::getnUniformivEXT):
        (WebCore::Extensions3DANGLE::blitFramebuffer):
        (WebCore::Extensions3DANGLE::renderbufferStorageMultisample):
        (WebCore::Extensions3DANGLE::createVertexArrayOES):
        (WebCore::Extensions3DANGLE::deleteVertexArrayOES):
        (WebCore::Extensions3DANGLE::isVertexArrayOES):
        (WebCore::Extensions3DANGLE::bindVertexArrayOES):
        (WebCore::Extensions3DANGLE::insertEventMarkerEXT):
        (WebCore::Extensions3DANGLE::pushGroupMarkerEXT):
        (WebCore::Extensions3DANGLE::popGroupMarkerEXT):
        (WebCore::Extensions3DANGLE::supportsExtension):
        (WebCore::Extensions3DANGLE::drawBuffersEXT):
        (WebCore::Extensions3DANGLE::drawArraysInstanced):
        (WebCore::Extensions3DANGLE::drawElementsInstanced):
        (WebCore::Extensions3DANGLE::vertexAttribDivisor):
        (WebCore::Extensions3DANGLE::getExtensions):
        * platform/graphics/angle/Extensions3DANGLE.h: Added.
        * platform/graphics/angle/GraphicsContext3DANGLE.cpp: Copied from Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp.
        (WebCore::GraphicsContext3D::releaseShaderCompiler):
        (WebCore::wipeAlphaChannelFromPixels):
        (WebCore::GraphicsContext3D::readPixelsAndConvertToBGRAIfNecessary):
        (WebCore::GraphicsContext3D::validateAttributes):
        (WebCore::GraphicsContext3D::reshapeFBOs):
        (WebCore::GraphicsContext3D::attachDepthAndStencilBufferIfNeeded):
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary):
        (WebCore::GraphicsContext3D::renderbufferStorage):
        (WebCore::GraphicsContext3D::getIntegerv):
        (WebCore::GraphicsContext3D::getShaderPrecisionFormat):
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::depthRange):
        (WebCore::GraphicsContext3D::clearDepth):
        (WebCore::GraphicsContext3D::getExtensions):
        (WebCore::GraphicsContext3D::readPixels):
        (WebCore::setCurrentNameHashMapForShader):
        (WebCore::nameHashForShader):
        (WebCore::GraphicsContext3D::validateDepthStencil):
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::paintCompositedResultsToCanvas):
        (WebCore::GraphicsContext3D::paintRenderingResultsToImageData):
        (WebCore::GraphicsContext3D::prepareTexture):
        (WebCore::GraphicsContext3D::readRenderingResults):
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::GraphicsContext3D::checkVaryingsPacking const):
        (WebCore::GraphicsContext3D::precisionsMatch const):
        (WebCore::GraphicsContext3D::getInternalFramebufferSize const):
        (WebCore::GraphicsContext3D::activeTexture):
        (WebCore::GraphicsContext3D::attachShader):
        (WebCore::GraphicsContext3D::bindAttribLocation):
        (WebCore::GraphicsContext3D::bindBuffer):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::bindRenderbuffer):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::blendColor):
        (WebCore::GraphicsContext3D::blendEquation):
        (WebCore::GraphicsContext3D::blendEquationSeparate):
        (WebCore::GraphicsContext3D::blendFunc):
        (WebCore::GraphicsContext3D::blendFuncSeparate):
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):
        (WebCore::GraphicsContext3D::mapBufferRange):
        (WebCore::GraphicsContext3D::unmapBuffer):
        (WebCore::GraphicsContext3D::copyBufferSubData):
        (WebCore::GraphicsContext3D::getInternalformativ):
        (WebCore::GraphicsContext3D::renderbufferStorageMultisample):
        (WebCore::GraphicsContext3D::texStorage2D):
        (WebCore::GraphicsContext3D::texStorage3D):
        (WebCore::GraphicsContext3D::getActiveUniforms):
        (WebCore::GraphicsContext3D::checkFramebufferStatus):
        (WebCore::GraphicsContext3D::clearColor):
        (WebCore::GraphicsContext3D::clear):
        (WebCore::GraphicsContext3D::clearStencil):
        (WebCore::GraphicsContext3D::colorMask):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::compileShaderDirect):
        (WebCore::GraphicsContext3D::copyTexImage2D):
        (WebCore::GraphicsContext3D::copyTexSubImage2D):
        (WebCore::GraphicsContext3D::cullFace):
        (WebCore::GraphicsContext3D::depthFunc):
        (WebCore::GraphicsContext3D::depthMask):
        (WebCore::GraphicsContext3D::detachShader):
        (WebCore::GraphicsContext3D::disable):
        (WebCore::GraphicsContext3D::disableVertexAttribArray):
        (WebCore::GraphicsContext3D::drawArrays):
        (WebCore::GraphicsContext3D::drawElements):
        (WebCore::GraphicsContext3D::enable):
        (WebCore::GraphicsContext3D::enableVertexAttribArray):
        (WebCore::GraphicsContext3D::finish):
        (WebCore::GraphicsContext3D::flush):
        (WebCore::GraphicsContext3D::framebufferRenderbuffer):
        (WebCore::GraphicsContext3D::framebufferTexture2D):
        (WebCore::GraphicsContext3D::frontFace):
        (WebCore::GraphicsContext3D::generateMipmap):
        (WebCore::GraphicsContext3D::getActiveAttribImpl):
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getActiveUniformImpl):
        (WebCore::GraphicsContext3D::getActiveUniform):
        (WebCore::GraphicsContext3D::getAttachedShaders):
        (WebCore::generateHashedName):
        (WebCore::GraphicsContext3D::mappedSymbolInShaderSourceMap):
        (WebCore::GraphicsContext3D::mappedSymbolName):
        (WebCore::GraphicsContext3D::originalSymbolInShaderSourceMap):
        (WebCore::GraphicsContext3D::originalSymbolName):
        (WebCore::GraphicsContext3D::getAttribLocation):
        (WebCore::GraphicsContext3D::getAttribLocationDirect):
        (WebCore::GraphicsContext3D::getContextAttributes):
        (WebCore::GraphicsContext3D::moveErrorsToSyntheticErrorList):
        (WebCore::GraphicsContext3D::getError):
        (WebCore::GraphicsContext3D::getString):
        (WebCore::GraphicsContext3D::hint):
        (WebCore::GraphicsContext3D::isBuffer):
        (WebCore::GraphicsContext3D::isEnabled):
        (WebCore::GraphicsContext3D::isFramebuffer):
        (WebCore::GraphicsContext3D::isProgram):
        (WebCore::GraphicsContext3D::isRenderbuffer):
        (WebCore::GraphicsContext3D::isShader):
        (WebCore::GraphicsContext3D::isTexture):
        (WebCore::GraphicsContext3D::lineWidth):
        (WebCore::GraphicsContext3D::linkProgram):
        (WebCore::GraphicsContext3D::pixelStorei):
        (WebCore::GraphicsContext3D::polygonOffset):
        (WebCore::GraphicsContext3D::sampleCoverage):
        (WebCore::GraphicsContext3D::scissor):
        (WebCore::GraphicsContext3D::shaderSource):
        (WebCore::GraphicsContext3D::stencilFunc):
        (WebCore::GraphicsContext3D::stencilFuncSeparate):
        (WebCore::GraphicsContext3D::stencilMask):
        (WebCore::GraphicsContext3D::stencilMaskSeparate):
        (WebCore::GraphicsContext3D::stencilOp):
        (WebCore::GraphicsContext3D::stencilOpSeparate):
        (WebCore::GraphicsContext3D::texParameterf):
        (WebCore::GraphicsContext3D::texParameteri):
        (WebCore::GraphicsContext3D::uniform1f):
        (WebCore::GraphicsContext3D::uniform1fv):
        (WebCore::GraphicsContext3D::uniform2f):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform3f):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform4f):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform1i):
        (WebCore::GraphicsContext3D::uniform1iv):
        (WebCore::GraphicsContext3D::uniform2i):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3i):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4i):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):
        (WebCore::GraphicsContext3D::useProgram):
        (WebCore::GraphicsContext3D::validateProgram):
        (WebCore::GraphicsContext3D::vertexAttrib1f):
        (WebCore::GraphicsContext3D::vertexAttrib1fv):
        (WebCore::GraphicsContext3D::vertexAttrib2f):
        (WebCore::GraphicsContext3D::vertexAttrib2fv):
        (WebCore::GraphicsContext3D::vertexAttrib3f):
        (WebCore::GraphicsContext3D::vertexAttrib3fv):
        (WebCore::GraphicsContext3D::vertexAttrib4f):
        (WebCore::GraphicsContext3D::vertexAttrib4fv):
        (WebCore::GraphicsContext3D::vertexAttribPointer):
        (WebCore::GraphicsContext3D::viewport):
        (WebCore::GraphicsContext3D::createVertexArray):
        (WebCore::GraphicsContext3D::deleteVertexArray):
        (WebCore::GraphicsContext3D::isVertexArray):
        (WebCore::GraphicsContext3D::bindVertexArray):
        (WebCore::GraphicsContext3D::getBooleanv):
        (WebCore::GraphicsContext3D::getBufferParameteriv):
        (WebCore::GraphicsContext3D::getFloatv):
        (WebCore::GraphicsContext3D::getInteger64v):
        (WebCore::GraphicsContext3D::getFramebufferAttachmentParameteriv):
        (WebCore::GraphicsContext3D::getProgramiv):
        (WebCore::GraphicsContext3D::getNonBuiltInActiveSymbolCount):
        (WebCore::GraphicsContext3D::getUnmangledInfoLog):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getRenderbufferParameteriv):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):
        (WebCore::GraphicsContext3D::getTexParameterfv):
        (WebCore::GraphicsContext3D::getTexParameteriv):
        (WebCore::GraphicsContext3D::getUniformfv):
        (WebCore::GraphicsContext3D::getUniformiv):
        (WebCore::GraphicsContext3D::getUniformLocation):
        (WebCore::GraphicsContext3D::getVertexAttribfv):
        (WebCore::GraphicsContext3D::getVertexAttribiv):
        (WebCore::GraphicsContext3D::getVertexAttribOffset):
        (WebCore::GraphicsContext3D::texSubImage2D):
        (WebCore::GraphicsContext3D::compressedTexImage2D):
        (WebCore::GraphicsContext3D::compressedTexSubImage2D):
        (WebCore::GraphicsContext3D::createBuffer):
        (WebCore::GraphicsContext3D::createFramebuffer):
        (WebCore::GraphicsContext3D::createProgram):
        (WebCore::GraphicsContext3D::createRenderbuffer):
        (WebCore::GraphicsContext3D::createShader):
        (WebCore::GraphicsContext3D::createTexture):
        (WebCore::GraphicsContext3D::deleteBuffer):
        (WebCore::GraphicsContext3D::deleteFramebuffer):
        (WebCore::GraphicsContext3D::deleteProgram):
        (WebCore::GraphicsContext3D::deleteRenderbuffer):
        (WebCore::GraphicsContext3D::deleteShader):
        (WebCore::GraphicsContext3D::deleteTexture):
        (WebCore::GraphicsContext3D::synthesizeGLError):
        (WebCore::GraphicsContext3D::markContextChanged):
        (WebCore::GraphicsContext3D::markLayerComposited):
        (WebCore::GraphicsContext3D::layerComposited const):
        (WebCore::GraphicsContext3D::forceContextLost):
        (WebCore::GraphicsContext3D::recycleContext):
        (WebCore::GraphicsContext3D::dispatchContextChangedNotification):
        (WebCore::GraphicsContext3D::texImage2DDirect):
        (WebCore::GraphicsContext3D::drawArraysInstanced):
        (WebCore::GraphicsContext3D::drawElementsInstanced):
        (WebCore::GraphicsContext3D::vertexAttribDivisor):
        * platform/graphics/angle/TemporaryANGLESetting.cpp: Added.
        (WebCore::TemporaryANGLESetting::TemporaryANGLESetting):
        (WebCore::TemporaryANGLESetting::~TemporaryANGLESetting):
        * platform/graphics/angle/TemporaryANGLESetting.h: Added.
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::checkGPUStatus):
        (WebCore::GraphicsContext3D::screenDidChange):
        * platform/graphics/cocoa/WebGLLayer.h:
        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer display]):
        * platform/graphics/cv/TextureCacheCV.mm:
        (WebCore::TextureCacheCV::create):
        (WebCore::TextureCacheCV::textureFromImage):
        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::enumToStringMap):
        (WebCore::VideoTextureCopierCV::initializeContextObjects):
        (WebCore::VideoTextureCopierCV::initializeUVContextObjects):
        (WebCore::VideoTextureCopierCV::copyImageToPlatformTexture):
        (WebCore::VideoTextureCopierCV::copyVideoTextureToPlatformTexture):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:

2019-06-17  Ludovico de Nittis  <ludovico.denittis@collabora.com>

        [GTK] Stop accessing GdkEvent fields when possible
        https://bugs.webkit.org/show_bug.cgi?id=198829

        Reviewed by Michael Catanzaro.

        Direct access to GdkEvent structs is no longer possible in GTK 4.

        No behaviour changes.

        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::eventTypeForGdkKeyEvent):
        (WebCore::modifiersForGdkKeyEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/gtk/PlatformMouseEventGtk.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/gtk/PlatformWheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2019-06-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed, rolling out r246467.

        It broke scrolling with mouse wheel

        Reverted changeset:

        "[GTK] Stop accessing GdkEvent fields when possible"
        https://bugs.webkit.org/show_bug.cgi?id=198829
        https://trac.webkit.org/changeset/246467

2019-06-16  Darin Adler  <darin@apple.com>

        Convert some uses of fixed width and fixed precision floating point formatting to use shortest instead
        https://bugs.webkit.org/show_bug.cgi?id=198896

        Reviewed by Sam Weinig.

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::loggingString const): Removed unneeded use of
        FormattedNumber::fixedWidth to override the default shortest-form formatting.
        * page/History.cpp:
        (WebCore::History::stateObjectAdded): Ditto.

        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageProperty): Use String::number instead of
        String::numberToStringFixedPrecision. Also removed some uses of
        FormattedNumber::fixedPrecision.
        * platform/graphics/FloatPolygon.cpp:
        (WebCore::FloatPolygonEdge::debugString const): Ditto.

2019-06-16  Darin Adler  <darin@apple.com>

        Rename AtomicString to AtomString
        https://bugs.webkit.org/show_bug.cgi?id=195276

        Reviewed by Michael Catanzaro.

        * many files: Let do-webcore-rename do the renaming.

2019-06-16  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Avoid roundoff error when setting AVCapture min/max frame rate
        https://bugs.webkit.org/show_bug.cgi?id=198875
        <rdar://problem/51768374>

        Reviewed by Youenn Fablet.

        * platform/graphics/MediaPlayer.h:
        (WTF::LogArgument<MediaTime>::toString): Deleted, moved to MediaTime.h.
        (WTF::LogArgument<MediaTimeRange>::toString): Deleted, moved to MediaTime.h.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setSessionSizeAndFrameRate): Avoid roundoff error.

2019-06-16  Simon Fraser  <simon.fraser@apple.com>

        Implement ScrollableArea::scrollOffset()
        https://bugs.webkit.org/show_bug.cgi?id=198895

        Reviewed by Antti Koivisto.

        Remove from ScrollableArea the following:
            virtual int scrollSize(ScrollbarOrientation) const = 0;
            virtual int scrollOffset(ScrollbarOrientation) const = 0;
        and instead implement ScrollOffset scrollOffset() const.

        Also make scrollPosition() pure virtual, avoiding the reverse dependency where
        this base class implementation got values from scrollbars.
        
        scrollSize(ScrollbarOrientation) was only used by ScrollAnimatorIOS and we can
        do the same computation via min/max scroll positions.
        
        RenderListBox and PopupMenuWin need implementations of scrollPosition().
        
        Remove some PLATFORM(IOS_FAMILY) #ifdefs from ScrollableArea for code that compiles
        on all platforms.

        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::overhangAmount const):
        (WebCore::ScrollView::scrollSize const): Deleted.
        (WebCore::ScrollView::scrollOffset const): Deleted.
        * platform/ScrollView.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::isPinnedVerticallyInDirection const):
        (WebCore::ScrollableArea::scrollOffset const):
        (WebCore::ScrollableArea::scrollPosition const): Deleted.
        * platform/ScrollableArea.h:
        (WebCore::offsetForOrientation):
        (WebCore::ScrollableArea::isHorizontalScrollerPinnedToMinimumPosition const):
        (WebCore::ScrollableArea::isHorizontalScrollerPinnedToMaximumPosition const):
        (WebCore::ScrollableArea::isVerticalScrollerPinnedToMinimumPosition const):
        (WebCore::ScrollableArea::isVerticalScrollerPinnedToMaximumPosition const):
        (WebCore::ScrollableArea::tiledBacking const): Deleted.
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::offsetDidChange):
        * platform/ios/ScrollAnimatorIOS.mm:
        (WebCore::ScrollAnimatorIOS::handleTouchEvent):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::scrollPosition const):
        (WebCore::PopupMenuWin::wndProc):
        (WebCore::PopupMenuWin::scrollSize const): Deleted.
        (WebCore::PopupMenuWin::scrollOffset const): Deleted.
        * platform/win/PopupMenuWin.h:
        (WebCore::PopupMenuWin::scrollOffset const): Deleted.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollSize const): Deleted.
        (WebCore::RenderLayer::scrollOffset const): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::scrollPosition const):
        (WebCore::RenderListBox::scrollSize const): Deleted.
        (WebCore::RenderListBox::scrollOffset const): Deleted.
        * rendering/RenderListBox.h:

2019-06-16  Zalan Bujtas  <zalan@apple.com>

        Address Sam's post-landing review of r246234.

        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::LineLayout::createDisplayRuns const):

2019-06-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Decouple baseline ascent/descent and baseline offset.
        https://bugs.webkit.org/show_bug.cgi?id=198901
        <rdar://problem/51782393>

        Reviewed by Antti Koivisto.

        Baseline offset is the baseline's distance from the line's logical top -and it is not necessarily the same as the baseline's ascent.
        It's easier to track the baseline and its top separately since certain properties only change one or the other.

        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::LineLayout::placeInlineItems const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::createDisplayRuns const):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::Line):
        (WebCore::Layout::Line::close):
        (WebCore::Layout::Line::adjustBaselineAndLineHeight):
        (WebCore::Layout::Line::halfLeadingMetrics):
        * layout/inlineformatting/InlineLine.h:
        (WebCore::Layout::Line::Content::baselineOffset const):
        (WebCore::Layout::Line::Content::setBaselineOffset):
        (WebCore::Layout::Line::baselineOffset const):
        * layout/inlineformatting/InlineLineBox.h:
        (WebCore::Layout::LineBox::baselineOffset const):
        (WebCore::Layout::LineBox::LineBox):

2019-06-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Intruding float may prevent adding any inline box
        https://bugs.webkit.org/show_bug.cgi?id=198891
        <rdar://problem/51779956>

        Reviewed by Antti Koivisto.

        Take the intruding left/right float pair and find the vertical position where the next line might go
        if these floats prevent us from adding even one inline box to the current line.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::mapPointToAncestor):
        (WebCore::Layout::FormattingContext::mapPointToDescendent):
        * layout/FormattingContext.h:
        * layout/LayoutUnits.h:
        (WebCore::Layout::Point::max):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::LineLayout::placeInlineItems const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::layout const):

2019-06-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Add bottom value to FloatingState::Constraints
        https://bugs.webkit.org/show_bug.cgi?id=198889
        <rdar://problem/51776730>

        Reviewed by Antti Koivisto.

        Constraints::left/right->y indicates where this particular constrain ends. This is going to be used by inline layout to figure where
        the next line should go (vertical position).

        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::constraints const):
        * layout/floats/FloatingState.h:

2019-06-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Ignore descent when in limited/full quirks mode
        https://bugs.webkit.org/show_bug.cgi?id=198893
        <rdar://problem/51780634>

        Reviewed by Antti Koivisto.

        In limited/full quirks mode, line's descent should be ignored when computing the final line height when
        1. the line has baseline aligned content only and
        2. these baseline aligned boxes don't have descent.

        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::isVisuallyEmpty const):
        (WebCore::Layout::Line::close):

2019-06-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Line::isVisuallyEmpty should check inline-block boxes.
        https://bugs.webkit.org/show_bug.cgi?id=198894
        <rdar://problem/51780886>

        Reviewed by Antti Koivisto.

        Non-zero width/height inline-block boxes make the line visually non-empty.

        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::isVisuallyEmpty const):

2019-06-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add Layout::Box::isContainingBlockDescendantOf
        https://bugs.webkit.org/show_bug.cgi?id=198888
        <rdar://problem/51776466>

        Reviewed by Antti Koivisto.

        Box::isDescendantOf indicates simple ancestor - descendant relationship, while
        isContainingBlockDescendantOf checks the containing block chain.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::mapHorizontalPositionToAncestor):
        (WebCore::Layout::FormattingContext::mapBoxToAncestor):
        (WebCore::Layout::FormattingContext::mapTopToAncestor):
        (WebCore::Layout::FormattingContext::mapPointToAncestor):
        * layout/floats/FloatingState.h:
        (WebCore::Layout::FloatingState::FloatItem::isDescendantOfFormattingRoot const):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isDescendantOf const):
        (WebCore::Layout::Box::isContainingBlockDescendantOf const):
        * layout/layouttree/LayoutBox.h:

2019-06-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Remove Line::Content::isVisuallyEmpty
        https://bugs.webkit.org/show_bug.cgi?id=198892
        <rdar://problem/51780345>

        Reviewed by Antti Koivisto.

        Instead of setting the isVisuallyEmpty flag, reset the line height to 0. 

        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::LineLayout::createDisplayRuns const):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::close):
        * layout/inlineformatting/InlineLine.h:
        (WebCore::Layout::Line::Content::isEmpty const):
        (WebCore::Layout::Line::Content::setBaseline):
        (WebCore::Layout::Line::Content::isVisuallyEmpty const): Deleted.
        (WebCore::Layout::Line::Content::setIsVisuallyEmpty): Deleted.

2019-06-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add limited quirks mode to LayoutState.
        https://bugs.webkit.org/show_bug.cgi?id=198881
        <rdar://problem/51773229>

        Reviewed by Antti Koivisto.

        This is in preparation for introducing limited quirks mode to inline layout.

        * layout/LayoutState.h:
        (WebCore::Layout::LayoutState::setQuirksMode):
        (WebCore::Layout::LayoutState::inQuirksMode const):
        (WebCore::Layout::LayoutState::inLimitedQuirksMode const):
        (WebCore::Layout::LayoutState::inNoQuirksMode const):
        (WebCore::Layout::LayoutState::setInQuirksMode): Deleted.
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

2019-06-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Completely collapsed runs should not go to the trimmable run list.
        https://bugs.webkit.org/show_bug.cgi?id=198900
        <rdar://problem/51782156>

        Reviewed by Antti Koivisto.

        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::trailingTrimmableWidth const):
        (WebCore::Layout::Line::appendTextContent):

2019-06-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Use the borderBox rect consistently to size the inline box.
        https://bugs.webkit.org/show_bug.cgi?id=198899

        Reviewed by Antti Koivisto.
        <rdar://problem/51781969>

        Use the margin box height (when applicable) to adjust the line height and use the borderBox rect (or font size) height to size the inline box.

        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::borderBoxHeight const):
        (WebCore::Display::Box::marginBoxHeight const):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::appendInlineContainerStart):
        (WebCore::Layout::Line::appendTextContent):
        (WebCore::Layout::Line::appendNonReplacedInlineBox):
        (WebCore::Layout::Line::inlineItemContentHeight const):
        (WebCore::Layout::Line::inlineItemHeight const): Deleted.
        * layout/inlineformatting/InlineLine.h:

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

        Make layerTreeAsText() output a bit less verbose
        https://bugs.webkit.org/show_bug.cgi?id=198870

        Reviewed by Tim Horton.

        "accelerates drawing" was getting dumped twice for debug dumps.
        Only dump the non-default state for "uses display-list drawing".
        Use the new OptionSet<> dumping for GraphicsLayerPaintingPhases.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties const):
        (WebCore::operator<<):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):

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

        Make MediaStream constructor take a Document instead of a ScriptExecutionContext
        https://bugs.webkit.org/show_bug.cgi?id=198873

        Reviewed by Darin Adler.

        Update MediaStream constructors and call site to take a Document&.
        Make the same for creation of CanvasCaptureMediaStreamTrack.
        No observable change of behavior.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::create):
        (WebCore::CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack):
        (WebCore::loggerFromContext): Deleted.
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.h:
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create):
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::clone):
        (WebCore::loggerFromContext): Deleted.
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStream.idl:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::allow):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::captureStream):
        * html/HTMLCanvasElement.h:
        * html/HTMLCanvasElement.idl:

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

        [LFC][BFC] Fix available width for non-floating positioned float avoiders.
        https://bugs.webkit.org/show_bug.cgi?id=198886
        <rdar://problem/51773643>

        Reviewed by Antti Koivisto.

        Normally the available width for an in-flow block level box is the width of the containing block's content box.
        However a non-floating positioned float avoider box might be constrained by existing floats.
        The idea here is that we pre-compute(estimate) the vertical position and check the current floating context for
        left and right floats. These floats contrain the available width and this computed value should be used instead of the containing block's
        content box's width whe calculating the used width for width: auto.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::mapHorizontalPositionToAncestor):
        (WebCore::Layout::FormattingContext::mapLeftToAncestor):
        (WebCore::Layout::FormattingContext::mapRightToAncestor):
        (WebCore::Layout::FormattingContext::mapPointToAncestor):
        (WebCore::Layout::FormattingContext::mapCoordinateToAncestor): Deleted.
        * layout/FormattingContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::usedAvailableWidthForFloatAvoider const):
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::BlockFormattingContext::computeStaticVerticalPosition const):
        (WebCore::Layout::BlockFormattingContext::computeStaticHorizontalPosition const):
        (WebCore::Layout::BlockFormattingContext::computeStaticPosition const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPositionForFormattingRoot const):
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin const):
        * layout/blockformatting/BlockFormattingContext.h:
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::staticVerticalPosition):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticHorizontalPosition):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition):
        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::constraints const):
        * layout/layouttree/LayoutBlockContainer.cpp:
        (WebCore::Layout::BlockContainer::establishesInlineFormattingContextOnly const):
        * layout/layouttree/LayoutBlockContainer.h:
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isFloatAvoider const):
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::establishesInlineFormattingContextOnly const):

2019-06-15  Ludovico de Nittis  <ludovico.denittis@collabora.com>

        [GTK] Stop accessing GdkEvent fields when possible
        https://bugs.webkit.org/show_bug.cgi?id=198829

        Reviewed by Michael Catanzaro.

        Direct access to GdkEvent structs is no longer possible in GTK 4.

        No behaviour changes.

        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::eventTypeForGdkKeyEvent):
        (WebCore::modifiersForGdkKeyEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/gtk/PlatformMouseEventGtk.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/gtk/PlatformWheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2019-06-15  Rob Buis  <rbuis@igalia.com>

        Add tests for prefetch redirects
        https://bugs.webkit.org/show_bug.cgi?id=197371

        Reviewed by Youenn Fablet.

        Test: http/wpt/prefetch/link-prefetch-main-resource-redirect.html

        Allow clearing of the Purpose request header field.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::clearPurpose):
        * platform/network/ResourceRequestBase.h:

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

        [LFC][MarginCollapsing] Remove redundant checks in MarginCollapse::marginBefore/AfterCollapsesWith*
        https://bugs.webkit.org/show_bug.cgi?id=198882
        <rdar://problem/51773334>

        Reviewed by Antti Koivisto.

        In-flow child can neither be floating nor out-of-flow positioned.

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithFirstInFlowChildMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithLastInFlowChildMarginAfter):

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

        [LFC][MarginCollapsing] Collapsed through margin values preserve quirk state.
        https://bugs.webkit.org/show_bug.cgi?id=198885
        <rdar://problem/51773568>

        Reviewed by Antti Koivisto.

        The collapsed through margin becomes a quirk margin if either of the vertical(before/after) margins have quirk value.

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::computedPositiveAndNegativeMargin):

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

        [LFC[MarginCollapsing] Anonymous boxes never collapse their margins with siblings.
        https://bugs.webkit.org/show_bug.cgi?id=198884
        <rdar://problem/51773509>

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithPreviousSiblingMarginAfter):

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

        [LFC][MarginCollapsing] Add check for computed height value in MarginCollapse::marginsCollapseThrough
        https://bugs.webkit.org/show_bug.cgi?id=198883
        <rdar://problem/51773395>

        Reviewed by Antti Koivisto.

        "A box's own margins collapse if... ...and it has a 'height' of either 0 or 'auto"
        https://www.w3.org/TR/CSS22/box.html#collapsing-margins

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginsCollapseThrough):

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

        [LFC] Fix available width for shrink-to-fit (for out-of-flow non-replaced box)
        https://bugs.webkit.org/show_bug.cgi?id=198880
        <rdar://problem/51773118>

        Reviewed by Antti Koivisto.

        This patch fixes the cases when the available width for the out-of-flow positioned box is not the same as the containing block's (padding)width.  

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):

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

        [LFC] Fix over-constrained logic for out-of-flow non-replaced horizontal geometry.
        https://bugs.webkit.org/show_bug.cgi?id=198879
        <rdar://problem/51772995>

        Reviewed by Antti Koivisto.

        The over-constrained logic applies to the case when all the horizontal properties are set.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):

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

        [LFC] Convert both the absolutely and statically positioned out-of-flow block level boxes positions relative to the containing block's padding box
        https://bugs.webkit.org/show_bug.cgi?id=198878
        <rdar://problem/51772882>

        Reviewed by Antti Koivisto.

        This patch ensures that while we compute the vertical/horizontal geometry for an out-of-flow block level box,
        the static and the absolute positioned values are in the same coordinate system (relative to the containing block's padding box).

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::staticVerticalPositionForOutOfFlowPositioned):
        (WebCore::Layout::staticHorizontalPositionForOutOfFlowPositioned):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):

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

        [LFC][IFC] Add support for vertical-align: top and bottom
        https://bugs.webkit.org/show_bug.cgi?id=198697
        <rdar://problem/51556188>

        Reviewed by Antti Koivisto.

        Use the layout box's vertical alignment to adjust line baseline and height and set the run's logical top when the line is being closed.

        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::isVisuallyEmpty const):
        (WebCore::Layout::Line::close):
        (WebCore::Layout::Line::appendInlineContainerStart):
        (WebCore::Layout::Line::appendTextContent):
        (WebCore::Layout::Line::appendNonReplacedInlineBox):
        (WebCore::Layout::Line::appendHardLineBreak):
        (WebCore::Layout::Line::adjustBaselineAndLineHeight):
        (WebCore::Layout::Line::inlineItemHeight const):
        (WebCore::Layout::Line::Content::isVisuallyEmpty const): Deleted.
        * layout/inlineformatting/InlineLine.h:
        (WebCore::Layout::Line::Content::isVisuallyEmpty const):
        (WebCore::Layout::Line::Content::setIsVisuallyEmpty):
        (WebCore::Layout::Line::hasContent const):

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

        [Pointer Events] button property is -1 for pointerdown and pointerup
        https://bugs.webkit.org/show_bug.cgi?id=198868
        <rdar://problem/51758109>

        Reviewed by Dean Jackson.

        A value of -1 for "button", which means there was no change of pressed button since the last event, should only ever be used for "pointermove" events.

        Test: pointerevents/mouse/pointer-button-and-buttons.html

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

2019-06-14  Megan Gardner  <megan_gardner@apple.com>

        Move Synthetic Editing Commands to behind an experimental feature flag
        https://bugs.webkit.org/show_bug.cgi?id=198842
        <rdar://problem/50594700>

        Reviewed by Simon Fraser.

        Moving from a quirk to a feature flag.

        * page/Quirks.cpp:
        (WebCore::shouldEmulateEditingButtonsAndGesturesInHiddenEditableAreasForHost): Deleted.
        (WebCore::Quirks::shouldEmulateEditingButtonsAndGesturesInHiddenEditableAreas const): Deleted.
        * page/Quirks.h:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setSyntheticEditingCommandsEnabled):
        (WebCore::RuntimeEnabledFeatures::syntheticEditingCommandsEnabled const):

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

        REGRESSION(244439): platform/mac/media/encrypted-media/fps-* tests are crashing
        https://bugs.webkit.org/show_bug.cgi?id=198612
        <rdar://problem/51078978>

        Reviewed by Eric Carlson.

        There are two implementations of a 'cenc' initialiation data factory; an ASSERT fires when
        the second one is added to the registry. Unify them.

        * Modules/encryptedmedia/InitDataRegistry.cpp:
        (WebCore::extractKeyIDsCenc):
        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        (WebCore::CDMPrivateFairPlayStreaming::validFairPlayStreamingSchemes):
        (WebCore::CDMPrivateFairPlayStreaming::fairPlaySystemID):
        (WebCore::validInitDataTypes):
        (WebCore::CDMFactory::platformRegisterFactories):
        (WebCore::validFairPlayStreamingSchemes): Deleted.
        (WebCore::CDMPrivateFairPlayStreaming::cencName): Deleted.
        (WebCore::fairPlaySystemID): Deleted.
        (WebCore::extractSchemeAndKeyIdFromCenc): Deleted.
        (WebCore::CDMPrivateFairPlayStreaming::extractKeyIDsCenc): Deleted.
        (WebCore::CDMPrivateFairPlayStreaming::sanitizeCenc): Deleted.
        * platform/graphics/avfoundation/CDMFairPlayStreaming.h:

2019-06-14  Saam Barati  <sbarati@apple.com>

        Unreviewed. Follow up to r246438. This removes a debug assert until
        we do further compiler work in: https://bugs.webkit.org/show_bug.cgi?id=198861

        * Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp:
        (WebCore::WHLSL::checkDuplicateFunctions):
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:

2019-06-14  Saam Barati  <sbarati@apple.com>

        [WHLSL] Implement out-of-bounds and nullptr behavior
        https://bugs.webkit.org/show_bug.cgi?id=198600
        <rdar://problem/51668853>

        Reviewed by Robin Morisset.

        The behavior we're implementing is:
        - OOB writes are ignored.
        - OOB reads return zero.
        - Writes to null are ignored.
        - Reads from null return zero.
        - &*x == x, including &*null == null.
        
        We implement this like so:
        - The value stack in FunctionWriter turns into a stack of pairs: rvalues and lvalues.
          rvalues are represented the same as before. Lvalues are always pointers.
        - Anything that produces an lvalue must push a pointer to the stack. Not
          all things produce lvalues, so that entry in the stack may be empty.
          However, all things that produce lvalues also produce rvalues. So, "*x = 42" works,
          and so does "foo(*x)". Nodes that produce lvalues are responsible for also producing
          an rvalue, which should be the value as if the lvalue was dereferenced at that point
          in program execution. So the "*x" in "thread int* x = null; *x" produces the int zero
          for its rvalue, and null for its lvalue.
        - Dereference just works, as dereference produces both an lvalue and rvalue. Dereference
          node's child must also be an lvalue. So we just forward that value along on
          the stack. For the rvalue, if we try to dereference nullptr, we just fill in
          zero bytes instead. Otherwise, the rvalue is the result of dereferencing the
          non-null pointer.
        - Assignment expressions check if the incoming lvalue is null. If it is, it
          skips the assignment.
        - operator&[] returns nullptr on an OOB access. Then, based on the above
          behavior, we get the desired OOB reads return zero, and OOB writes are
          ignored.
        - MakePointerExpression just takes the last lvalue off the stack (which must
          be a pointer) and returns it as an rvalue.
        - VariableReference will push both the variable value and a pointer to the variable
          onto the stack.

        This patch also fixes a few bugs where we weren't giving certain AST nodes the
        proper address space values.

        This patch also removes code to generate native functions for operators
        "operator[]" and "operator[]=" as we should never be generating these
        ourselves. We should only be generating the "operator&[]" ander.

        Tests: webgpu/whlsl-null-dereference.html
               webgpu/whlsl-oob-access.html

        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::FunctionDefinitionWriter):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::appendRightValue):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::appendLeftValue):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::takeLastValue):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::takeLastLeftValue):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::emitLoop):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::writeNativeFunction):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:
        (WebCore::WHLSL::Metal::TypeNamer::emitUnnamedTypeDefinition):
        * Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp:
        (WebCore::WHLSL::PreserveLifetimes::assignVariableIntoStruct):
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        (WebCore::WHLSL::PropertyResolver::visit):
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:
        * platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:
        (WebCore::trySetFunctions):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::trySetFunctions):

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

        CRASH(nullptr) in WebCore::jsAudioContextCurrentTime()
        https://bugs.webkit.org/show_bug.cgi?id=198859
        <rdar://problem/27986991>

        Reviewed by Eric Carlson.

        AudioContext's m_destinationNode can become null during iframe teardown,
        but can AudioContext methods can still be called by JavaScript. Add null-checks
        to all (remaing) unprotected dereferences of m_destinationNode.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::uninitialize):
        (WebCore::AudioContext::createBufferSource):
        (WebCore::AudioContext::createScriptProcessor):
        (WebCore::AudioContext::createBiquadFilter):
        (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):
        * Modules/webaudio/AudioContext.h:
        (WebCore::AudioContext::currentSampleFrame const):
        (WebCore::AudioContext::currentTime const):
        (WebCore::AudioContext::sampleRate const):

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

        Cloning a MediaStreamTrack does not clone the logger
        https://bugs.webkit.org/show_bug.cgi?id=198844

        Reviewed by Eric Carlson.

        Make MediaStream and MediaStreamTrack rely on their private versions for logging.
        Move from a RefPtr version to a Ref so as to forbid nullptr crashes.
        Make sure that RealtimeIncomingAudioSource and RealtimeIncomingVideoSource check for their logger before logging.
        Covered by existing tests and updated test.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::loggerFromContext):
        (WebCore::CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack):
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::loggerFromContext):
        (WebCore::MediaStream::create):
        (WebCore::MediaStream::MediaStream):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::allow):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::mediaStreamFromRTCStream):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::createReceiverForSource):
        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::create):
        (WebCore::MediaStreamPrivate::MediaStreamPrivate):
        (WebCore::MediaStreamPrivate::setLogger): Deleted.
        * platform/mediastream/MediaStreamPrivate.h:
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::create):
        (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate):
        (WebCore::MediaStreamTrackPrivate::clone):
        (WebCore::MediaStreamTrackPrivate::setLogger): Deleted.
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::createMediaStream):
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp:
        (WebCore::RealtimeIncomingAudioSourceCocoa::OnData):
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferPool):
        (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferFromVideoFrame):
        (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame):

2019-06-14  Ali Juma  <ajuma@chromium.org>

        IntersectionObserver rootMargin detection fails when `root` is an element
        https://bugs.webkit.org/show_bug.cgi?id=198784

        Reviewed by Simon Fraser.

        When computing a target's bounds in root space, we were applying the root's
        clip rect (if any), and then intersecting with the root rect expanded by the
        root margin. This meant that if a target did not intersect the non-expanded root
        rect, we would get an empty intersection even if the target did intersect the
        expanded root rect. Fix this by not applying the root's clip rect when computing
        a target's bounds in root space. Add a new VisibleRectContextOption::ApplyContainerClip
        that determines whether RenderObject::computeVisibleRectInContainer should apply
        the container's clip.

        Test: imported/w3c/web-platform-tests/intersection-observer/root-margin-root-element.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::applyCachedClipAndScrollPosition const):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::visibleRectContextForRepaint):
        * rendering/RenderObject.h:

2019-06-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [cairo] Entering text into forms on github.com creates a trapezoid artifact
        https://bugs.webkit.org/show_bug.cgi?id=126124

        Reviewed by Michael Catanzaro.

        Mixing antialiasing modes in the same clip is not actually supported by cairo. In the case of rectangle clips we
        are already ignoring the current antialiasing to not do any antialiasing. We could do the opposite for clips
        receiving a path, we want to enforce antialiasing in that case since the paths might contain curves. Doing that
        we ensure all calls to clip with a path use the same antialiasing, which is the case of the github bug.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::doClipWithAntialias): Helper to call cairo_clip() with the given antialising mode.
        (WebCore::Cairo::clip): Use doClipWithAntialias().
        (WebCore::Cairo::clipOut): Ditto.
        (WebCore::Cairo::clipPath): Ditto.

2019-06-13  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Remove unnecessary ASSERT()s and clean up visitor lambdas
        https://bugs.webkit.org/show_bug.cgi?id=198706

        Reviewed by Dean Jackson, Saam Barati, and Robin Morisset.

        Some minor refactoring.

        If the code is going to unconditionally downcast<Foo>(bar), there's no need
        to guard that with an ASSERT(is<Foo>(bar)) because the downcast() call will
        do that automatically.

        No new tests because there is no behavior change.

        * Modules/webgpu/WHLSL/AST/WHLSLConstantExpression.h:
        (WebCore::WHLSL::AST::ConstantExpression::visit):
        (WebCore::WHLSL::AST::ConstantExpression::visit const):
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:
        (WebCore::WHLSL::Metal::EntryPointScaffolding::resourceHelperTypes):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::mangledOutputPath):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::unpackResourcesAndNamedBuiltIns):
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::constantExpressionString):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::writeNativeFunction):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeTypeWriter.cpp:
        (WebCore::WHLSL::Metal::writeNativeType):
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:
        (WebCore::WHLSL::Metal::find):
        (WebCore::WHLSL::Metal::TypeNamer::createNameNode):
        (WebCore::WHLSL::Metal::TypeNamer::insert):
        (WebCore::WHLSL::Metal::TypeNamer::emitUnnamedTypeDefinition):
        (WebCore::WHLSL::Metal::TypeNamer::emitNamedTypeDefinition):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::Checker::visit):
        (WebCore::WHLSL::argumentTypeForAndOverload):
        * Modules/webgpu/WHLSL/WHLSLInferTypes.cpp:
        (WebCore::WHLSL::inferTypesForTypeArguments):
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.cpp:
        (WebCore::WHLSL::Intrinsics::addFullTexture):
        (WebCore::WHLSL::Intrinsics::addDepthTexture):
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        (WebCore::WHLSL::modify):
        (WebCore::WHLSL::PropertyResolver::visit):
        * Modules/webgpu/WHLSL/WHLSLVisitor.cpp:
        (WebCore::WHLSL::Visitor::visit):

2019-06-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Hook up compute
        https://bugs.webkit.org/show_bug.cgi?id=198644

        Reviewed by Saam Barati.

        This patch hooks up compute shaders in exactly the same way that vertex and fragment shaders
        are hooked up. I've modified the two patchs (compute and rendering) to be almost exactly the
        same code.

        This patch also adds support for the WHLSL compiler to determine what the numthreads()
        attribute in the shader says so that it can be hooked up to Metal's threads-per-threadgroup
        argument in the dispatch call. There is some logic to make sure that there aren't two
        numthreads() attributes on the same compute shader.

        It also adds a little bit of type renaming. For built-in variables, sometimes Metal's type
        doesn't always match WHLSL's (and HLSL's type). For example, in WHLSL and HLSL,        SV_DispatchThreadID variables have to be a float3, but in Metal, they are a uint3.
        Therefore, I've added a little bit of code during each entry point's pack and unpack stages
        to handle this type conversion.

        Test: webgpu/whlsl-compute.html

        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:
        (WebCore::WHLSL::Metal::internalTypeForSemantic): Determine which Metal type corresponds to
        each built-in variable.
        (WebCore::WHLSL::Metal::EntryPointScaffolding::builtInsSignature): Perform the type
        conversion.
        (WebCore::WHLSL::Metal::EntryPointScaffolding::unpackResourcesAndNamedBuiltIns): Ditto.
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::VertexEntryPointScaffolding): Ditto.
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::helperTypes): Ditto.
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::pack): Ditto.
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::FragmentEntryPointScaffolding): Ditto.
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::helperTypes): Ditto.
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::pack): Ditto.
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::signature): Ditto.
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.h:
        * Modules/webgpu/WHLSL/WHLSLComputeDimensions.cpp: Added. Add a pass to determine whether
        or not any entry point has duplicate numthreads() attribute, and to determine what the
        appropriate numthreads() values should be for the current entry point.
        (WebCore::WHLSL::ComputeDimensionsVisitor::ComputeDimensionsVisitor):
        (WebCore::WHLSL::ComputeDimensionsVisitor::computeDimensions const):
        (WebCore::WHLSL::computeDimensions):
        * Modules/webgpu/WHLSL/WHLSLComputeDimensions.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/WHLSLPrepare.h.
        * Modules/webgpu/WHLSL/WHLSLGatherEntryPointItems.cpp:
        (WebCore::WHLSL::gatherEntryPointItems): Compute shaders don't need to have a semantic for their return type.
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        (WebCore::WHLSL::prepare): Run the computeDimensions() pass.
        * Modules/webgpu/WHLSL/WHLSLPrepare.h:
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp: In a left-value propertyAccessExpression,
        the index expression can be a right-value. Treat it as such.
        (WebCore::WHLSL::LeftValueSimplifier::finishVisiting):
        (WebCore::WHLSL::LeftValueSimplifier::visit):
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt: We need support for multiplication (for a
        test) and float3 for SV_DispatchThreadID.
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/GPUComputePipeline.h: Associate a compute dimensions with a particular
        compute pipeline. This is how Metal knows what values to use for a dispatch.
        (WebCore::GPUComputePipeline::computeDimensions const):
        * platform/graphics/gpu/cocoa/GPUComputePassEncoderMetal.mm: Use the saved compute dimensions.
        (WebCore::GPUComputePassEncoder::dispatch):
        * platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm: Make the code match GPURenderPipelineMetal.
        (WebCore::trySetMetalFunctions):
        (WebCore::trySetFunctions):
        (WebCore::convertComputePipelineDescriptor):
        (WebCore::tryCreateMTLComputePipelineState):
        (WebCore::GPUComputePipeline::tryCreate):
        (WebCore::GPUComputePipeline::GPUComputePipeline):
        (WebCore::tryCreateMtlComputeFunction): Deleted.
        * platform/graphics/gpu/cocoa/GPUPipelineMetalConvertLayout.cpp: Added. Moved shared helper
        functions to a file where they can be accessed by multiple places.
        (WebCore::convertShaderStageFlags):
        (WebCore::convertBindingType):
        (WebCore::convertLayout):
        * platform/graphics/gpu/cocoa/GPUPipelineMetalConvertLayout.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/WHLSLPrepare.h.
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm: Delete the functions that were moved to GPUPipelineMetalConvertLayout.
        (WebCore::trySetFunctions):
        (WebCore::tryCreateMtlRenderPipelineState):
        (WebCore::convertShaderStageFlags): Deleted.
        (WebCore::convertBindingType): Deleted.
        (WebCore::convertLayout): Deleted.

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

        AVKit play button bypasses MediaElementSession playbackPermitted() checks.
        https://bugs.webkit.org/show_bug.cgi?id=198813

        Reviewed by Eric Carlson.

        HTMLMediaElement::togglePlayState() is an internal-only method that doesn't
        run playbackPermitted() checks. For our imitation AVPlayerController, translate
        requests to -togglePlayback: into calls to play() and pause() depending on
        playback state.

        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController togglePlayback:]):

2019-06-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r246396 and r246397.
        https://bugs.webkit.org/show_bug.cgi?id=198837

        Breaks internal builds (Requested by ShawnRoberts on #webkit).

        Reverted changesets:

        "[WHLSL] Hook up compute"
        https://bugs.webkit.org/show_bug.cgi?id=198644
        https://trac.webkit.org/changeset/246396

        "[WHLSL] Hook up compute"
        https://bugs.webkit.org/show_bug.cgi?id=198644
        https://trac.webkit.org/changeset/246397

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

        twitch.tv: embedded video hovers down the screen when scrolling on iPad
        https://bugs.webkit.org/show_bug.cgi?id=198832
        <rdar://problem/51541439>

        Reviewed by Simon Fraser.

        Test: compositing/scrolling/async-overflow-scrolling/overflow-scroll-paint-order-sibling.html

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

        Overflow scroll layer may have composited descendants that are its paint order siblings. We need to invalidate
        the tree of the paint order parent for compositing update (instead of just the tree of the overflow scroll layer).

        This matches what RenderLayer::updateLayerPosition() does.

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

        SocketStreamHandle should not be destroyed in a background thread
        https://bugs.webkit.org/show_bug.cgi?id=198781

        Reviewed by Geoffrey Garen.

        Make sure to destroy SocketStreamHandle on the main thread since it owns an URL created on the main thread.
        Covered by WPT websocket tests from https://bugs.webkit.org/show_bug.cgi?id=198774.

        * platform/network/SocketStreamHandle.cpp:
        (WebCore::SocketStreamHandle::SocketStreamHandle):
        * platform/network/SocketStreamHandle.h:

2019-06-13  Antoine Quint  <graouts@apple.com>

        "display: contents" Content click does not trigger
        https://bugs.webkit.org/show_bug.cgi?id=198559
        <rdar://problem/51488524>

        Reviewed by Antti Koivisto.

        Test: fast/events/ios/click-event-and-display-contents.html

        * dom/Element.h:

2019-06-13  Takashi Komori  <Takashi.Komori@sony.com>

        [curl] Remove member objects of CurlRequest not to share by different threads.
        https://bugs.webkit.org/show_bug.cgi?id=198747

        Reviewed by Fujii Hironori.

        Removed m_certificateInfo and m_networkLoadMetrics.
        Before patch those objects were updated by different threads.

        No tests needed, no functionality changes.

        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::curlDidReceiveResponse):
        (WebCore::CurlDownload::curlDidReceiveBuffer):
        (WebCore::CurlDownload::curlDidComplete):
        (WebCore::CurlDownload::curlDidFailWithError):
        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::start):
        (WebCore::CurlRequest::didReceiveHeader):
        (WebCore::CurlRequest::didCompleteTransfer):
        (WebCore::CurlRequest::invokeDidReceiveResponse):
        (WebCore::CurlRequest::networkLoadMetrics):
        (WebCore::CurlRequest::updateNetworkLoadMetrics): Deleted.
        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::setStartTime):
        (WebCore::CurlRequest::certificateInfo const): Deleted.
        (WebCore::CurlRequest::networkLoadMetrics const): Deleted.
        * platform/network/curl/CurlRequestClient.h:
        * platform/network/curl/CurlResourceHandleDelegate.cpp:
        (WebCore::CurlResourceHandleDelegate::curlDidSendData):
        (WebCore::CurlResourceHandleDelegate::curlDidReceiveResponse):
        (WebCore::CurlResourceHandleDelegate::curlDidReceiveBuffer):
        (WebCore::CurlResourceHandleDelegate::curlDidComplete):
        (WebCore::CurlResourceHandleDelegate::curlDidFailWithError):
        * platform/network/curl/CurlResourceHandleDelegate.h:
        * platform/network/curl/CurlResponse.h:
        (WebCore::CurlResponse::isolatedCopy const):
        * platform/network/curl/ResourceResponseCurl.cpp:
        (WebCore::ResourceResponse::ResourceResponse):

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

        [Nicosia] Add SceneIntegration
        https://bugs.webkit.org/show_bug.cgi?id=198791

        Reviewed by Carlos Garcia Campos.

        Add the SceneIntegration class to the Nicosia namespace, primarily for
        the purpose of being able to conveniently trigger scene updates whenever
        changes are done to the state of layers that are included in that scene.
        Initially this would be used for layer changes done on a
        scrolling-dedicated thread.

        Each Nicosia::PlatformLayer can have a SceneIntegration object reference
        associated. Helper createUpdateScope() method returns a
        SceneIntegration::UpdateScope instance that triggers an update for the
        scene when that instance is destroyed (normally when it goes out of the
        scope).

        * platform/TextureMapper.cmake:
        * platform/graphics/nicosia/NicosiaPlatformLayer.h:
        (Nicosia::PlatformLayer::setSceneIntegration):
        (Nicosia::PlatformLayer::createUpdateScope):
        * platform/graphics/nicosia/NicosiaSceneIntegration.cpp: Added.
        (Nicosia::SceneIntegration::SceneIntegration):
        (Nicosia::SceneIntegration::~SceneIntegration):
        (Nicosia::SceneIntegration::setClient):
        (Nicosia::SceneIntegration::invalidate):
        (Nicosia::SceneIntegration::requestUpdate):
        (Nicosia::SceneIntegration::createUpdateScope):
        (Nicosia::SceneIntegration::UpdateScope::UpdateScope):
        (Nicosia::SceneIntegration::UpdateScope::~UpdateScope):
        * platform/graphics/nicosia/NicosiaSceneIntegration.h: Added.

2019-06-13  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] HLS stream slow start
        https://bugs.webkit.org/show_bug.cgi?id=198377

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcCreate): Cut down the adapter condition to 200 ms to
        improve start-up times for HLS playback.

2019-06-13  Ludovico de Nittis  <ludovico.denittis@collabora.com>

        [GTK] gdk_display_get_device_manager and gdk_screen_get_width/height are deprecated
        https://bugs.webkit.org/show_bug.cgi?id=198822

        Reviewed by Carlos Garcia Campos.

        GdkSeat and GdkRectangle should be used, respectively.

        No behaviour changes.

        * platform/gtk/GtkVersioning.c:
        (getDefaultGDKPointerDevice):
        (getScreenWorkArea):

2019-06-12  Antoine Quint  <graouts@apple.com>

        [WHLSL] Hook up compute
        https://bugs.webkit.org/show_bug.cgi?id=198644

        Unreviewed build fix. Release iOS build would complain that pipelineState was unused.

        * platform/graphics/gpu/cocoa/GPUComputePassEncoderMetal.mm:
        (WebCore::GPUComputePassEncoder::dispatch):

2019-06-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Hook up compute
        https://bugs.webkit.org/show_bug.cgi?id=198644

        Reviewed by Saam Barati.

        This patch hooks up compute shaders in exactly the same way that vertex and fragment shaders
        are hooked up. I've modified the two patchs (compute and rendering) to be almost exactly the
        same code.

        This patch also adds support for the WHLSL compiler to determine what the numthreads()
        attribute in the shader says so that it can be hooked up to Metal's threads-per-threadgroup
        argument in the dispatch call. There is some logic to make sure that there aren't two
        numthreads() attributes on the same compute shader.

        It also adds a little bit of type renaming. For built-in variables, sometimes Metal's type
        doesn't always match WHLSL's (and HLSL's type). For example, in WHLSL and HLSL,        SV_DispatchThreadID variables have to be a float3, but in Metal, they are a uint3.
        Therefore, I've added a little bit of code during each entry point's pack and unpack stages
        to handle this type conversion.

        Test: webgpu/whlsl-compute.html

        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:
        (WebCore::WHLSL::Metal::internalTypeForSemantic): Determine which Metal type corresponds to
        each built-in variable.
        (WebCore::WHLSL::Metal::EntryPointScaffolding::builtInsSignature): Perform the type
        conversion.
        (WebCore::WHLSL::Metal::EntryPointScaffolding::unpackResourcesAndNamedBuiltIns): Ditto.
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::VertexEntryPointScaffolding): Ditto.
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::helperTypes): Ditto.
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::pack): Ditto.
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::FragmentEntryPointScaffolding): Ditto.
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::helperTypes): Ditto.
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::pack): Ditto.
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::signature): Ditto.
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.h:
        * Modules/webgpu/WHLSL/WHLSLComputeDimensions.cpp: Added. Add a pass to determine whether
        or not any entry point has duplicate numthreads() attribute, and to determine what the
        appropriate numthreads() values should be for the current entry point.
        (WebCore::WHLSL::ComputeDimensionsVisitor::ComputeDimensionsVisitor):
        (WebCore::WHLSL::ComputeDimensionsVisitor::computeDimensions const):
        (WebCore::WHLSL::computeDimensions):
        * Modules/webgpu/WHLSL/WHLSLComputeDimensions.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/WHLSLPrepare.h.
        * Modules/webgpu/WHLSL/WHLSLGatherEntryPointItems.cpp:
        (WebCore::WHLSL::gatherEntryPointItems): Compute shaders don't need to have a semantic for their return type.
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        (WebCore::WHLSL::prepare): Run the computeDimensions() pass.
        * Modules/webgpu/WHLSL/WHLSLPrepare.h:
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp: In a left-value propertyAccessExpression,
        the index expression can be a right-value. Treat it as such.
        (WebCore::WHLSL::LeftValueSimplifier::finishVisiting):
        (WebCore::WHLSL::LeftValueSimplifier::visit):
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt: We need support for multiplication (for a
        test) and float3 for SV_DispatchThreadID.
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/GPUComputePipeline.h: Associate a compute dimensions with a particular
        compute pipeline. This is how Metal knows what values to use for a dispatch.
        (WebCore::GPUComputePipeline::computeDimensions const):
        * platform/graphics/gpu/cocoa/GPUComputePassEncoderMetal.mm: Use the saved compute dimensions.
        (WebCore::GPUComputePassEncoder::dispatch):
        * platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm: Make the code match GPURenderPipelineMetal.
        (WebCore::trySetMetalFunctions):
        (WebCore::trySetFunctions):
        (WebCore::convertComputePipelineDescriptor):
        (WebCore::tryCreateMTLComputePipelineState):
        (WebCore::GPUComputePipeline::tryCreate):
        (WebCore::GPUComputePipeline::GPUComputePipeline):
        (WebCore::tryCreateMtlComputeFunction): Deleted.
        * platform/graphics/gpu/cocoa/GPUPipelineMetalConvertLayout.cpp: Added. Moved shared helper
        functions to a file where they can be accessed by multiple places.
        (WebCore::convertShaderStageFlags):
        (WebCore::convertBindingType):
        (WebCore::convertLayout):
        * platform/graphics/gpu/cocoa/GPUPipelineMetalConvertLayout.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/WHLSLPrepare.h.
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm: Delete the functions that were moved to GPUPipelineMetalConvertLayout.
        (WebCore::trySetFunctions):
        (WebCore::tryCreateMtlRenderPipelineState):
        (WebCore::convertShaderStageFlags): Deleted.
        (WebCore::convertBindingType): Deleted.
        (WebCore::convertLayout): Deleted.

2019-06-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Implement array references
        https://bugs.webkit.org/show_bug.cgi?id=198163

        Reviewed by Saam Barati.

        The compiler automatically generates anders for every array reference. Luckily, the infrastructure
        to generate those anders and emit Metal code to represent them already exists in the compiler.
        There are two pieces remaining (which this patch implements):

        1. The JavaScript compiler has a behavior where anders that are called with an array reference
           as an argument don't wrap the argument in a MakePointerExpression. This is because the array
           reference is already a reference type, so it's silly to operate on a pointer to a reference.
           This patch implements this by teaching the type checker about which types should be passed
           to the ander call, and by actually constructing those types in the property resolver.
           The property resolver does this by placing the logic to construct an ander argument in a
           single function which also has logic to save the argument in a temporary if the thread ander
           will be called. The semantics about which functions are called in which situations are not
           changed; instead, we just simply don't wrap array references with MakePointerExpressions.

        2. Creating a bind group from the WebGPU API has to retain information about buffer lengths for
           each buffer so the shader can properly perform bounds checks. This can be broken down into a
           few pieces:
           - Creating a bind group layout has to assign extra id indexes for each buffer which will be
             filled in to represent the buffer's length
           - Creating the bind group itself needs to fill in the buffer length into the Metal argument
             buffer
           - The shader compiler needs to emit code at the beginning of entry point to find the buffer
             lengths and pack them together into the array reference (array references correspond to
             a Metal struct with two fields: a pointer and a length).

        This patch doesn't actually implement bounds checks themselves; it just hooks up the buffer
        lengths so https://bugs.webkit.org/show_bug.cgi?id=198600 can implement it.

        The shader compiler's API is modified to allow for this extra buffer length information to be
        passed in from the WebGPU implementation.

        Unfortunately, I don't think I could split this patch up into two pieces because both are
        required to test the compiler with buffers.

        Tests: webgpu/whlsl-buffer-fragment.html
               webgpu/whlsl-buffer-vertex.html

        * Modules/webgpu/WHLSL/AST/WHLSLPropertyAccessExpression.h:
        (WebCore::WHLSL::AST::PropertyAccessExpression::baseReference):
        * Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.cpp:
        (WebCore::WHLSL::AST::ResourceSemantic::isAcceptableType const): Arrays can't be resources
        because the compiler has no way of guaranteeing if the resource is long enough to hold the
        array at compile time.
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:
        (WebCore::WHLSL::Metal::EntryPointScaffolding::EntryPointScaffolding): Generate an extra
        variable name to represent the buffer length. Only do it for resources which have lengths.
        (WebCore::WHLSL::Metal::EntryPointScaffolding::resourceHelperTypes):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::unpackResourcesAndNamedBuiltIns): Perform
        the appropriate math to turn byte lengths into element counts and store the element count
        in the array reference.
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.h:
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::resolveWithOperatorAnderIndexer): Refactor.
        (WebCore::WHLSL::resolveWithOperatorLength): Ditto.
        (WebCore::WHLSL::resolveWithReferenceComparator): Ditto.
        (WebCore::WHLSL::resolveByInstantiation): Ditto.
        (WebCore::WHLSL::argumentTypeForAndOverload): Given an ander, what should the type of the
        argument be?
        (WebCore::WHLSL::Checker::finishVisiting): Call argumentTypeForAndOverload(). Also, if
        we couldn't find an ander, try automatically generating it, the same way that function
        calls do. (This is how array references get their anders.)
        (WebCore::WHLSL::Checker::visit):
        * Modules/webgpu/WHLSL/WHLSLPipelineDescriptor.h: New WHLSL API to provide the length
        information.
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        (WebCore::WHLSL::PropertyResolver::visit): SimplifyRightValue() can't fail any more.
        (WebCore::WHLSL::wrapAnderCallArgument): If the ander argument should be wrapped in a
        MakePointer or a MakeArrayReference, do that. Also, if the ander is a thread ander, save
        the argument in a local variable and use that.
        (WebCore::WHLSL::anderCallArgument): The equivalent of argumentTypeForAndOverload().
        (WebCore::WHLSL::setterCall): Call anderCallArgument().
        (WebCore::WHLSL::getterCall): Ditto.
        (WebCore::WHLSL::modify): We used to have special-case code for handling pointer-to-argument
        values as distinct from just the argument values themselves. However, emitting
        chains of &* operators is valid and won't even make it through the Metal code generator
        after https://bugs.webkit.org/show_bug.cgi?id=198600 is fixed. So, in order to simplify
        wrapAnderCallArgument(), don't special case these values and just create &* chains instead.
        (WebCore::WHLSL::PropertyResolver::simplifyRightValue):
        (WebCore::WHLSL::LeftValueSimplifier::finishVisiting): Call anderCallArgument().
        * Modules/webgpu/WHLSL/WHLSLSemanticMatcher.cpp: Update to support the new compiler API.
        (WebCore::WHLSL::matchMode):
        (WebCore::WHLSL::matchResources):
        * Modules/webgpu/WebGPUBindGroupDescriptor.cpp: Ditto.
        (WebCore::WebGPUBindGroupDescriptor::tryCreateGPUBindGroupDescriptor const):
        * platform/graphics/gpu/GPUBindGroupLayout.h: Add some internal implementation data inside
        the bindings object. Use a Variant to differentiate between the various bindings types, and
        put the extra length field on just those members of the variant that represent buffers.
        * platform/graphics/gpu/cocoa/GPUBindGroupLayoutMetal.mm: Update to support the new compiler API.
        (WebCore::argumentDescriptor):
        (WebCore::GPUBindGroupLayout::tryCreate):
        * platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm: Ditto.
        (WebCore::setBufferOnEncoder):
        (WebCore::GPUBindGroup::tryCreate):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm: Ditto.
        (WebCore::convertBindingType):
        (WebCore::convertLayout):

2019-06-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [cairo][SVG] If clipPath has multiple elements, clip-path doesn't work with transform
        https://bugs.webkit.org/show_bug.cgi?id=198746

        Reviewed by Don Olmstead.

        We need to save the current transformation matrix at the moment the image mask is set and set it again on
        restore right before applying the mask. This patch also creates a pattern for the image mask surface and set its
        transformation matrix according to the mask position, so that we don't need to save the mask rectangle too.

        Tests: svg/clip-path/clip-hidpi-expected.svg
               svg/clip-path/clip-hidpi.svg
               svg/clip-path/clip-opacity-translate-expected.svg
               svg/clip-path/clip-opacity-translate.svg

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::restore):
        (WebCore::PlatformContextCairo::pushImageMask):

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

        paddingBoxRect() is wrong with RTL scrollbars on the left
        https://bugs.webkit.org/show_bug.cgi?id=198816

        Reviewed by Jon Lee.

        RenderBox::paddingBoxRect() needs to offset the left side of the box for the
        vertical scrollbar, if it's placed on the left.

        Test: compositing/geometry/rtl-overflow-scroll.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paddingBoxRect const):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::paddingBoxRect const): Deleted.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::controlClipRect const):

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

        Use NSURLSession for WebSocket
        https://bugs.webkit.org/show_bug.cgi?id=198568

        Reviewed by Geoffrey Garen.

        Add a runtime flag to either choose the new WebSocket code path or the previously existing one.
        The switch is done at WebSocket channel API level which offers the necessary high level API to abstract the two code paths.
        By default, we continue using the current WebSocket implementation.
        Covered by manual testing on current WebSocket tests.

        * Modules/websockets/ThreadableWebSocketChannel.cpp:
        (WebCore::ThreadableWebSocketChannel::create):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::document):
        * Modules/websockets/WebSocketChannel.h:
        * WebCore.xcodeproj/project.pbxproj:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::isNSURLSessionWebSocketEnabled const):
        (WebCore::RuntimeEnabledFeatures::setIsNSURLSessionWebSocketEnabled):
        * page/SocketProvider.cpp:
        (WebCore::SocketProvider::createWebSocketChannel):
        * page/SocketProvider.h:

2019-06-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Educate the property resolver about IndexExpressions
        https://bugs.webkit.org/show_bug.cgi?id=198399

        Reviewed by Saam Barati.

        This is part one of two patches which will allow buffers to work. This patch
        adds support in the property resolver for index expressions. Index expressions
        get turned into calls to "getter indexers", "setter indexers", or "ander
        indexers". They work almost identically to dot expressions, except there is an
        extra "index" expression which gets turned into an extra argument to those
        functions.

        There's actually a bit of a trick here. Let's say we need to run a getter and
        a setter separately (e.g. "foo[3]++;"). The index expression can't be duplicated
        for both the getter and the setter (e.g. the functions are
        int operator[](Foo, uint) and Foo operator[]=(Foo, uint, int), and we aren't
        allowed to execute the index expression multiple times. Consider if that "3"
        in the example is actually "bar()" with some side effect. So, we have to run
        the index expression once at the correct time, and save its result to a temporary
        variable, and then pass in the temporary variable into the getter and setter.

        So, if the code says "foo[bar()][baz()] = quux();" the following sequence of
        functions get run:

        - bar()
        - operator[](Foo, uint)
        - baz()
        - quux()
        - operator[]=(OtherType, uint, OtherOtherType)
        - operator[]=(Foo, uint, OtherType)

        The next patch will modify the WebGPU JavaScript implementation to send buffer
        lengths to the shader, and for the shader compiler to correctly unpack this
        information and place it inside the array references. That should be everything
        that's needed to get buffers to work. After that, hooking up compute should be
        fairly trivial.

        Tests: webgpu/propertyresolver/ander-abstract-lvalue.html
               webgpu/propertyresolver/ander-lvalue-3-levels.html
               webgpu/propertyresolver/ander-lvalue.html
               webgpu/propertyresolver/ander.html
               webgpu/propertyresolver/getter.html
               webgpu/propertyresolver/indexer-ander-abstract-lvalue.html
               webgpu/propertyresolver/indexer-ander-lvalue-3-levels.html
               webgpu/propertyresolver/indexer-ander-lvalue.html
               webgpu/propertyresolver/indexer-ander.html
               webgpu/propertyresolver/indexer-getter.html
               webgpu/propertyresolver/indexer-setter-abstract-lvalue-3-levels.html
               webgpu/propertyresolver/indexer-setter-abstract-lvalue.html
               webgpu/propertyresolver/indexer-setter-lvalue.html
               webgpu/propertyresolver/indexer-setter.html
               webgpu/propertyresolver/setter-abstract-lvalue-3-levels.html
               webgpu/propertyresolver/setter-abstract-lvalue.html
               webgpu/propertyresolver/setter-lvalue.html

        * Modules/webgpu/WHLSL/AST/WHLSLAddressSpace.h:
        (WebCore::WHLSL::AST::toString):
        * Modules/webgpu/WHLSL/AST/WHLSLEntryPointType.h:
        (WebCore::WHLSL::AST::toString):
        * Modules/webgpu/WHLSL/AST/WHLSLIndexExpression.h:
        (WebCore::WHLSL::AST::IndexExpression::takeIndex):
        * Modules/webgpu/WHLSL/AST/WHLSLReferenceType.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::writeNativeFunction):
        (WebCore::WHLSL::Metal::convertAddressSpace): Deleted.
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::checkOperatorOverload):
        (WebCore::WHLSL::Checker::finishVisiting):
        (WebCore::WHLSL::Checker::visit):
        * Modules/webgpu/WHLSL/WHLSLInferTypes.h:
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        (WebCore::WHLSL::PropertyResolver::visit):
        (WebCore::WHLSL::setterCall):
        (WebCore::WHLSL::getterCall):
        (WebCore::WHLSL::modify):
        (WebCore::WHLSL::PropertyResolver::simplifyRightValue):
        (WebCore::WHLSL::LeftValueSimplifier::finishVisiting):
        (WebCore::WHLSL::LeftValueSimplifier::visit):
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:
        * Modules/webgpu/WHLSL/WHLSLSynthesizeStructureAccessors.cpp:
        (WebCore::WHLSL::synthesizeStructureAccessors):

2019-06-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: artificial context menus don't work when Web Inspector is zoomed
        https://bugs.webkit.org/show_bug.cgi?id=198801

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent):
        Use the `absoluteLocation` of the `MouseEvent`, which takes into account zoom and scale.

2019-06-12  Sam Weinig  <weinig@apple.com>

        Remove dead code in user agent construction
        https://bugs.webkit.org/show_bug.cgi?id=198802

        Reviewed by Anders Carlsson.

        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::platform const):
        Drop dead architures.

2019-06-12  Ludovico de Nittis  <ludovico.denittis@collabora.com>

        [GTK] GTK_STOCK_* types have been deprecated since GTK 3.10
        https://bugs.webkit.org/show_bug.cgi?id=198787

        Reviewed by Michael Catanzaro.

        No behaviour changes.

        * platform/graphics/gtk/IconGtk.cpp:
        (WebCore::lookupIconName):
        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::loadMissingImageIconFromTheme):

2019-06-12  Antti Koivisto  <antti@apple.com>

        (Async scrolling) Handle 'position:fixed' inside 'position:sticky' correctly.
        https://bugs.webkit.org/show_bug.cgi?id=198788
        <rdar://problem/51589759>

        Reviewed by Simon Fraser.

        Handle 'position:fixed' inside 'position:sticky' correctly.

        Also fix nested 'position:fixed' in case where there is an overflow scroller between them.

        Tests: scrollingcoordinator/ios/fixed-inside-overflow-inside-fixed.html
               scrollingcoordinator/ios/fixed-inside-sticky-frame.html
               scrollingcoordinator/ios/fixed-inside-sticky-no-stacking-context-2.html
               scrollingcoordinator/ios/fixed-inside-sticky-no-stacking-context.html
               scrollingcoordinator/ios/fixed-inside-sticky-stacking-context.html

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

        Take offsets from sticky nodes into account.

        * page/scrolling/cocoa/ScrollingTreeStickyNode.h:
        (WebCore::ScrollingTreeStickyNode::layer):
        * page/scrolling/cocoa/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::computeLayerPosition const):

        Factor into a function.

        (WebCore::ScrollingTreeStickyNode::applyLayerPositions):
        (WebCore::ScrollingTreeStickyNode::scrollDeltaSinceLastCommit const):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::isViewportConstrainedFixedOrStickyLayer const):

        We need to generate a scrolling tree node for position:fixed in nested case if there is an overflow scroller
        between the layers.

2019-06-12  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r246350.

        r246350 Introduced a failing and timing out test svg/clip-path
        /clip-hidpi.svg

        Reverted changeset:

        "[cairo][SVG] If clipPath has multiple elements, clip-path doesn't work with transform"
        https://bugs.webkit.org/show_bug.cgi?id=198746
        https://trac.webkit.org/changeset/246350

2019-06-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [cairo][SVG] If clipPath has multiple elements, clip-path doesn't work with transform
        https://bugs.webkit.org/show_bug.cgi?id=198746
        <rdar://problem/51665805>

        Reviewed by Don Olmstead.

        We need to save the current transformation matrix at the moment the image mask is set and set it again on
        restore right before applying the mask. This patch also creates a pattern for the image mask surface and set its
        transformation matrix according to the mask position, so that we don't need to save the mask rectangle too.

        Tests: svg/clip-path/clip-hidpi-expected.svg
               svg/clip-path/clip-hidpi.svg
               svg/clip-path/clip-opacity-translate-expected.svg
               svg/clip-path/clip-opacity-translate.svg

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::restore):
        (WebCore::PlatformContextCairo::pushImageMask):

2019-06-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Idempotent text autosizing needs to react properly to viewport changes
        https://bugs.webkit.org/show_bug.cgi?id=198736
        <rdar://problem/50591911>

        Reviewed by Zalan Bujtas.

        Minor refactoring and some adjustments around StyleResolver::adjustRenderStyleForTextAutosizing. See below for
        more details, as well as the WebKit ChangeLog.

        Test: fast/text-autosizing/ios/idempotentmode/idempotent-autosizing-after-changing-initial-scale.html

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

        Rewrite this using early return statements, to make it easier to debug why elements fall out of text autosizing.
        Additionally, this function currently bails if the initial scale is exactly 1, whereas we can really avoid text
        autosizing in the case where the initial scale is at least 1; handle this by making idempotentTextSize return
        immediately with the specified size, in the case where the scale is at least 1.

        Lastly, remove the null check for element by making this method take an Element&, and only call this from
        adjustRenderStyle if the element is nonnull (which matches adjustRenderStyleForSiteSpecificQuirks).

        (WebCore::StyleResolver::adjustRenderStyle):
        * css/StyleResolver.h:
        * rendering/style/TextSizeAdjustment.cpp:
        (WebCore::AutosizeStatus::idempotentTextSize):

2019-06-11  Timothy Hatcher  <timothy@apple.com>

        Flash when tapping compose button after switching to/from dark mode without restarting Mail.
        https://bugs.webkit.org/show_bug.cgi?id=198769
        rdar://problem/51370037

        Reviewed by Tim Horton.

        * WebCore.xcodeproj/project.pbxproj: Make LocalCurrentTraitCollection.h a private header.

2019-06-11  Commit Queue  <commit-queue@webkit.org>

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

        New test is failing, and commit is causing another test to
        fail. (Requested by ShawnRoberts on #webkit).

        Reverted changeset:

        "Web Inspector: AXI: Audit: image label test is throwing
        spurious errors on elements with existing alt attr, but no
        value: <img alt>"
        https://bugs.webkit.org/show_bug.cgi?id=194754
        https://trac.webkit.org/changeset/246320

2019-06-11  Devin Rousso  <drousso@apple.com>

        Sort the computed styles list
        https://bugs.webkit.org/show_bug.cgi?id=198743

        Reviewed by Simon Fraser

        * css/CSSComputedStyleDeclaration.cpp:

2019-06-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed build warning fixes

        Silence -Wunused-parameter warning

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

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

        Add logging for UI-side compositing hit-testing
        https://bugs.webkit.org/show_bug.cgi?id=198739

        Reviewed by Antti Koivisto.

        Export the TextStream output operator.

        * platform/TouchAction.h:

2019-06-11  Greg Doolittle  <gr3g@apple.com>

        Web Inspector: AXI: Audit: image label test is throwing spurious errors on elements with existing alt attr, but no value: <img alt>
        https://bugs.webkit.org/show_bug.cgi?id=194754
        <rdar://problem/48144534>

        Reviewed by Chris Fleizach.

        Tests: accessibility/img-alt-attribute-empty-string.html
               accessibility/img-alt-attribute-no-value.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::computedRoleString const):

2019-06-11  Sihui Liu  <sihui_liu@apple.com>

        Add a quirk for washingtonpost.com and nytimes.com
        https://bugs.webkit.org/show_bug.cgi?id=198678

        Reviewed by Geoffrey Garen.

        Covered by manual test.

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

2019-06-11  Devin Rousso  <drousso@apple.com>

        Include `touch-action` in the computed styles list
        https://bugs.webkit.org/show_bug.cgi?id=198742

        Reviewed by Antoine Quint.

        * css/CSSComputedStyleDeclaration.cpp:

2019-06-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        tu-berlin university email web interface (Outlook Web App) goes directly to the light version instead of the normal web app
        https://bugs.webkit.org/show_bug.cgi?id=198749

        Reviewed by Carlos Garcia Campos.

        Add user agent quirk for exchange.tu-berlin.de, which has lost the right to receive an
        accurate user agent from WebKit.

        * platform/UserAgentQuirks.cpp:
        (WebCore::urlRequiresMacintoshPlatform):

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

        MediaStreamAudioSourceNode::setFormat should check for m_sourceSampleRate equality
        https://bugs.webkit.org/show_bug.cgi?id=198740
        <rdar://problem/47088939>

        Reviewed by Eric Carlson.

        Covered by tests that are now passing.

        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::setFormat):

2019-06-11  Ludovico de Nittis  <ludovico.denittis@collabora.com>

        [GTK] Replace gdk_screen_get_monitor_geometry and gdk_screen_get_monitor_workarea
        https://bugs.webkit.org/show_bug.cgi?id=198750

        Reviewed by Carlos Garcia Campos.

        Since GTK 3.22 gdk_screen_get_monitor_geometry and
        gdk_screen_get_monitor_workarea has been deprecated. 

        No behavior change.

        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

2019-06-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        [cairo][SVG] Putting multiple path elements in clippath causes rendering artifacts
        https://bugs.webkit.org/show_bug.cgi?id=198701

        PlatformContextCairo::pushImageMask blits wrong position of the
        surface to the background of masking objects. And, I don't know
        the reason why this blitting is needed. Removed the blitting.

        Reviewed by Carlos Garcia Campos.

        Tests: svg/clip-path/clip-opacity.html
               svg/clip-path/svg-in-html.html

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::pushImageMask): Don't blit the
        surface to the background.

2019-06-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][MediaFoundation] Remove the unused video window
        https://bugs.webkit.org/show_bug.cgi?id=198523

        Reviewed by Don Olmstead.

        Remove the video window which had been unused since Bug 150941.

        No behavior change.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::MediaPlayerPrivateMediaFoundation):
        (WebCore::MediaPlayerPrivateMediaFoundation::~MediaPlayerPrivateMediaFoundation):
        (WebCore::MediaPlayerPrivateMediaFoundation::setSize):
        (WebCore::MediaPlayerPrivateMediaFoundation::paint):
        (WebCore::MediaPlayerPrivateMediaFoundation::hostWindow):
        (WebCore::MediaPlayerPrivateMediaFoundation::createOutputNode):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::setVideoWindow):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::setDestinationRect):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::createVideoSamples):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::presentSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoViewWndProc): Deleted.
        (WebCore::MediaPlayerPrivateMediaFoundation::registerVideoWindowClass): Deleted.
        (WebCore::MediaPlayerPrivateMediaFoundation::createVideoWindow): Deleted.
        (WebCore::MediaPlayerPrivateMediaFoundation::destroyVideoWindow): Deleted.
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::presentSwapChain): Deleted.
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::updateDestRect): Deleted.
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:

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

        Add visualization of touch action regions
        https://bugs.webkit.org/show_bug.cgi?id=198718

        Reviewed by Antoine Quint.

        Add a way to show which elements of the page have touch-action set on them by
        painting an overlay with small text that shows the type of action(s).

        The event regions are painted into GraphicsLayers at paint time in
        RenderLayerBacking by making a pattern image and filling the region rects
        with the pattern.

        * page/DebugPageOverlays.cpp:
        (WebCore::touchEventRegionColors):
        * rendering/EventRegion.cpp:
        (WebCore::EventRegion::regionForTouchAction const):
        * rendering/EventRegion.h:
        (WebCore::EventRegion::region const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateEventRegion):
        (WebCore::patternForTouchAction):
        (WebCore::RenderLayerBacking::paintContents):

2019-06-10  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        Web Inspector: DNS names in SymmaryInfo was wrong.
        https://bugs.webkit.org/show_bug.cgi?id=198732

        Reviewed by Devin Rousso.

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildObjectForResourceResponse):

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

        [GTK] 2.25.1 does not build on 32-bit ARM due to bit-packing assertion, requires -DENABLE_DARK_MODE_CSS=OFF
        https://bugs.webkit.org/show_bug.cgi?id=198274

        Reviewed by Timothy Hatcher.

        Rather than reorder everything in StyleRareInheritedData, let's slightly increase the size
        of GreaterThanOrSameSizeAsStyleRareInheritedData to allow the static assert to pass.

        At the same time, remove an obsolote iOS-specific member that is probably no longer needed.

        * rendering/style/StyleRareInheritedData.cpp:

2019-06-10  Sam Weinig  <weinig@apple.com>

        Remove Dashboard support
        https://bugs.webkit.org/show_bug.cgi?id=198615

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSCalculationValue.cpp:
        (WebCore::hasDoubleValue):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::isStringType):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText const):
        (WebCore::CSSPrimitiveValue::equals const):
        * css/CSSPrimitiveValue.h:
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/DashboardRegion.h: Removed.
        * css/StyleBuilderCustom.h:
        (WebCore::convertToIntLength): Deleted.
        (WebCore::StyleBuilderCustom::applyValueWebkitDashboardRegion): Deleted.
        * css/StyleResolver.cpp:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::consumeWebkitDashboardRegion): Deleted.
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::createForUpdatingDropTarget):
        * dom/Document.cpp:
        (WebCore::Document::invalidateRenderingDependentRegions):
        (WebCore::Document::annotatedRegions const): Deleted.
        (WebCore::Document::setAnnotatedRegions): Deleted.
        (WebCore::Document::updateAnnotatedRegions): Deleted.
        (WebCore::Document::invalidateScrollbarDependentRegions): Deleted.
        (WebCore::Document::updateZOrderDependentRegions): Deleted.
        * dom/Document.h:
        (WebCore::Document::setHasAnnotatedRegions): Deleted.
        (WebCore::Document::setAnnotatedRegionsDirty): Deleted.
        (WebCore::Document::annotatedRegionsDirty const): Deleted.
        (WebCore::Document::hasAnnotatedRegions const): Deleted.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createContext2d):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::rendererIsNeeded):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::sourceURI const):
        * html/canvas/CanvasGradient.cpp:
        (WebCore::CanvasGradient::addColorStop):
        * html/canvas/CanvasGradient.h:
        (WebCore::CanvasGradient::setDashboardCompatibilityMode): Deleted.
        (): Deleted.
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::create):
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::CanvasRenderingContext2DBase):
        (WebCore::CanvasRenderingContext2DBase::fill):
        (WebCore::CanvasRenderingContext2DBase::stroke):
        (WebCore::CanvasRenderingContext2DBase::clip):
        (WebCore::CanvasRenderingContext2DBase::createLinearGradient):
        (WebCore::CanvasRenderingContext2DBase::createRadialGradient):
        (WebCore::CanvasRenderingContext2DBase::prepareGradientForDashboard const): Deleted.
        (WebCore::CanvasRenderingContext2DBase::clearPathForDashboardBackwardCompatibilityMode): Deleted.
        * html/canvas/CanvasRenderingContext2DBase.h:
        * html/canvas/OffscreenCanvasRenderingContext2D.cpp:
        (WebCore::OffscreenCanvasRenderingContext2D::OffscreenCanvasRenderingContext2D):
        * html/canvas/PaintRenderingContext2D.cpp:
        (WebCore::PaintRenderingContext2D::PaintRenderingContext2D):
        * page/Chrome.cpp:
        (WebCore::ChromeClient::annotatedRegionsChanged): Deleted.
        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::didLayout):
        (WebCore::FrameView::didPaintContents):
        * page/Settings.yaml:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::needsKeyboardEventDisambiguationQuirks const):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addAnnotatedRegions): Deleted.
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        (WebCore::RenderLayer::updateScrollbarsAfterLayout):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::setHasVerticalScrollbar):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addAnnotatedRegions): Deleted.
        (WebCore::RenderObject::collectAnnotatedRegions): Deleted.
        * rendering/RenderObject.h:
        (WebCore::AnnotatedRegionValue::operator== const): Deleted.
        (WebCore::AnnotatedRegionValue::operator!= const): Deleted.
        * rendering/style/RenderStyle.cpp:
        (WebCore::rareNonInheritedDataChangeRequiresLayout):
        (WebCore::RenderStyle::initialDashboardRegions): Deleted.
        (WebCore::RenderStyle::noneDashboardRegions): Deleted.
        (WebCore::RenderStyle::setDashboardRegion): Deleted.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::dashboardRegions const): Deleted.
        (WebCore::RenderStyle::setDashboardRegions): Deleted.
        * rendering/style/StyleDashboardRegion.h: Removed.
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::setRequestHeader):
        (WebCore::XMLHttpRequest::usesDashboardBackwardCompatibilityMode const): Deleted.
        * xml/XMLHttpRequest.h:

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

        Event region should be set on scrolledContentsLayer if it exists
        https://bugs.webkit.org/show_bug.cgi?id=198717
        <rdar://problem/51572169>

        Reviewed by Simon Fraser.

        Test: pointerevents/ios/touch-action-region-overflow.html

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

        Move to updateBackingAndHierarchy.

        (WebCore::RenderLayerBacking::updateEventRegion):

        - Set event region on scrolledContentsLayer if it exists
        - Translate away the scroll offset
        - Get the offset from renderer from the GraphicsLayer so scrolling and non-scrolling case can be handled uniformly.

        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBackingAndHierarchy):

        Invoke updateEventRegion after geometry update so offsets are already available on GraphicsLayer.

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

        [CSP] Blob URLs should inherit their CSP policy
        https://bugs.webkit.org/show_bug.cgi?id=198579
        <rdar://problem/51366878>

        Reviewed by Brent Fulgham.

        As per <https://w3c.github.io/webappsec-csp/#security-inherit-csp> (Editor's Draft, 28 February 2019) blob
        URLs should inherit their CSP policy from their parent (if they have one).

        Test: http/tests/security/contentSecurityPolicy/navigate-self-to-blob.html
              http/tests/security/contentSecurityPolicy/navigate-self-to-data-url.html

        * dom/Document.cpp:
        (WebCore::Document::shouldInheritContentSecurityPolicyFromOwner const): Return true if the document's URL
        is a Blob URL.
        (WebCore::Document::initContentSecurityPolicy): Take a pointer to a ContentSecurityPolicy object that
        represents the previous document's CSP. We only make us of this if the current URL is a Blob URL or a data
        URL. Otherwise, do what we do now and take the policy from the owner frame.
        * dom/Document.h:
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin): Extend the lifetime of the previous document temporarily so that we can
        pass its CSP to FrameLoader::didBeginDocument(). We need to do this extension because this function calls
        FrameLoader::clear(), which can destroy the previous document and its ContentSecurityPolicy object. This
        extension is also no different than if this function was called with a non-null ownerDocument except that
        in that case it is the caller that extends the previous document's lifetime. Although it is tempting to
        make use of ownerDocument to fix this bug by having the caller of begin() pass the previous document as
        the ownerDocument when the new document's url (the one we are begin()ing) is a Blob URL. The ownerDocument
        concept would privilege the Blob URL more than necessary; we only need to inherit the CSP policy from the
        previous document for a Blob URL, not inherit the cookie URL or strict mixed content checking bit, etc. 
        We could make ContentSecurityPolicy ref-counted or even steal the ContentSecurityPolicy object from the
        previous document. The latter is not of the question as a future enhancement, but the former seemed excessive
        as a way to avoid extending the lifetime of the previous document because this would be the *only* call site
        that actaully takes out a second ref of a ContentSecurityPolicy object. In general, shared ownership of
        a ContentSecurityPolicy object does not make sense.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument): Pass the specified content security policy through to
        Document::initContentSecurityPolicy().
        * loader/FrameLoader.h:

2019-06-10  Saam Barati  <sbarati@apple.com>

        [WHLSL] Auto initialize local variables
        https://bugs.webkit.org/show_bug.cgi?id=198426

        Reviewed by Myles Maxfield.

        This patch implements zero-filling for local variables in two parts:
        1. We add a new pass, autoInitializeVariables, which makes any variable declaration
        without an initializer call the default constructor for the variable's type.
        Since we auto generate the default constructor, it's a native function whose
        implementation we control.
        
        2. Each native constructor is implemented as a memset(&value, sizeof(value), 0).
        This memset is an inlined loop in each constructor. The reason this turns
        everything into zero is that for every primitive type, the "zero" value is
        represented as all zeroes in memory: float, int, pointers, etc.
        
        Since our ability to test some of this is limited, I opened a follow-up bug to
        test this more:
        https://bugs.webkit.org/show_bug.cgi?id=198413

        Tests: webgpu/whlsl-zero-initialize-values-2.html
               webgpu/whlsl-zero-initialize-values.html

        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclaration.h:
        (WebCore::WHLSL::AST::VariableDeclaration::setInitializer):
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::writeNativeFunction):
        * Modules/webgpu/WHLSL/WHLSLASTDumper.h:
        * Modules/webgpu/WHLSL/WHLSLAutoInitializeVariables.cpp: Added.
        (WebCore::WHLSL::AutoInitialize::AutoInitialize):
        (WebCore::WHLSL::AutoInitialize::visit):
        (WebCore::WHLSL::autoInitializeVariables):
        * Modules/webgpu/WHLSL/WHLSLAutoInitializeVariables.h: Added.
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::checkOperatorOverload):
        (WebCore::WHLSL::Checker::visit):
        * Modules/webgpu/WHLSL/WHLSLInferTypes.cpp:
        (WebCore::WHLSL::inferTypesForCallImpl):
        (WebCore::WHLSL::inferTypesForCall):
        * Modules/webgpu/WHLSL/WHLSLInferTypes.h:
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        (WebCore::WHLSL::prepareShared):
        * Modules/webgpu/WHLSL/WHLSLResolveOverloadImpl.cpp:
        (WebCore::WHLSL::resolveFunctionOverloadImpl):
        (WebCore::WHLSL::resolveFunctionOverload):
        * Modules/webgpu/WHLSL/WHLSLResolveOverloadImpl.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-06-10  Timothy Hatcher  <timothy@apple.com>

        Integrate dark mode support for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=198687
        rdar://problem/51545643

        Reviewed by Tim Horton.

        Tests: css-dark-mode

        * Configurations/FeatureDefines.xcconfig:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::showLetterpressedGlyphsWithAdvances):
        * platform/ios/LocalCurrentTraitCollection.h: Added.
        * platform/ios/LocalCurrentTraitCollection.mm: Added.
        * platform/ios/PasteboardIOS.mm:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::systemColor const):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor const):

2019-06-10  Ali Juma  <ajuma@chromium.org>

        REGRESSION (r245396): Page load time performance regression
        https://bugs.webkit.org/show_bug.cgi?id=198382

        Reviewed by Per Arne Vollan.

        Use a delay of 2000ms instead of 500ms when scheduling rendering updates
        for IntersectionObserver targets added during page load. This is a
        speculative fix for a page load time regression caused by r245396 and
        still not fixed after r245958.

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

2019-06-10  Sihui Liu  <sihui_liu@apple.com>

        [WKHTTPCookieStore getAllCookies:] may return duplicate cookies
        https://bugs.webkit.org/show_bug.cgi?id=198635
        <rdar://problem/46010232>

        Reviewed by Ryosuke Niwa.

        Test: WebKit.WKHTTPCookieStoreWithoutProcessPoolDuplicates

        * platform/Cookie.h:
        (WebCore::Cookie::isKeyEqual const):
        (WTF::HashTraits<WebCore::Cookie>::isEmptyValue):

2019-06-09  Rob Buis  <rbuis@igalia.com>

        Add wildcard to Access-Control-Allow-Methods and Access-Control-Allow-Headers
        https://bugs.webkit.org/show_bug.cgi?id=165508

        Reviewed by Frédéric Wang.

        According to the spec [1] step 6.5, a wildcard for method
        and request's credentials mode should be taken into account, so
        add this to the check. Same for Access-Control-Allow-Headers (step 6.7).

        [1] https://fetch.spec.whatwg.org/#cors-preflight-fetch

        Tests: web-platform-tests/fetch/api/cors/cors-preflight-star.any.html
               web-platform-tests/fetch/api/cors/cors-preflight-star.any.worker.html

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::validatePreflightResponse):
        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginMethod const):
        (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders const):
        (WebCore::CrossOriginPreflightResultCacheItem::allowsRequest const):
        * loader/CrossOriginPreflightResultCache.h:

2019-06-08  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Introduce Baseline to LineBox
        https://bugs.webkit.org/show_bug.cgi?id=198686
        <rdar://problem/51545175>

        Reviewed by Antti Koivisto.

        Make baselines alignment explicit in Line.
        This is in preparation for adding non-baseline vertical alignment support.

        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::LineLayout::placeInlineItems const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::createDisplayRuns const):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::Line):
        (WebCore::Layout::Line::close):
        (WebCore::Layout::Line::adjustBaselineAndLineHeight):
        (WebCore::Layout::Line::halfLeadingMetrics):
        * layout/inlineformatting/InlineLine.h:
        (WebCore::Layout::Line::Content::baseline const):
        (WebCore::Layout::Line::Content::setBaseline):
        (WebCore::Layout::Line::logicalHeight const):
        (WebCore::Layout::Line::baselineAlignedContentHeight const):
        (WebCore::Layout::Line::baselineOffset const):
        * layout/inlineformatting/InlineLineBox.h:
        (WebCore::Layout::LineBox::baseline const):
        (WebCore::Layout::LineBox::LineBox):

2019-06-07  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION (r244182) [WK1]: Page updates should always scheduleCompositingLayerFlush() immediately
        https://bugs.webkit.org/show_bug.cgi?id=198664

        Reviewed by Simon Fraser.

        Because WK1 is a single process, scheduleCompositingLayerFlush() has to 
        be called immediately when layers' update is needed. Otherwise no content
        will be drawn for the current frame. Doing this will get smooth scrolling
        back to WK1.

        RenderingUpdateScheduler now has three different scheduling methods:

        1. scheduleTimedRenderingUpdate(): This is a two-steps scheduling method.
           DisplayRefreshMonitor has to fire before scheduleCompositingLayerFlush()
           is called. This is used by rAF, WebAnimations and intersection and
           resize observers.

        2. scheduleImmediateRenderingUpdate(): This is a one-step scheduling method.
           layerTreeAsText() calls this method because it has to process the rendering
           update within the current frame.

        3. scheduleRenderingUpdate(): RenderLayerCompositor::scheduleLayerFlush()
           calls this function to decide either immediately flush layers or wait
           for the next timed frame. scheduleImmediateRenderingUpdate() will be
           called for WK1. scheduleTimedRenderingUpdate() will be called for WK2.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::scheduleAnimationResolution):
        * dom/Document.cpp:
        (WebCore::Document::scheduleTimedRenderingUpdate):
        (WebCore::Document::scheduleInitialIntersectionObservationUpdate):
        (WebCore::Document::updateResizeObservations):
        (WebCore::Document::scheduleRenderingUpdate): Deleted.
        * dom/Document.h:
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        * page/ChromeClient.h:
        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::didChangeViewExposedRect):
        (WebCore::PageOverlayController::notifyFlushRequired):
        * page/RenderingUpdateScheduler.cpp:
        (WebCore::RenderingUpdateScheduler::scheduleTimedRenderingUpdate):
        (WebCore::RenderingUpdateScheduler::displayRefreshFired):
        (WebCore::RenderingUpdateScheduler::scheduleImmediateRenderingUpdate):
        (WebCore::RenderingUpdateScheduler::scheduleRenderingUpdate):
        (WebCore::RenderingUpdateScheduler::scheduleCompositingLayerFlush): Deleted.
        * page/RenderingUpdateScheduler.h:
        * page/ResizeObserver.cpp:
        (WebCore::ResizeObserver::observe):
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::notifyFlushRequired):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText):

2019-06-07  Megan Gardner  <megan_gardner@apple.com>

        Extend quirks to emulate bold/italic/underline in hidden editable areas
        https://bugs.webkit.org/show_bug.cgi?id=198681

        Reviewed by Wenson Hsieh.

        Rename only.

        Rename quirks to be more accurate for new extended use.

        * page/Quirks.cpp:
        (WebCore::shouldEmulateEditingButtonsAndGesturesInHiddenEditableAreasForHost):
        (WebCore::Quirks::shouldEmulateEditingButtonsAndGesturesInHiddenEditableAreas const):
        (WebCore::shouldEmulateUndoRedoInHiddenEditableAreasForHost): Deleted.
        (WebCore::Quirks::shouldEmulateUndoRedoInHiddenEditableAreas const): Deleted.
        * page/Quirks.h:

2019-06-07  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r246138.

        Broke internal builds

        Reverted changeset:

        "[WHLSL] Educate the property resolver about IndexExpressions"
        https://bugs.webkit.org/show_bug.cgi?id=198399
        https://trac.webkit.org/changeset/246138

2019-06-07  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Remove GPUBuffer.setSubData and implement GPUDevice.createBufferMapped
        https://bugs.webkit.org/show_bug.cgi?id=198591

        Reviewed by Myles C. Maxfield.

        Remove GPUBuffer.setSubData from the WebGPU API.
        Add GPUDevice.createBufferMapped to the WebGPU API. 

        Existing tests have been updated.

        * Modules/webgpu/WebGPUBuffer.cpp:
        (WebCore::WebGPUBuffer::setSubData): Deleted.
        * Modules/webgpu/WebGPUBuffer.h:
        * Modules/webgpu/WebGPUBuffer.idl:
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createBufferMapped const):
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDevice.idl:
        * platform/graphics/gpu/GPUBuffer.h:
        * platform/graphics/gpu/GPUCommandBuffer.h:
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::tryCreateBuffer):
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::tryCreate):
        (WebCore::GPUBuffer::GPUBuffer):
        (WebCore::GPUBuffer::state const):
        (WebCore::GPUBuffer::mapOnCreation):
        (WebCore::GPUBuffer::commandBufferCompleted):
        (WebCore::GPUBuffer::copyStagingBufferToGPU):
                Required to unmap GPUBuffers created with GPU-private storage.
        (WebCore::GPUBuffer::unmap):
        (WebCore::GPUBuffer::setSubData): Deleted.
        (WebCore::GPUBuffer::reuseSubDataBuffer): Deleted.

2019-06-07  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix non-iOS build after r246205
        https://bugs.webkit.org/show_bug.cgi?id=198657
        <rdar://problem/51345064>

        * page/Quirks.cpp:
        * page/Quirks.h:

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

        mediaDevices.enumerateDevices() doesn't list the system default audio devices with deviceId as "default"
        https://bugs.webkit.org/show_bug.cgi?id=198577
        <rdar://problem/51454067>

        Reviewed by Eric Carlson.

        Make the system default microphone/camera be the first in the list.
        This ensures that getUserMedia without constraints will pick these devices.
        This also ensures enumerateDevices will show these default devices as first in the list.
        Make sure that a default device change will refresh the list.

        For CoreAudioCaptureSource, we always add the default system input device in the list of capture devices.

        Covered by manual testing.

        * platform/mediastream/mac/AVCaptureDeviceManager.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::toCaptureDevice):
        (WebCore::AVCaptureDeviceManager::isMatchingExistingCaptureDevice):
        (WebCore::AVCaptureDeviceManager::refreshCaptureDevices):
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:
        (WebCore::getDefaultDeviceID):
        (WebCore::CoreAudioCaptureDeviceManager::refreshAudioCaptureDevices):

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

        A MediaStreamTrack cannot modify whether being a capture track or not
        https://bugs.webkit.org/show_bug.cgi?id=198669

        Reviewed by Eric Carlson.

        Add a boolean in MediaStreamTrack to store whether a track is a capture one or not.
        This removes the need to always go through the private and its source.
        As a track might change of source (for non capture track cases), this
        also removes the possibility for a track to be capture and then no
        longer capture.
        No change of behavior.
        See also rdar://problem/49444622.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        * Modules/mediastream/MediaStreamTrack.h:
        (WebCore::MediaStreamTrack::isCaptureTrack const):

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

        Add a RELEASE_ASSERT that removeAudioProducer should always be done in the main thread
        https://bugs.webkit.org/show_bug.cgi?id=198668

        Reviewed by Eric Carlson.

        See rdar://problem/49444622 for background information.
        No change of behavior.

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

2019-06-07  Zalan Bujtas  <zalan@apple.com>

        Images are not resizing correctly when dragged to a message in 1/3 view
        https://bugs.webkit.org/show_bug.cgi?id=198623
        <rdar://problem/51185518>

        Reviewed by Wenson Hsieh.

        Mail's max-width: 100%; default style is in conflict with the preferred presentation size. This patch preserves the existing behaviour for Mail by
        not setting the height (and rely on the width + aspect ratio). 

        * editing/WebContentReader.h:
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::createFragmentForImageAttachment):
        (WebCore::WebContentReader::readImage):
        (WebCore::attachmentForFilePath):
        (WebCore::attachmentForData):
        (WebCore::WebContentReader::readFilePath):
        (WebCore::WebContentReader::readDataBuffer):
        * editing/gtk/EditorGtk.cpp:
        (WebCore::createFragmentFromPasteboardData):
        * editing/markup.cpp:
        (WebCore::createFragmentForImageAndURL):
        * editing/markup.h:
        * platform/Pasteboard.h:
        (WebCore::PasteboardWebContentReader::readFilePath):
        (WebCore::PasteboardWebContentReader::readImage):
        (WebCore::PasteboardWebContentReader::readDataBuffer):
        * platform/PasteboardItemInfo.h:
        (WebCore::PasteboardItemInfo::encode const):
        (WebCore::PasteboardItemInfo::decode):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::readPasteboardWebContentDataForType):
        (WebCore::Pasteboard::read):
        (WebCore::Pasteboard::readRespectingUTIFidelities):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::informationForItemAtIndex):

2019-06-07  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Line should skip all vertical adjustment when running preferred width computation
        https://bugs.webkit.org/show_bug.cgi?id=198642
        <rdar://problem/51511043>

        Reviewed by Antti Koivisto.

        While layout triggers both horizontal and vertical aligment, preferred width computation should only do (logical)horizontal.
        Make all vertical alignment computation optional in Line.

        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::UncommittedContent::add):
        (WebCore::Layout::InlineFormattingContext::LineLayout::placeInlineItems const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::computedIntrinsicWidth const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::createDisplayRuns const):
        (WebCore::Layout::inlineItemHeight): Deleted.
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::Content::Run::Run):
        (WebCore::Layout::Line::Line):
        (WebCore::Layout::Line::close):
        (WebCore::Layout::Line::removeTrailingTrimmableContent):
        (WebCore::Layout::Line::moveLogicalLeft):
        (WebCore::Layout::Line::trailingTrimmableWidth const):
        (WebCore::Layout::Line::appendNonBreakableSpace):
        (WebCore::Layout::Line::appendInlineContainerStart):
        (WebCore::Layout::Line::appendInlineContainerEnd):
        (WebCore::Layout::Line::appendTextContent):
        (WebCore::Layout::Line::appendNonReplacedInlineBox):
        (WebCore::Layout::Line::appendReplacedInlineBox):
        (WebCore::Layout::Line::appendHardLineBreak):
        (WebCore::Layout::Line::inlineItemHeight const):
        * layout/inlineformatting/InlineLine.h:

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

        Limit simulated mouse events on Google Maps to entering Street View
        https://bugs.webkit.org/show_bug.cgi?id=198657
        <rdar://problem/51345064>

        Reviewed by Brent Fulgham.

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

2019-06-07  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Use const TabSize& instead of TabSize to avoid unnecessary copy.

        Using const reference is a c++ feature to extend the life time of
        a temporary object to the life time of the const reference which refers to it.

        No behavioral changes.

        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setTabSize):

2019-06-07  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] GLContextEGL.h must be built with @no-unify
        https://bugs.webkit.org/show_bug.cgi?id=198659

        Unreviewed ARM build fix.

        * SourcesGTK.txt:

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

        position:fixed inside overflow positioning nodes is jumpy
        https://bugs.webkit.org/show_bug.cgi?id=198647
        <rdar://problem/51514437>

        Reviewed by Frédéric Wang.

        Tests: scrollingcoordinator/ios/fixed-overflow-no-stacking-context-1.html
               scrollingcoordinator/ios/fixed-overflow-no-stacking-context-2.html
               scrollingcoordinator/ios/fixed-overflow-stacking-context-stationary.html

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

        Take deltas from positioning nodes into account.

        * page/scrolling/cocoa/ScrollingTreePositionedNode.h:
        * page/scrolling/cocoa/ScrollingTreePositionedNode.mm:
        (WebCore::ScrollingTreePositionedNode::scrollDeltaSinceLastCommit const):

        Rename since 'scrollOffset' has other meaning.

        (WebCore::ScrollingTreePositionedNode::applyLayerPositions):
        (WebCore::ScrollingTreePositionedNode::scrollOffsetSinceLastCommit const): Deleted.
        * page/scrolling/cocoa/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::applyLayerPositions):

2019-06-07  Enrique Ocaña González  <eocanha@igalia.com>

        [MSE][GStreamer] Avoid QUOTA_EXCEEDED_ERR when seeking to a buffered range just before the buffered one
        https://bugs.webkit.org/show_bug.cgi?id=166620

        Reviewed by Xabier Rodriguez-Calvar.

        This patch is fixing a seek to unbuffered range just before the buffered one.
        For example, supposing a [120, 176) append has filled all the memory and then
        a seek to 115.0 is done, a subsequent [115, 120) append would fail without
        this fix. EvictCodedFrames() would return without actually evicting anything,
        and appendBufferInternal will print "buffer full, failing with
        QUOTA_EXCEEDED_ERR error" on GStreamer platforms instead of letting the new
        [115, 120) append succeed.

        This patch is based on an original patch by iivlev <iivlev@productengine.com>

        Test: media/media-source/media-source-append-before-last-range-no-quota-exceeded.html

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::evictCodedFrames):
        Removed the "only if there are buffered ranges *containing* the currentTime" condition
        to enter into the second part of the eviction algorithm, which removes frames
        starting from the duration of the media and going backwards down to currentPosition + 30.
        The loop break condition has also been changed to deal with notFound currentTimeRange.

2019-06-07  Philippe Normand  <philn@igalia.com>

        [GStreamer] AVC1 decoding capabilities probing support
        https://bugs.webkit.org/show_bug.cgi?id=198569

        Reviewed by Xabier Rodriguez-Calvar.

        When capabilities for an avc1 codec are requested, the registry scanner looks
        for a compatible decoder for the given H.264 profile and level.

        This new approach can be avoided by using the WEBKIT_GST_MAX_AVC1_RESOLUTION
        environment variable. If supplied, the decoder capabilities won't be probed and
        the codec will be advertised as supported if it complies with the contents of
        the environment variable. The resolutions currently handled are specifically:
        1080P, 720P and 480P. We don't handle framerate checking yet, so the implied
        H.264 levels are assumed to be for 30FPS.

        * platform/graphics/gstreamer/GStreamerRegistryScanner.cpp:
        (WebCore::GStreamerRegistryScanner::isCodecSupported const):
        (WebCore::GStreamerRegistryScanner::areInputCapsAccepted const):
        (WebCore::GStreamerRegistryScanner::isAVC1CodecSupported const):
        * platform/graphics/gstreamer/GStreamerRegistryScanner.h:

2019-06-07  Joonghun Park  <jh718.park@samsung.com>

        Implement tab-size with units
        https://bugs.webkit.org/show_bug.cgi?id=179022

        Reviewed by Simon Fraser.

        This change is ported from Blink.
        The committed revision is https://src.chromium.org/viewvc/blink?revision=189430&view=revision.

        Additionally, this patch lets css "number" value be allowed as tab-size's property value,
        not css "integer" value,
        according to https://drafts.csswg.org/css-text-3/#tab-size-property.

        Tests: css3/tab-size.html
               imported/w3c/web-platform-tests/css/css-values/calc-numbers.html

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSProperties.json:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertTabSize):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeTabSize):
        * layout/inlineformatting/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::width):
        * platform/graphics/FontCascade.h:
        (WebCore::FontCascade::tabWidth const):
        * platform/graphics/TabSize.h: Added.
        (WebCore::TabSize::TabSize):
        (WebCore::TabSize::isSpaces const):
        (WebCore::TabSize::widthInPixels const):
        (WebCore::TabSize::operator bool const):
        (WebCore::operator==):
        (WebCore::operator!=):
        * platform/graphics/TextRun.cpp:
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::tabSize const):
        (WebCore::TextRun::setTabSize):
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::Style::Style):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::tabSize const):
        (WebCore::RenderStyle::setTabSize):
        (WebCore::RenderStyle::initialTabSize):
        * rendering/style/StyleRareInheritedData.cpp:
        * rendering/style/StyleRareInheritedData.h:

2019-06-07  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] videorate issues with v4l2src
        https://bugs.webkit.org/show_bug.cgi?id=198614

        Reviewed by Xabier Rodriguez-Calvar.

        Configure videorate to cope with the live stream provided by the
        source element. Not doing so might lead to errors in the v4l2
        buffer allocator.

        * platform/mediastream/gstreamer/GStreamerVideoCapturer.cpp:
        (WebCore::GStreamerVideoCapturer::createConverter):

2019-06-06  Andy Estes  <aestes@apple.com>

        process-swap-on-navigation error when loading blocked website on iOS 12.2 only.
        https://bugs.webkit.org/show_bug.cgi?id=196930
        <rdar://problem/47819301>

        Reviewed by Chris Dumez.

        When the content filter blocks a navigation, it will continue to load the content filter
        error page in the provisional web process. When dispatching didFailProvisionalLoad, we need
        to specify WillContinueLoading::Yes so that WebKit presents the error page rather than
        switching back to the committed web process.

        Testing blocked by <https://webkit.org/b/198626>.

        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::willHandleProvisionalLoadFailure):
        (WebCore::ContentFilter::handleProvisionalLoadFailure):
        * loader/ContentFilter.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchDidFailProvisionalLoad):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        * loader/FrameLoader.h:

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

        RELEASE_ASSERT hit in CachedFrame constructor
        https://bugs.webkit.org/show_bug.cgi?id=198625
        <rdar://problem/49877867>

        Reviewed by Geoffrey Garen.

        This is a speculative fix, it appears the document is already detached from its
        frame by the time we construct a CachedFrame for it when entering PageCache.

        No new tests, because we do not know yet how this can be reproduced.

        * history/PageCache.cpp:
        (WebCore::canCacheFrame):
        Make a frame as ineligible for PageCache if:
        1. It does not have a document
        or
        2. Its document is already detached from the frame

        (WebCore::PageCache::addIfCacheable):
        Destroy the render tree *before* we check if the page can enter page cache, in case
        destroying the render tree has any side effects that could make the page ineligible
        for Page Cache.

2019-06-06  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: only complete Composite records if the m_startedComposite (followup to r246142)
        https://bugs.webkit.org/show_bug.cgi?id=198639

        Reviewed by Matt Baker.

        In r246142, an `ASSERT` was removed because it is possible for Web Inspector to be opened in
        between `willComposite` and `didComposite`, meaning that previously the `ASSERT` would fire.

        In order to properly handle this, we should replace the `ASSERT` with an `if` so that Web
        Inspector doesn't even try to complete a `Composite` record if it was opened in that case.

        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didComposite):

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

        Allow WebKitTestRunner to terminate network process after it finishes service worker file operations
        https://bugs.webkit.org/show_bug.cgi?id=198584

        Reviewed by Geoffrey Garen.

        Add a promise-based internal API to store service worker registrations on disk.
        Covered by updated test.

        * testing/Internals.cpp:
        (WebCore::Internals::storeRegistrationsOnDisk):
        * testing/Internals.h:
        * testing/Internals.idl:
        * workers/service/SWClientConnection.h:
        (WebCore::SWClientConnection::storeRegistrationsOnDiskForTesting):
        * workers/service/server/RegistrationStore.cpp:
        (WebCore::RegistrationStore::startSuspension):
        (WebCore::RegistrationStore::closeDatabase):
        * workers/service/server/RegistrationStore.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::storeRegistrationsOnDisk):
        * workers/service/server/SWServer.h:

2019-06-06  Brent Fulgham  <bfulgham@apple.com>

        Avoid generating new XSLT-based document when already changing the document.
        https://bugs.webkit.org/show_bug.cgi?id=198525
        <rdar://problem/51393787>

        Reviewed by Ryosuke Niwa.

        We should not allow a pending XSLT transform to change the current document when
        that current document is int he process of being replaced.

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

2019-06-06  Devin Rousso  <drousso@apple.com>

        Web Inspector: create CommandLineAPIHost lazily like the other agents
        https://bugs.webkit.org/show_bug.cgi?id=196047
        <rdar://problem/49087835>

        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/WebInjectedScriptManager.h:
        * inspector/WebInjectedScriptManager.cpp:
        (WebCore::WebInjectedScriptManager::WebInjectedScriptManager):
        (WebCore::WebInjectedScriptManager::connect): Added.
        (WebCore::WebInjectedScriptManager::disconnect):
        (WebCore::WebInjectedScriptManager::discardInjectedScripts):

        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setInspectedNode):

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

        REGRESSION (r243121): Load event should not be fired while animating the 'externalResourcesRequired' attribute 
        https://bugs.webkit.org/show_bug.cgi?id=198576

        Reviewed by Simon Fraser.

        Firing the load event should only happen when dynamic update changes the
        attribute 'externalResourcesRequired'. Animating this attribute should
        not fire the load event.

        When stopping the animations, applyAnimatedPropertyChange() should be
        called first then stopAnimation() is called second. The target element
        should know that its svgAttributeChanged() is called because of animating
        the attribute. So it can differentiate this case from the dynamic update.

        Test: svg/animations/animate-externalResourcesRequired-no-load-event.html

        * svg/SVGExternalResourcesRequired.cpp:
        (WebCore::SVGExternalResourcesRequired::svgAttributeChanged):
        * svg/properties/SVGAnimatedPropertyAnimator.h:

2019-06-05  Saam Barati  <sbarati@apple.com>
2019-06-06  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Move baseline and line height computation to a dedicated function
        https://bugs.webkit.org/show_bug.cgi?id=198611
        <rdar://problem/51482708>

        Reviewed by Antti Koivisto.

        This is in preparation for adding vertical aligment.

        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::appendInlineContainerStart):
        (WebCore::Layout::Line::appendNonReplacedInlineBox):
        (WebCore::Layout::Line::adjustBaselineAndLineHeight):
        * layout/inlineformatting/InlineLine.h:

2019-06-06  Antti Koivisto  <antti@apple.com>

        Position fixed is buggy with overflow:auto scrolling inside iframes
        https://bugs.webkit.org/show_bug.cgi?id=154399
        <rdar://problem/24742251>

        Reviewed by Frederic Wang and Simon Fraser.

        Test: scrollingcoordinator/ios/fixed-frame-overflow-swipe.html

        After layer tree commit we were calling mainFrameViewportChangedViaDelegatedScrolling (even if viewport did not change)
        and expecting it to apply UI side scrolling deltas. However optimization prevents it from descending into subframes
        and we fail to update those properly.

        In reality we only need to to apply scrolling tree positiong after commit if there has been delegated scrolling after the last
        one. Track this and do full update when needed.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::applyLayerPositionsAfterCommit):

        Add specific function for this. Don't do anything unless needed.

        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::didScrollByDelegatedScrolling):

        Track if there has been any delegated scrolling.

        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::wasScrolledByDelegatedScrolling):

        We can now bail out if nothing changes since we no longer rely on this for post-commit updates.

2019-06-06  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Layout and preferred width computation should both call placeInlineItems().
        https://bugs.webkit.org/show_bug.cgi?id=198587
        <rdar://problem/51460340>

        Reviewed by Antti Koivisto.

        This patch enables inline placement logic sharing between layout and preferred width computation.

        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::LineLayout::LineInput::LineInput):
        (WebCore::Layout::InlineFormattingContext::LineLayout::placeInlineItems const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::layout const):
        (WebCore::Layout::InlineFormattingContext::LineLayout::computedIntrinsicWidth const):

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

        [Curl] Report all request headers to web inspector.
        https://bugs.webkit.org/show_bug.cgi?id=191653

        Reviewed by Fujii Hironori.

        Test: http/tests/inspector/network/resource-request-headers.html

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::setDebugCallbackFunction):
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setupTransfer):
        (WebCore::CurlRequest::didReceiveDebugInfo):
        (WebCore::CurlRequest::updateNetworkLoadMetrics):
        (WebCore::CurlRequest::didReceiveDebugInfoCallback):
        * platform/network/curl/CurlRequest.h:

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

        [Cocoa] REGRESSION(r244182): Inspector thinks CA commits can be nested
        https://bugs.webkit.org/show_bug.cgi?id=198497

        Reviewed by Simon Fraser.

        WebInspecter should coalesce nested composites as one recorded composite.
        This can be done by ensuring that we only process CA preCommit and postCommit
        once per nested commits.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::willComposite):
        * inspector/InspectorController.h:
        Export willComposite(). We want to call willComposite()/ didComposite()
        from CA preCommit and postCommit handlers in flushLayers().

        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didComposite):
        Unrelated change: didComposite() should not assert that we're in the middle
        of a composite. Web Inspector may connect in the middle of a composite.

        * page/FrameView.cpp:
        (WebCore::FrameView::flushCompositingStateIncludingSubframes):
        InspectorController::willComposite() will be called form CA preCommit
        handler of flushLayers().

2019-06-05  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Educate the property resolver about IndexExpressions
        https://bugs.webkit.org/show_bug.cgi?id=198399

        Reviewed by Saam Barati.

        This is part one of two patches which will allow buffers to work. This patch
        adds support in the property resolver for index expressions. Index expressions
        get turned into calls to "getter indexers", "setter indexers", or "ander
        indexers". They work almost identically to dot expressions, except there is an
        extra "index" expression which gets turned into an extra argument to those
        functions.

        There's actually a bit of a trick here. Let's say we need to run a getter and
        a setter separately (e.g. "foo[3]++;"). The index expression can't be duplicated
        for both the getter and the setter (e.g. the functions are
        int operator[](Foo, uint) and Foo operator[]=(Foo, uint, int), and we aren't
        allowed to execute the index expression multiple times. Consider if that "3"
        in the example is actually "bar()" with some side effect. So, we have to run
        the index expression once at the correct time, and save its result to a temporary
        variable, and then pass in the temporary variable into the getter and setter.

        So, if the code says "foo[bar()][baz()] = quux();" the following sequence of
        functions get run:

        - bar()
        - operator[](Foo, uint)
        - baz()
        - quux()
        - operator[]=(OtherType, uint, OtherOtherType)
        - operator[]=(Foo, uint, OtherType)

        The next patch will modify the WebGPU JavaScript implementation to send buffer
        lengths to the shader, and for the shader compiler to correctly unpack this
        information and place it inside the array references. That should be everything
        that's needed to get buffers to work. After that, hooking up compute should be
        fairly trivial.

        Tests: webgpu/propertyresolver/ander-abstract-lvalue.html
               webgpu/propertyresolver/ander-lvalue-3-levels.html
               webgpu/propertyresolver/ander-lvalue.html
               webgpu/propertyresolver/ander.html
               webgpu/propertyresolver/getter.html
               webgpu/propertyresolver/indexer-ander-abstract-lvalue.html
               webgpu/propertyresolver/indexer-ander-lvalue-3-levels.html
               webgpu/propertyresolver/indexer-ander-lvalue.html
               webgpu/propertyresolver/indexer-ander.html
               webgpu/propertyresolver/indexer-getter.html
               webgpu/propertyresolver/indexer-setter-abstract-lvalue-3-levels.html
               webgpu/propertyresolver/indexer-setter-abstract-lvalue.html
               webgpu/propertyresolver/indexer-setter-lvalue.html
               webgpu/propertyresolver/indexer-setter.html
               webgpu/propertyresolver/setter-abstract-lvalue-3-levels.html
               webgpu/propertyresolver/setter-abstract-lvalue.html
               webgpu/propertyresolver/setter-lvalue.html

        * Modules/webgpu/WHLSL/AST/WHLSLAddressSpace.h:
        (WebCore::WHLSL::AST::toString):
        * Modules/webgpu/WHLSL/AST/WHLSLEntryPointType.h:
        (WebCore::WHLSL::AST::toString):
        * Modules/webgpu/WHLSL/AST/WHLSLIndexExpression.h:
        (WebCore::WHLSL::AST::IndexExpression::takeIndex):
        * Modules/webgpu/WHLSL/AST/WHLSLReferenceType.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::writeNativeFunction):
        (WebCore::WHLSL::Metal::convertAddressSpace): Deleted.
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::checkOperatorOverload):
        (WebCore::WHLSL::Checker::finishVisiting):
        (WebCore::WHLSL::Checker::visit):
        * Modules/webgpu/WHLSL/WHLSLInferTypes.h:
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        (WebCore::WHLSL::PropertyResolver::visit):
        (WebCore::WHLSL::setterCall):
        (WebCore::WHLSL::getterCall):
        (WebCore::WHLSL::modify):
        (WebCore::WHLSL::PropertyResolver::simplifyRightValue):
        (WebCore::WHLSL::LeftValueSimplifier::finishVisiting):
        (WebCore::WHLSL::LeftValueSimplifier::visit):
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:
        * Modules/webgpu/WHLSL/WHLSLSynthesizeStructureAccessors.cpp:
        (WebCore::WHLSL::synthesizeStructureAccessors):

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

        [WHLSL] Parsing and lexing the standard library is slow
        https://bugs.webkit.org/show_bug.cgi?id=192890
        <rdar://problem/50746335>

        Reviewed by Myles Maxfield.

        The main idea is to avoid backtracking by instead peeking at the next token (and occasionally at the one after that).
        This implies a few things:
        - We can replace the stack of tokens by a trivial ring buffer of size 2 (holding the next token and the one after, or WTF::nullopt if we are at the end of the file).
        - We now have "completeFooExpression" functions, to avoid having to reparse the prefix of some expression, if we find half-way through what it is.

        I also fixed the following parser bug:
        - https://bugs.webkit.org/show_bug.cgi?id=198305 [WHLSL] Multiple variables with initializers in a declaration statement crashes the compiler
            which was due to a mistake I made in the grammar

        Finally I added two new macros: CONSUME_TYPE and PARSE to eliminate about 500 lines of error propagation boilerplate.

        There are still lots of ways of improving the parser and lexer, such as:
        - finishing the conversion of tokens in the lexer, not bothering with allocating string views
        - make two special tokens Invalid and EOF, to remove the overhead of Optional
        - make peekTypes and consumeTypes use templates to avoid constructing a Vector and calling find on it.
        - Turn the entire lexer into a proper automata, not going through the same characters again and again (this is certainly the largest win by far)
        - Remove the last few pieces of backtracking from the parser.

        The current patch is already enough to make parsing the full standard library (something like 85k lines) approximately 260ms.
        This is still longer than I would like, but nowhere near the bottleneck any longer because of some other parts of the compiler.

        * Modules/webgpu/WHLSL/WHLSLLexer.h:
        (WebCore::WHLSL::Lexer::Lexer):
        (WebCore::WHLSL::Lexer::consumeToken):
        (WebCore::WHLSL::Lexer::peek):
        (WebCore::WHLSL::Lexer::peekFurther):
        (WebCore::WHLSL::Lexer::state const):
        (WebCore::WHLSL::Lexer::setState):
        (WebCore::WHLSL::Lexer::unconsumeToken): Deleted.
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parse):
        (WebCore::WHLSL::Parser::peek):
        (WebCore::WHLSL::Parser::peekTypes):
        (WebCore::WHLSL::Parser::tryType):
        (WebCore::WHLSL::Parser::tryTypes):
        (WebCore::WHLSL::Parser::consumeTypes):
        (WebCore::WHLSL::Parser::parseConstantExpression):
        (WebCore::WHLSL::Parser::parseTypeArgument):
        (WebCore::WHLSL::Parser::parseTypeArguments):
        (WebCore::WHLSL::Parser::parseTypeSuffixAbbreviated):
        (WebCore::WHLSL::Parser::parseTypeSuffixNonAbbreviated):
        (WebCore::WHLSL::Parser::parseType):
        (WebCore::WHLSL::Parser::parseTypeDefinition):
        (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::parseComputeFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseVertexFragmentFunctionDeclaration):
        (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::parseExpression):
        (WebCore::WHLSL::Parser::parseTernaryConditional): Deleted.
        (WebCore::WHLSL::Parser::completeTernaryConditional):
        (WebCore::WHLSL::Parser::parseAssignment): Deleted.
        (WebCore::WHLSL::Parser::completeAssignment):
        (WebCore::WHLSL::Parser::parsePossibleTernaryConditional):
        (WebCore::WHLSL::Parser::parsePossibleLogicalBinaryOperation):
        (WebCore::WHLSL::Parser::completePossibleLogicalBinaryOperation):
        (WebCore::WHLSL::Parser::parsePossibleRelationalBinaryOperation):
        (WebCore::WHLSL::Parser::completePossibleRelationalBinaryOperation):
        (WebCore::WHLSL::Parser::parsePossibleShift):
        (WebCore::WHLSL::Parser::completePossibleShift):
        (WebCore::WHLSL::Parser::parsePossibleAdd):
        (WebCore::WHLSL::Parser::completePossibleAdd):
        (WebCore::WHLSL::Parser::parsePossibleMultiply):
        (WebCore::WHLSL::Parser::completePossibleMultiply):
        (WebCore::WHLSL::Parser::parsePossiblePrefix):
        (WebCore::WHLSL::Parser::parsePossibleSuffix):
        (WebCore::WHLSL::Parser::parseCallExpression):
        (WebCore::WHLSL::Parser::parseTerm):
        (WebCore::WHLSL::Parser::parseAddressSpaceType): Deleted.
        (WebCore::WHLSL::Parser::parseNonAddressSpaceType): Deleted.
        (WebCore::WHLSL::Parser::parseEntryPointFunctionDeclaration): Deleted.
        (WebCore::WHLSL::Parser::parseEffectfulPrefix): Deleted.
        (WebCore::WHLSL::Parser::parseEffectfulSuffix): Deleted.
        * Modules/webgpu/WHLSL/WHLSLParser.h:
        (WebCore::WHLSL::Parser::Error::dump const):

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

        Revert part of r246126
        https://bugs.webkit.org/show_bug.cgi?id=197132

        * platform/ios/WebItemProviderPasteboard.h:
        This change broke an internal build, so I'm reverting it.

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

        [CSP] Data URLs should inherit their CSP policy
        https://bugs.webkit.org/show_bug.cgi?id=198572
        <rdar://problem/50660927>

        Reviewed by Brent Fulgham.

        As per <https://w3c.github.io/webappsec-csp/#security-inherit-csp> (Editor's Draft, 28 February 2019) data
        URLs should inherit their CSP policy from their parent (if they have one).

        Test: http/tests/security/contentSecurityPolicy/subframe-with-data-url-inheritance.html

        * dom/Document.cpp:
        (WebCore::Document::shouldInheritContentSecurityPolicyFromOwner const):

2019-06-05  Saam Barati  <sbarati@apple.com>

        Unreviewed. Follow up fix after r246115.
        I changed the code to assert that we don't have duplicate native
        functions. It turns out we do. I will fix that here, then add
        back the assert. https://bugs.webkit.org/show_bug.cgi?id=198580

        * Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp:
        (WebCore::WHLSL::checkDuplicateFunctions):

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

        Progress towards resurrecting Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=197132

        Reviewed by Don Olmstead.

        * CMakeLists.txt:
        * PlatformMac.cmake:
        * platform/cocoa/ContentFilterUnblockHandlerCocoa.mm:

== Rolled over to ChangeLog-2019-06-05 ==
